1.2. Apache Camel 4 への移行
このセクションでは、Apache Camel アプリケーションをバージョン 3.20 以降から 4.0 に移行するのに役立つ情報を提供します。
個々のバージョンは、以下を参照してください。
Apache Camel Quarkus のアップグレード方法は、以下を参照してください。
1.2.1. Java バージョン リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel 4 は Java 17 をサポートします。Java 11 のサポートは終了します。
1.2.2. 削除されたコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
次のコンポーネントが削除されました。
| コンポーネント | 代替コンポーネント |
|---|---|
| camel-any23 | none |
| camel-atlasmap | none |
| camel-atmos | none |
| camel-caffeine-lrucache | camel-cache、camel-ignite、camel-infinispan |
| camel-cdi | camel-spring-boot、camel-quarkus |
| camel-corda | none |
| camel-directvm | camel-direct |
| camel-dozer | camel-mapstruct |
| camel-elasticsearch-rest | camel-elasticsearch |
| camel-gora | none |
| camel-hbase | none |
| camel-hyperledger-aries | none |
| camel-iota | none |
| camel-ipfs | none |
| camel-jbpm | none |
| camel-jclouds | none |
| camel-johnzon | camel-jackson、camel-fastjson、camel-gson |
| camel-microprofile-metrics | camel-micrometer、camel-opentelemetry |
| camel-milo | none |
| camel-opentracing | camel-micrometer、camel-opentelemetry |
| camel-rabbitmq | spring-rabbitmq-component |
| camel-rest-swagger | camel-openapi-rest |
| camel-restdsl-swagger-plugin | camel-restdsl-openapi-plugin |
| camel-resteasy | camel-cxf、camel-rest |
| camel-solr | none |
| camel-spark | none |
| camel-spring-integration | none |
| camel-swagger-java | camel-openapi-java |
| camel-websocket | camel-vertx-websocket |
| camel-websocket-jsr356 | camel-vertx-websocket |
| camel-vertx-kafka | camel-kafka |
| camel-vm | camel-seda |
| camel-weka | none |
| camel-xstream | camel-jacksonxml |
| camel-zipkin | camel-micrometer、camel-opentelemetry |
1.2.3. ロギング リンクのコピーリンクがクリップボードにコピーされました!
Camel 4 では、ロギングファサード API slf4j-api が 1.7 から 2.0 にアップグレードされました。
1.2.4. JUnit 4 リンクのコピーリンクがクリップボードにコピーされました!
JUnit 4.x ベースの camel-test モジュールはすべて削除されました。テストモジュールはすべて JUnit 5 を使用するようになりました。
1.2.5. API の変更 リンクのコピーリンクがクリップボードにコピーされました!
次の API は非推奨となり、バージョン 4 から削除されました。
-
org.apache.camel.ExchangePatternからInOptionalOutを削除しました。 -
getEndpointMap()メソッドをCamelContextから削除しました。 -
@FallbackConverterを削除しました。代わりに@Converter(fallback = true)を使用する必要があります。 -
@EndpointInject、@Produce、および@Consumeのuri属性を削除しました。代わりにvalue(デフォルト) を使用する必要があります。たとえば、@Produce(uri = "kafka:cheese")は、@Produce("kafka:cheese")に変更する必要があります。 -
@UriEndpointのlabelを削除しました。代わりにcategoryを使用する必要があります。 -
ProducerTemplateのすべてのasyncCallbackメソッドを削除しました。代わりにasyncSendまたはasyncRequestを使用してください。 -
org.apache.camel.spi.OnCamelContextStartを削除しました。代わりにorg.apache.camel.spi.OnCamelContextStartingを使用してください。 -
org.apache.camel.spi.OnCamelContextStopを削除しました。代わりにorg.apache.camel.spi.OnCamelContextStoppingを使用してください。 -
org.apache.camel.ExtendedCamelContextをorg.apache.camel.CamelContextから分離しました。 -
org.apache.camel.CamelContextのadapt()をgetCamelContextExtensionに置き換えました。 -
org.apache.camel.Exchangeからorg.apache.camel.ExtendedExchangeを分離しました。 -
org.apache.camel.ExtendedExchangeのadapt()をgetExchangeExtensionに置き換えました。 -
Exchange の障害処理ステータスが、
ExchangePropertyKey.FAILURE_HANDLEDとして定義されたプロパティーから、`isFailureHandled()` メソッドを介してアクセスできる ExtendedExchange のメンバーに移動しました。 -
org.apache.camel.util.concurrent.ThreadPoolRejectedPolicyからDiscardとDiscardOldestを削除しました。 -
org.apache.camel.builder.SimpleBuilderを削除しました。これは主に、Camel の内部で、場合によっては Java DSL とともに使用されていました。 -
org.apache.camel.support.IntrospectionSupportを、内部使用専用とするためにcamel-core-engineに移動しました。エンドユーザーは代わりにorg.apache.camel.spi.BeanInspectionを使用する必要があります。 -
org.apache.camel.catalog.CamelCatalogからarchetypeCatalogAsXmlメソッドを削除しました。 -
org.apache.camel.health.HealthCheckメソッドisLivenessが、デフォルトでtrueではなくfalseになりました。 -
org.apache.camel.StreamCacheにpositionメソッドを追加しました。 -
インターフェイス
org.apache.camel.main.Listenerのconfigureメソッドを削除しました。 -
org.apache.camel.support.EventNotifierSupport抽象クラスがCamelContextAwareを実装するようになりました。 -
CamelContextのdumpRoutesのタイプが、booleanからStringに変更され、xml または yaml のいずれかを指定できるようになりました。
org.apache.camel.support.PluginHelper を使用すると、以前 Camel v3 で CamelContext から直接利用できたさまざまなエクステンションやコンテキストプラグインに簡単にアクセスできます。
1.2.6. EIP の変更 リンクのコピーリンクがクリップボードにコピーされました!
-
各 EIP の
<description>のlang属性を削除しました。 -
InOnlyおよびInOutEIP を削除しました。代わりに、使用するエクスチェンジパターンを指定できるSetExchangePatternまたはToを使用してください。
1.2.6.1. エンリッチポーリング EIP リンクのコピーリンクがクリップボードにコピーされました!
ポーリングされるエンドポイント URI が、他のすべての EIP と同様に、Exchange のプロパティーとして (キー CamelToEndpoint とともに) 保存されるようになりました。これは URI がメッセージヘッダーとして保存される前に実行されます。
1.2.6.2. CircuitBreaker EIP リンクのコピーリンクがクリップボードにコピーされました!
camel-resilience4j の次のオプションが、誤りにより、属性として定義されていませんでした。
| オプション |
| bulkheadEnabled |
| bulkheadMaxConcurrentCalls |
| bulkheadMaxWaitDuration |
| timeoutEnabled |
| timeoutExecutorService |
| timeoutDuration |
| timeoutCancelRunningFuture |
これらのオプションは YAML DSL では公開されませんでした。XML DSL では以下から移行する必要があります。
代わりに次の属性を使用してください。
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
1.2.7. XML DSL リンクのコピーリンクがクリップボードにコピーされました!
ルートまたはノードに説明を設定する <description> が要素から属性に変更されました。
例
<route id="myRoute" description="Something that this route do"> <from uri="kafka:cheese"/> ... </route>
<route id="myRoute" description="Something that this route do">
<from uri="kafka:cheese"/>
...
</route>
1.2.8. 型コンバーター リンクのコピーリンクがクリップボードにコピーされました!
String java.io.File コンバーターは削除されました。
1.2.9. トレーシング リンクのコピーリンクがクリップボードにコピーされました!
Tracer および Backlog Tracer に、Rest DSL、ルートテンプレート、または Kamelet によって作成されたルートからの内部トレースイベントが含まれなくなりました。これをオンにするには、トレーサーで traceTemplates=true を設定します。
Backlog Tracer が強化され、メッセージヘッダー (およびストリーミングタイプ) をトレースするように 修正 されました。以前は InputStream タイプのヘッダーがトレースされていませんでしたが、現在はトレース対象に含まれます。そのため、ヘッダーストリームを最後に配置し、その後ヘッダーをログに記録すると、ヘッダー値が空であると表示される可能性があります。
1.2.10. UseOriginalMessage / UseOriginalBody リンクのコピーリンクがクリップボードにコピーされました!
useOriginalMessage または useOriginalBody が OnException、OnCompletion またはエラーハンドラーで有効になっている場合、元のメッセージボディーが防御的にコピーされ、アクセス時にボディーを再読み取りできるように、可能な場合は StreamCache に変換されます。以前は、元のボディーが StreamCache に変換されなかったため、ボディーを読み取れなかったり、ストリームが閉じられたりする可能性がありました。
1.2.11. Camel の正常性 リンクのコピーリンクがクリップボードにコピーされました!
ヘルスチェックは、デフォルトですぐに使用できる readiness チェックのみになりました。Camel は、CamelContextCheck を readiness チェックと liveness チェックの両方の形で提供するため、すぐに使用できる状態のチェックがそれぞれ少なくとも 1 つあります。デフォルトでは、コンシューマーベースのヘルスチェックのみが有効になっています。
1.2.11.1. プロデューサーのヘルスチェック リンクのコピーリンクがクリップボードにコピーされました!
オプション camel.health.components-enabled の名前が camel.health.producers-enabled に変更されました。
一部のコンポーネント (特に AWS) は、プロデューサーのヘルスチェックも提供します。Camel 3.x では、これらのヘルスチェックは正しく機能せず、ソースで無効になっています。Camel 4 でもこの動作を継続するために、プロデューサーベースのヘルスチェックは無効になっています。
camel-kafka には、Camel 3 で機能していたプロデューサーベースのヘルスチェックが付属しています。そのため、Camel 4 でのこの変更により、このヘルスチェックが無効になることに注意してください。
application.properties などでプロデューサーのヘルスチェックをグローバルに有効にする 必要があります。
camel.health.producers-enabled = true
camel.health.producers-enabled = true
1.2.12. JMX リンクのコピーリンクがクリップボードにコピーされました!
Camel のプロセッサー MBean のツリーに、doCatch および doFinally の MBean も含まれるようになりました。
ManagedChoiceMBean の名前が、choiceStatistics から extendedInformation に変更になりました。ManagedFailoverLoadBalancerMBean の名前が、exceptionStatistics から extendedInformation に変更になりました。
CamelContextMBean と CamelRouteMBean から、メソッド dumpRouteAsXml(boolean resolvePlaceholders, boolean resolveDelegateEndpoints) が削除されました。
1.2.13. YAML DSL リンクのコピーリンクがクリップボードにコピーされました!
route の子として steps を持つことができる下位互換性モード (Camel 3.14 以前) が削除されました。
新しい構文は次のとおりです。
- route:
from:
uri: "direct:info"
steps:
- log: "message"
- route:
from:
uri: "direct:info"
steps:
- log: "message"
1.2.14. バックログのトレース リンクのコピーリンクがクリップボードにコピーされました!
オプション backlogTracing=true が自動的に有効になり、起動時にトレーサーが開始するようになりました。以前のバージョンでは、トレーサーは利用可能になるだけで、後で手動で有効にする必要がありました。backlogTracingStandby=true を設定すると、古い動作を実現できます。
次のクラスを、camel-management-api JAR の org.apache.camel.api.management.mbean.BacklogTracerEventMessage から、camel-api JAR の org.apache.camel.spi.BacklogTracerEventMessage に移動します。
org.apache.camel.impl.debugger.DefaultBacklogTracerEventMessage が、トレースされたメッセージに関する追加の詳細を備えたインターフェイス org.apache.camel.spi.BacklogTracerEventMessage にリファクタリングされました。たとえば、Camel は入力メッセージと出力メッセージ (InOut の場合) を含む 最初 と 最後 のトレースをキャプチャーするようになりました。
1.2.15. XML シリアライゼーション リンクのコピーリンクがクリップボードにコピーされました!
ModelToXMLDumper を使用したデフォルトの XML シリアライザーが改善され、camel-jaxb の JAXB ベースの XML シリアライザーではなく、camel-xml-io モジュールにある生成された XML シリアライザーを使用するようになりました。
1.2.16. OpenAPI Maven プラグイン リンクのコピーリンクがクリップボードにコピーされました!
camel-restdsl-openapi-plugin Maven プラグインは、生成された Rest DSL コードのデフォルトの REST コンポーネントとして、Quarkus でそのまま使用できる優れたデフォルトである platform-http を使用するようになりました。
1.2.17. コンポーネントの変更 リンクのコピーリンクがクリップボードにコピーされました!
1.2.17.1. Category リンクのコピーリンクがクリップボードにコピーされました!
org.apache.camel.Category の列挙型の数が 83 から 37 に削減されました。つまり、削除された値を使用しているカスタムコンポーネントに、残りの値の 1 つを指定する必要があります。これは、Camel コミュニティー内のすべてのコンポーネントのカテゴリーの数を整理するために行われました。
1.2.17.2. camel-openapi-rest-dsl-generator リンクのコピーリンクがクリップボードにコピーされました!
この DSL ジェネレーターでは、基礎となるモデルクラス (apicurio-data-models) が 1.1.27 から 2.0.3 に更新されました。
1.2.17.3. camel-atom リンクのコピーリンクがクリップボードにコピーされました!
camel-atom コンポーネントのサードパーティーの Atom クライアントが、Apache Abdera から RSSReader に変更されました。これにより、フィードオブジェクトが org.apache.abdera.model.Feed から com.apptasticsoftware.rssreader.Item に変更されました。
1.2.17.4. camel-azure-cosmosdb リンクのコピーリンクがクリップボードにコピーされました!
itemPartitionKey が更新されました。これは PartitionKey ではなく String になりました。詳細は、CAMEL-19222 を参照してください。
1.2.17.5. camel-bean リンクのコピーリンクがクリップボードにコピーされました!
method オプションを使用して特定のメソッドを参照し、"bean:myBean?method=foo(com.foo.MyOrder, true)" などのパラメーターの型と値を使用する場合、すべてのクラス型が .class 構文を使用する必要があります。つまり、com.foo.MyOrder は com.foo.MyOrder.class にする必要があります。
例
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
これは、String、int などの Java 型にも当てはまります。
"bean:myBean?method=bar(String.class, int.class)"
"bean:myBean?method=bar(String.class, int.class)"
1.2.17.6. camel-box リンクのコピーリンクがクリップボードにコピーされました!
Box Java SDK v2 から v4 にアップグレードされ、メソッドのシグネチャーがいくつか変更されました。ファイルのサムネイルを取得するメソッドは利用できなくなりました。
1.2.17.7. camel-caffeine リンクのコピーリンクがクリップボードにコピーされました!
keyType パラメーターが削除されました。キャッシュのキーは String 型のみになりました。詳細は、CAMEL-18877 を参照してください。
1.2.17.8. camel-fhir リンクのコピーリンクがクリップボードにコピーされました!
基盤となる hapi-fhir ライブラリーが 4.2.0 から 6.2.4 にアップグレードされました。Delete API メソッドのみが変更され、org.hl7.fhir.instance.model.api.IBaseOperationOutcome ではなく ca.uhn.fhir.rest.api.MethodOutcome を返すようになりました。基礎となる変更の詳細なリストは、hapi-fhir を参照してください (Camel では hapi-fhir クライアントのみが使用されます)。
1.2.17.9. camel-google リンクのコピーリンクがクリップボードにコピーされました!
API ベースのコンポーネント camel-google-drive、camel-google-calendar、camel-google-sheets、および camel-google-mail が、Google Java SDK v1 から v2 および最新の API リビジョンにアップグレードされました。camel-google-drive と camel-google-sheets では、API メソッドがいくつか変更されていますが、その他は以前と同じです。
1.2.17.10. camel-http リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Apache HttpComponents v5 を使用するようにアップグレードされました。これは、基礎となるクライアントの設定方法に影響を与えます。当初の 3 つのタイムアウト (connectionRequestTimeout、connectTimeout、および socketTimeout) ではなく、4 つの異なるタイムアウト (connectionRequestTimeout、connectTimeout、soTimeout、および responseTimeout) があります。これらの一部のデフォルト値が変更されています。詳細は、ドキュメントを参照してください。
HttpClient の可能な設定パラメーターから socketTimeout が削除されていることに注意してください。代わりに responseTimeout を使用してください。
最後に、オプション soTimeout と SocketConfig に含まれるパラメーターには、接頭辞として httpConnection を付ける必要があります。HttpClientBuilder および RequestConfig に定義されているパラメーターを含む残りのパラメーターには、以前のように接頭辞として httpClient を付ける必要があります。
1.2.17.11. camel-http-common リンクのコピーリンクがクリップボードにコピーされました!
org.apache.camel.http.common.HttpBinding の API が、再利用しやすいようにわずかに変更されました。parseBody メソッドが、入力パラメーターとして HttpServletRequest を受け取るようになりました。また、すべての HttpMessage が汎用の Message タイプに変更されました。
1.2.17.12. camel-kubernetes リンクのコピーリンクがクリップボードにコピーされました!
io.fabric8:kubernetes-client ライブラリーがアップグレードされ、一部の非推奨の API 使用法が削除されました。以前、replace という接頭辞が付けられていた操作に、update という接頭辞が付けられるようになりました。
たとえば、replaceConfigMap は updateConfigMap になり、replacePod は updatePod になりました。KubernetesOperations クラスの対応する定数の名前も変更されました。REPLACE_CONFIGMAP_OPERATION は UPDATE_CONFIGMAP_OPERATION に、REPLACE_POD_OPERATION は UPDATE_POD_OPERATION になりました。
1.2.17.13. camel-web3j リンクのコピーリンクがクリップボードにコピーされました!
camel-web3j は、web3j JAR を 3.x から 5.0 にアップグレードしました。これには多くの API 変更が含まれるため、以前の API 呼び出しの一部は提供されなくなりました。
1.2.17.14. camel-main リンクのコピーリンクがクリップボードにコピーされました!
次の定数は、BaseMainSupport / Main から MainConstants に移動されました。
| 以前の名前 | 新しい名前 |
|---|---|
| Main.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION | MainConstants.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION |
| Main.INITIAL_PROPERTIES_LOCATION | MainConstants.INITIAL_PROPERTIES_LOCATION |
| Main.OVERRIDE_PROPERTIES_LOCATION | MainConstants.OVERRIDE_PROPERTIES_LOCATION |
| Main.PROPERTY_PLACEHOLDER_LOCATION | MainConstants.PROPERTY_PLACEHOLDER_LOCATION |
1.2.17.15. camel-micrometer リンクのコピーリンクがクリップボードにコピーされました!
メトリクスの名前が、Micrometer の命名規則に従って変更されました。
| 以前の名前 | 新しい名前 |
| CamelExchangeEventNotifier | camel.exchange.event.notifier |
| CamelExchangesFailed | camel.exchanges.failed |
| CamelExchangesFailuresHandled | camel.exchanges.failures.handled |
| CamelExchangesInflight | camel.exchanges.external.redeliveries |
| CamelExchangesSucceeded | camel.exchanges.succeeded |
| CamelExchangesTotal | camel.exchanges.total |
| CamelMessageHistory | camel.message.history |
| CamelRoutePolicy | camel.route.policy |
| CamelRoutePolicyLongTask | camel.route.policy.long.task |
| CamelRoutesAdded | camel.routes.added |
| CamelRoutesRunning | camel.routes.running |
1.2.17.16. camel-jbang リンクのコピーリンクがクリップボードにコピーされました!
コマンド camel dependencies の名前が camel dependency に変更されました。
Camel JBang では、init および run ゴールの -dir パラメーターの名前が変更され、他のすべてのオプションと同様に 2 つのダッシュ --dir が必要になりました。
camel stop コマンドは、デフォルトで実行中のすべてのインテグレーションを停止します (オプション --all は削除されました)。
プレースホルダー置換 が、$name 構文ではなく #name を使用するように変更されました。
1.2.17.17. camel-openapi-java リンクのコピーリンクがクリップボードにコピーされました!
camel-openapi-java コンポーネントが、io.apicurio.datamodels ではなく io.swagger.v3 ライブラリーを使用するように変更されました。その結果、パブリックメソッド org.apache.camel.openapi.RestOpenApiReader.read() の戻り値の型が、io.apicurio.datamodels.openapi.models.OasDocument ではなく io.swagger.v3.oas.models.OpenAPI になりました。OpenAPI 2.0 (swagger) 仕様が解析されると、swagger パーサーによって OpenAPI 3.0.x に自動的にアップグレードされます。このバージョンでは、OpenAPI 3.1.x 仕様もサポートされています。
1.2.17.18. camel-optaplanner リンクのコピーリンクがクリップボードにコピーされました!
camel-optaplanner コンポーネントは、SolverManager を使用するように変更されました。Camel 3 で SoverManager を使用していた場合、ルートにブール値 useSolverManager は不要になりました。非推奨の ProblemFactChange は、ProblemChange に置き換えられました。
新しい URI パスは次のとおりです。
from("optaplanner:myProblemName")
.to("...")
from("optaplanner:myProblemName")
.to("...")
Optaplanner SolverManager は、2 つの方法で渡すことができます。
- #parameter として
- ヘッダーとして
Quarkus 上で camel-optaplanner を実行する場合は、Quarkus の方法を使用して SolverManager を作成します。
以下のコードに示すように、XML 設定ファイルを指定することで、従来の Camel Optaplanner ルートを移行できます。これにより、Camel Optaplanner が従来のルートの SolverManager を作成できるようになります。
Optaplanner Routes XML 設定ファイルを指定する
from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
.to("...")
from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
.to("...")
- 注記
- Solver Daemon ソリューションは、SolverManager を使用するように移行する必要があります。
1.2.17.19. camel-platform-http-vertx リンクのコピーリンクがクリップボードにコピーされました!
ルートまたはコンシューマーが一時停止している場合、http ステータス 404 ではなく 503 が返されるようになりました。
1.2.17.20. camel-salesforce リンクのコピーリンクがクリップボードにコピーされました!
生成された DTO の Blob フィールドのプロパティー名に 'Url' が付加されなくなりました。たとえば、ContentVersionUrl プロパティーは ContentVersion になりました。
1.2.17.21. camel-slack リンクのコピーリンクがクリップボードにコピーされました!
Slack によって頻繁にレートが制限されるのを避けるために、slack コンシューマーのデフォルトの遅延が 0.5 秒から 10 秒に変更されました。
1.2.17.22. camel-micrometer-starter リンクのコピーリンクがクリップボードにコピーされました!
uri タグが (デフォルトで) 動的ではなく静的になりました。動的値を持つ URI が原因で、非常に多くのタグが生成される可能性があるためです。これは、camel.metrics.uriTagDynamic=true を設定することで再度有効にできます。
1.2.17.23. camel-platform-http-starter リンクのコピーリンクがクリップボードにコピーされました!
platform-http-starter は、camel-servlet ではなく、HTTP サーバーを直接使用するように変更になりました。したがって、すべての HTTP エンドポイントに、サーブレットのコンテキストパス (デフォルトは camel) が接頭辞として付けられなくなりました。
以下に例を示します。
HTTP エンドポイント
from("platform-http:myservice")
.to("...")
from("platform-http:myservice")
.to("...")
コンテキストパスは使用されていないため、http://localhost:8080/myservice を使用してエンドポイントを呼び出すことができます。
platform-http-starter を Rest DSL とともに使用することもできます。
ルートまたはコンシューマーが一時停止している場合、http ステータス 404 ではなく 503 が返されるようになりました。
1.2.17.24. camel-twitter リンクのコピーリンクがクリップボードにコピーされました!
camel-twitter コンポーネントは、Twitter4j バージョン 4.1.2 を使用するように更新されました。これに伴い、いくつかのクラスで使用される パッケージ が移動されました。Twit ステータスなどの特定の Twitter 関連データにアクセスする場合は、使用するパッケージを twitter4j.Status から twitter4j.v1.Status に更新する必要があります。