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、および @Consumeuri 属性を削除しました。代わりに value (デフォルト) を使用する必要があります。たとえば、@Produce(uri = "kafka:cheese") は、@Produce("kafka:cheese") に変更する必要があります。
  • @UriEndpointlabel を削除しました。代わりに 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.ExtendedCamelContextorg.apache.camel.CamelContext から分離しました。
  • org.apache.camel.CamelContextadapt()getCamelContextExtension に置き換えました。
  • org.apache.camel.Exchange から org.apache.camel.ExtendedExchange を分離しました。
  • org.apache.camel.ExtendedExchangeadapt()getExchangeExtension に置き換えました。
  • Exchange の障害処理ステータスが、ExchangePropertyKey.FAILURE_HANDLED として定義されたプロパティーから、`isFailureHandled()` メソッドを介してアクセスできる ExtendedExchange のメンバーに移動しました。
  • org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy から DiscardDiscardOldest を削除しました。
  • 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.StreamCacheposition メソッドを追加しました。
  • インターフェイス org.apache.camel.main.Listenerconfigure メソッドを削除しました。
  • org.apache.camel.support.EventNotifierSupport 抽象クラスが CamelContextAware を実装するようになりました。
  • CamelContextdumpRoutes のタイプが、boolean から String に変更され、xml または yaml のいずれかを指定できるようになりました。
注記

org.apache.camel.support.PluginHelper を使用すると、以前 Camel v3 で CamelContext から直接利用できたさまざまなエクステンションやコンテキストプラグインに簡単にアクセスできます。

1.2.6. EIP の変更

  • 各 EIP の <description>lang 属性を削除しました。
  • InOnly および InOut EIP を削除しました。代わりに、使用するエクスチェンジパターンを指定できる 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</timeoutEnabled>
        <timeoutDuration>2000</timeoutDuration>
    </resilience4jConfiguration>
...
</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>

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 または useOriginalBodyOnExceptionOnCompletion またはエラーハンドラーで有効になっている場合、元のメッセージボディーが防御的にコピーされ、アクセス時にボディーを再読み取りできるように、可能な場合は 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

1.2.12. JMX

Camel のプロセッサー MBean のツリーに、doCatch および doFinally の MBean も含まれるようになりました。

ManagedChoiceMBean の名前が、choiceStatistics から extendedInformation に変更になりました。ManagedFailoverLoadBalancerMBean の名前が、exceptionStatistics から extendedInformation に変更になりました。

CamelContextMBeanCamelRouteMBean から、メソッド dumpRouteAsXml(boolean resolvePlaceholders, boolean resolveDelegateEndpoints) が削除されました。

1.2.13. YAML DSL

route の子として steps を持つことができる下位互換性モード (Camel 3.14 以前) が削除されました。

新しい構文は次のとおりです。

- 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.MyOrdercom.foo.MyOrder.class にする必要があります。

"bean:myBean?method=foo(com.foo.MyOrder.class, true)"

これは、String、int などの Java 型にも当てはまります。

"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-drivecamel-google-calendarcamel-google-sheets、および camel-google-mail が、Google Java SDK v1 から v2 および最新の API リビジョンにアップグレードされました。camel-google-drivecamel-google-sheets では、API メソッドがいくつか変更されていますが、その他は以前と同じです。

1.2.17.10. camel-http

このコンポーネントは、Apache HttpComponents v5 を使用するようにアップグレードされました。これは、基礎となるクライアントの設定方法に影響を与えます。当初の 3 つのタイムアウト (connectionRequestTimeoutconnectTimeout、および socketTimeout) ではなく、4 つの異なるタイムアウト (connectionRequestTimeoutconnectTimeoutsoTimeout、および responseTimeout) があります。これらの一部のデフォルト値が変更されています。詳細は、ドキュメントを参照してください。

HttpClient の可能な設定パラメーターから socketTimeout が削除されていることに注意してください。代わりに responseTimeout を使用してください。

最後に、オプション soTimeoutSocketConfig に含まれるパラメーターには、接頭辞として 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 という接頭辞が付けられるようになりました。

たとえば、replaceConfigMapupdateConfigMap になり、replacePodupdatePod になりました。KubernetesOperations クラスの対応する定数の名前も変更されました。REPLACE_CONFIGMAP_OPERATIONUPDATE_CONFIGMAP_OPERATION に、REPLACE_POD_OPERATIONUPDATE_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("...")

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("...")

注記
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("...")

コンテキストパスは使用されていないため、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 に更新する必要があります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.