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
および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
または 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
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"
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)"
これは、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-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("...")
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
に更新する必要があります。