Mit dem Major-Versionsprung zu Version 3 ergeben sich einige Änderungen und Neuheiten in Apache Camel. Die allgemeine Handhabung und API ändert sich nicht, es gibt jedoch wichtige Punkte die bei einer Migration beachtet werden sollten.
Module
Camel ist darauf ausgelegt ein leichtgewichtiges Framework zu sein. Nahezu jede Funktionalität ist daher in ein eigenes Modul ausgelagert. Ein Basismodul war hier immer der camel-core, welcher die Kernelemente beinhaltete. Dieser existiert zwar weiterhin, ist nun jedoch in einzelne kleine Module unterteilt und muss nicht mehr vollständig importiert werden. Der Core lässt sich durch die folgenden module ersetzten:
- camel-api
- camel-base
- camel-caffeine-lrucache
- camel-cloud
- camel-core
- camel-jaxp
- camel-main
- camel-management-api
- camel-management
- camel-support
- camel-util
- camel-util-json
- camel-attachments
- camel-bean
- camel-browse
- camel-controlbus
- camel-dataformat
- camel-dataset
- camel-direct
- camel-directvm
- camel-file
- camel-language
- camel-log
- camel-mock
- camel-ref
- camel-rest
- camel-saga
- camel-scheduler
- camel-seda
- camel-stub
- camel-timer
- camel-validator
- camel-vm
- camel-xpath
- camel-xslt
- camel-zip-deflater
Eine weitere Funktionalität welche aus dem Core ausgelagert wurde sind Helferklassen für das Erstellen von eigenen Komponenten und Languages. Beide wurden in das Modul camel-support gesteckt. Darin befinden sich unter anderem die Klassen DefaultEndpoint und DefaultComponent.
Insgesamt sind durch die Änderungen viele Klassen in ein anderes Modul und daher auch in ein anderes Paket gewandert.
| Klasse | Pfad | Modul |
| ActiveMQComponent | org.apache.camel.component.activemq | camel-activemq |
| SimpleRegistry | org.apache.camel.support | camel-support |
| org.apache.camel.impl.* | org.apache.camel.support | camel-support |
| org.apache.camel.impl.* | org.apache.camel.impl.engine | camel-base |
| PredicateValidationException | org.apache.camel.support.processor.validation | camel-support |
| AggregationStrategies | org.apache.camel.builder.AggregationStrategies | camel-core |
| AggregationStrategy | org.apache.camel.AggregationStrategy | camel-core |
| JmxSystemPropertyKeys | org.apache.camel.api.management.JmxSystemPropertyKeys | camel-api |
| XPathBuilder | org.apache.camel.language.xpath | camel-xpath |
| XPath | org.apache.camel.language.xpath | camel-xpath |
| Bean | org.apache.camel.language.bean | camel-bean |
| Simple | org.apache.camel.language.simple | camel-core |
| SpEL | org.apache.camel.language.spel | camel-spring |
| InvokeOnHeader | org.apache.camel.spi | camel-core |
| InvokeOnHeaders | org.apache.camel.spi | camel-core |
| OutputStreamBuilder | org.apache.camel.support.builder | camel-support |
| XsltAggregationStrategy | org.apache.camel.component.xslt | camel-xslt |
| RoutePolicySupport | org.apache.camel.support | camel-support |
| FileIdempotentRepository | org.apache.camel.support.processor.idempotent | camel-support |
| MemoryIdempotentRepository | org.apache.camel.support.processor.idempotent | camel-support |
| JNDIContext | org.apache.camel.support.jndi | camel-support |
| AsyncProcessorHelper | org.apache.camel.support | camel-support |
| AsyncProcessorConverterHelper | org.apache.camel.support | camel-support |
| CamelContextHelper | org.apache.camel.support | camel-support |
| EventHelper | org.apache.camel.support | camel-support |
| ExchangeHelper | org.apache.camel.support | camel-support |
| GZIPHelper | org.apache.camel.support | camel-support |
| JsonSchemaHelper | org.apache.camel.support | camel-support |
| MessageHelper | org.apache.camel.support | camel-support |
| ObjectHelper | org.apache.camel.support | camel-support |
| PlatformHelper | org.apache.camel.support | camel-support |
| PredicateAssertHelper | org.apache.camel.support | camel-support |
| ResolverHelper | org.apache.camel.support | camel-support |
| ResourceHelper | org.apache.camel.support | camel-support |
| RestProducerFactoryHelper | org.apache.camel.support | camel-support |
| ServiceHelper | org.apache.camel.support.service | camel-support |
| UnitOfWorkHelper | org.apache.camel.support | camel-support |
Die folgenden Module wurden entfernt:
- camel-boon
- twitter-streaming
- camel-script
Folgende Komponenten wurden umbenannt und ersetzten alte Komponenten, welche ebenfalls entfernt wurden.
| Alt | Neu |
| camel-test | camel-dataset-test |
| camel-http4 | camel-http |
| camel-hdfs2 | camel-hdfs |
| camel-mina2 | camel-mina |
| camel-mongodb3 | camel-mongodb |
| camel-netty4-http | camel-netty-http |
| camel-netty4 | camel-netty |
| camel-quartz2 | camel-quartz |
| camel-rxjava2 | camel-rxjava |
| camel-jetty9 | camel-jetty |
Das Modul camel-aws wurde in folgende Module unterteilt:
- camel-aws-cw
- camel-aws-ddb
- camel-aws-ec2
- camel-aws-ecs
- camel-aws-eks
- camel-aws-iam
- camel-aws-kinesis
- camel-aws-kms
- camel-aws-lambda
- camel-aws-mq
- camel-aws-s3
- camel-aws-sdb
- camel-aws-ses
- camel-aws-sns
- camel-aws-sqs
- camel-aws-swf
XML-DSL
Die Attribute headerName und propertyName wurden umbenannt in name.
Das Attribut completionSize aus dem Aggregate-EIP wurde umbenannt in completionSizeExpression. Das Attribut completionTimeout entpsrechend in completionTimeoutExpression.
Das Attribut keyOrTrustStoreParametersId wurde umbenannt zu keyOfTrustStorParametersRef.
Das EIP custom wurde umbenannt zu customLoadBalancer.
Klassen und Methoden
Die Methoden getOut() und hasOut() im Exchange sind nun veraltet und sollten nicht mehr verwendet werden. Sie wurden ersetzt durch getMessage().
Die Klassen CompositeRegistry und PropertyPlaceholderDelegateRegistry wurden entfernt und durch die DefaultRegistry ersetzt.
Die Klasse SimpleLoadBalancerSupport wurde durch LoadBalancerSupport ersetzt.
Die Klasse InvalidXPathExpression wurde durch InvalidXPathException ersetzt.
Die Klassen ReloadStrategySupport und FileWatcherReloadStrategy wurden ersatzlos entfernt.
Die Methode adviceWith() wurde aus der RouteDefinition entfernt und befindet sich nun direkt im AdviceWithRouteBuilder als statische Methode mit einem funktionalen ThrowingConsumer Interface.
AdviceWithRouteBuilder.adviceWith(context, "RouteId", builder -> {
...
}
Annotationen
Die Attribute ref und uri der Annotationen @Consume, @Produce und @EndpointInject sind veraltet oder wurden entfernt. Die Uri kann nun direkt als Parameter in der Form @Consume("rest:hello") übergeben werden.
Die Annotation @Constant wurde entfernt und kann durch @Simple ersetzt werden.
Die Annotation @FallbackConverter wurde entfernt. und durch @Converter(fallback = true) ersetzt.
Simple-Language
Die Funktion property wurde umbenannt in exchangeProperty.
Es ist nun nicht mehr möglich die Token ${} oder $simple{} mit eigenen Token zu überschreiben.
Properties
Auch für Properties können nun keine eigenen Token mehr definiert werden. Die Optionen propertyPrefix, propertySuffix und fallbackToUnaugmented fallen weg.
Umgebungsvariablen werden nun bevorzugt verwendet. Wird eine Umgebungsvariable gesetzt, so überschreibt diese ein gleichnamiges Property aus einer config-Datei.
Die Properties-Komponente muss nun über den Context mit context.getPropertiesComponent() bezogen werden.
CamelContext
Die Konfiguration des CamelContext erfolgt nun nicht mehr über Properties, sondern über Optionen welche über context.getGlobalOptions() erreichbar sind.
Der Context wurde in zwei Interfaces CamelContext und ExtendedCamelContext aufgeteilt. Der erweiterte Context kann über context.adapt(ExtendedCamelContext.class) aufgerufen werden.
Das gleiche gilt für den Katalog, welcher über context.adapt(CatalogCamelContext.class) aufgerufen werden kann.
Die Methoden startRoute, stopRoute, suspendRoute, resumeRoute und getRouteStatus sind nun in der Klasse RouteController, welcher über den CamelContext erhalten werden kann.