Apache Camel: Migration auf Version 3


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.

KlassePfadModul
ActiveMQComponent org.apache.camel.component.activemqcamel-activemq
SimpleRegistryorg.apache.camel.supportcamel-support
org.apache.camel.impl.* org.apache.camel.supportcamel-support
org.apache.camel.impl.* org.apache.camel.impl.engine camel-base
PredicateValidationExceptionorg.apache.camel.support.processor.validationcamel-support
AggregationStrategiesorg.apache.camel.builder.AggregationStrategiescamel-core
AggregationStrategyorg.apache.camel.AggregationStrategycamel-core
JmxSystemPropertyKeysorg.apache.camel.api.management.JmxSystemPropertyKeyscamel-api
XPathBuilderorg.apache.camel.language.xpathcamel-xpath
XPathorg.apache.camel.language.xpath camel-xpath
Beanorg.apache.camel.language.beancamel-bean
Simpleorg.apache.camel.language.simplecamel-core
SpELorg.apache.camel.language.spelcamel-spring
InvokeOnHeaderorg.apache.camel.spicamel-core
InvokeOnHeaders org.apache.camel.spicamel-core
OutputStreamBuilderorg.apache.camel.support.buildercamel-support
XsltAggregationStrategy org.apache.camel.component.xsltcamel-xslt
RoutePolicySupport org.apache.camel.supportcamel-support
FileIdempotentRepository org.apache.camel.support.processor.idempotentcamel-support
MemoryIdempotentRepository org.apache.camel.support.processor.idempotentcamel-support
JNDIContextorg.apache.camel.support.jndicamel-support
AsyncProcessorHelperorg.apache.camel.supportcamel-support
AsyncProcessorConverterHelperorg.apache.camel.support camel-support
CamelContextHelperorg.apache.camel.supportcamel-support
EventHelperorg.apache.camel.supportcamel-support
ExchangeHelperorg.apache.camel.supportcamel-support
GZIPHelperorg.apache.camel.supportcamel-support
JsonSchemaHelperorg.apache.camel.supportcamel-support
MessageHelperorg.apache.camel.supportcamel-support
ObjectHelperorg.apache.camel.supportcamel-support
PlatformHelperorg.apache.camel.supportcamel-support
PredicateAssertHelperorg.apache.camel.supportcamel-support
ResolverHelperorg.apache.camel.supportcamel-support
ResourceHelperorg.apache.camel.supportcamel-support
RestProducerFactoryHelperorg.apache.camel.supportcamel-support
ServiceHelperorg.apache.camel.support.servicecamel-support
UnitOfWorkHelperorg.apache.camel.supportcamel-support

Die folgenden Module wurden entfernt:

  • camel-boon
  • twitter-streaming
  • camel-script

Folgende Komponenten wurden umbenannt und ersetzten alte Komponenten, welche ebenfalls entfernt wurden.

AltNeu
camel-test camel-dataset-test
camel-http4 camel-http
camel-hdfs2 camel-hdfs
camel-mina2camel-mina
camel-mongodb3camel-mongodb
camel-netty4-httpcamel-netty-http
camel-netty4camel-netty
camel-quartz2camel-quartz
camel-rxjava2camel-rxjava
camel-jetty9camel-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.