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.