Red Hatエンジニアリングの佐藤匡剛です。Camel 3マイグレーションガイド紹介記事の後編です。前編のcamel-core編はこちらです。
前編ではcamel-coreを含むCamelアプリケーション全般に影響する変更をまとめましたが、後編は個別のコンポーネント毎の細かな変更を説明します。こちらは、主に利用しているコンポーネントのセクションだけをチェックすればいいでしょう。
削除されたコンポーネント
camel-core編でも触れた通り、Camel 2.xで非推奨だったAPIやコンポーネントはすべて削除されました。
以下のコンポーネントは、同じコンポーネントのより新しいバージョンがあるために削除されました。(例:camel-http → camel-http4)
- camel-http
- camel-hdfs
- camel-mina
- camel-mongodb
- camel-netty
- camel-netty-http
- camel-quartz
- camel-rx
以下のコンポーネントは、JDK 8で動作しないため削除されました。
- camel-jibx
以下のデータフォーマットは、JDK 9以降で動作しないため削除されました。
- camel-boon
以下のコンポーネントは、Linkedin API 1.0のサポートが終了したために削除されました。新しい2.0 APIを使ったコンポーネントの開発はCAMEL-13813でトラックされています。
- camel-linkedin
また、以下のコンポーネントからは部分的に機能が削除されました。
- camel-zookeeper ― ルートポリシーの機能が削除されました。代わりに
ZooKeeperClusterService
クラスを使うか、camel-zookeeper-masterコンポーネントを使います。 - camel-jetty ― プロデューサー(
to()
)の機能が削除されました。代わりにcamel-httpを使います。 - camel-twitter ― twitter-streamingサブコンポーネントが削除されました。Twitter Streaming APIが非推奨となり動作しなくなったためです。
名前変更されたコンポーネント
大きな変更ポイントとして、これまでCamel 2.xで同じライブラリ/フレームワークの複数バージョンをサポートするために別々の名前になっていたコンポーネント(例:camel-httpとcamel-http4、camel-jettyとcamel-jetty9、など)を、古いバージョンを削除することで整理し、最新バージョンがシンプルなコンポーネント/スキーマ名になるようにしました(例:camel-http4 → camel-http)。
コンポーネント/スキーマ名、パッケージ、JARに変更のあったコンポーネントを表にまとめます。
コンポーネント | パッケージ/JAR | サポートするスキーマ |
---|---|---|
hdfs2 → hdfs |
org.apache.camel.component.hdfs2 → org.apache.camel.component.hdfs |
hdfs |
http4 → http |
org.apache.camel.component.http4 → org.apache.camel.component.http |
http , https |
jetty9 → jetty |
jetty |
|
mina2 → mina |
org.apache.camel.component.mina2 → org.apache.camel.component.mina |
mina |
mongodb3 → mongodb |
org.apache.camel.component.mongodb3 → org.apache.camel.component.mongodb |
mongodb |
netty4 → netty |
org.apache.camel.component.netty4 → org.apache.camel.component.netty |
netty |
netty4-http → netty-http |
org.apache.camel.component.netty4.http → org.apache.camel.component.netty.http |
netty-http |
quartz2 → quartz |
org.apache.camel.component.quartz2 → org.apache.camel.component.quartz |
quartz |
rxjava2 → rxjava |
org.apache.camel.component.rxjava2 → org.apache.camel.component.rxjava |
|
test → dataset-test |
(JAR) camel-core → camel-dataset |
コンポーネントのマイグレーション
ActiveMQコンポーネント
ActiveMQが提供していたactivemq-camelコンポーネントは、今後はCamelからcamel-activemqコンポーネントとして提供されます。コンポーネントのクラス名もorg.apache.activemq.camel.component.ActiveMQComponent
からorg.apache.camel.component.activemq.ActiveMQComponent
に変更されます。
AWSコンポーネント
AWSコンポーネントは、複数のコンポーネントに分割されました。
- camel-aws-cw
- camel-aws-ddb(ddbとddbstreamsの両方のコンポーネントを含む)
- camel-aws-ec2
- camel-aws-ecs
- camel-aws-eks
- camel-aws-iam
- camel-aws-kinesis(kinesisとkinesis-firehoseの両方のコンポーネントを含む)
- 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
これらのAWSのコンポーネントを使用するには、AWSの必要な機能をもったコンポーネントを個別にdependencyに追加する必要があります。ただし、OSGi/Karafについては、camel-aws
Karaf featureが引き続き利用可能で、1つですべてのコンポーネントを利用できます。
CDIコンポーネント
camel-core編で触れたように複数CamelContextのサポートが削除されました。それに伴い、@ContextName
アノテーションも削除されました。代わりに、標準のCDIアノテーション@Named
や@ApplicationScoped
を使います。
Cryptoコンポーネント
Crypto(JCE)コンポーネントのデフォルト署名アルゴリズムが、SHA1WithDSAからSHA256withRSAに変更されました。
FHIRコンポーネント
FHIRコンポーネントはdependencyのhapi-fhirを4.1.0にアップグレードしました。hapi-fhir
Karaf featureに問題があったため、それが解決してリリースされるまでKarafは非サポートになっています。デフォルトのFHIRバージョンはR4に変更されました。したがって、DSTU3が必要な場合、明示的にセットする必要があります。
JMXコンポーネント
camel-coreだけをdependencyとしてCamelアプリケーションをスタンドアロンで実行している場合、JMXを有効化したければ、さらにcamel-managementをdependencyに追加する必要があります。
ManagedCamelContext
クラスを使いたい場合、CamelContext
から拡張として次のように取得します。
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
Kafkaコンポーネント
Kafkaコンポーネントでは、bridgeEndpoint
とcircularTopicDetection
の2つのオプションが削除されました。コンポーネントが標準でブリッジとして動作するようになり、必要なくなったためです。言い換えれば、camel-kafkaではメッセージはエンドポイントURIからトピックへ送信されます。これをオーバーライドするには、KafkaConstants.OVERRIDE_TOPIC
ヘッダに新しいトピック名を指定します。詳細は、camel-kafkaコンポーネントのドキュメントを参照してください。
Mockコンポーネント
Mockコンポーネントはcamel-coreからcamel-mockに移動しました。また、ほとんど使われていなかったアサーション句ビルダーのメソッドもごっそりと削除されました。
またcamel-core編で触れたようにOUT Messageの概念が削除されたのに伴い、以下のような関連するアサーションメソッドも削除されました。
mock.message(0).outBody()...
Propertiesコンポーネント
Propertiesコンポーネントで、カスタムのプレフィクス/サフィックストークンを設定できた機能は削除されました。Simple言語や他のところで潜在的に衝突を起こす可能性があったからです。
また、Propertiesコンポーネントから高度なオプションpropertyPrefix
、propertySuffix
、fallbackToUnaugmented
が削除されました。エンドユーザにとって実際に使えるものではなかったためです。同じく、propertiesResolver
オプションも削除されました。代わりに、PropertiesSource
クラスを使います。
Propertiesコンポーネントでは、OS環境変数が最も優先される値になりました。つまり、OS環境変数を使ってプロパティファイルやJVMシステムプロパティなどで定義されたプロパティ値を上書きできるようになります。この振る舞いは、environmentVariableMode
オプションで制御できます。
Propertiesコンポーネントでは、今後、以下のようなエンドポイントとしての使い方はサポートされません。
properties:myKey
Propertiesコンポーネントの役割は、CamelContextに対するプロパティのプレースホルダーサービスになります。したがって、camelContext.getComponent("properties")
の形でコンポーネントにアクセスすることはできません。代わりにcamelContext.getPropertiesComponent()
を使います。この戻り値もorg.apache.camel.spi.PropertiesComponent
インタフェースになります。実装クラスは引き続きorg.apache.camel.component.properties.PropertiesComponent
ですが、こちらの実装クラスを直接参照するのは非推奨です。
Scriptコンポーネント
Scriptコンポーネント(camel-script)は削除されました。javax.script
がすでに非推奨であり、Java 11以降削除されるためです。
Shiroコンポーネント
Shiroコンポーネントのデフォルト暗号化キーが削除されました。したがって、今後はキー/パスフレーズの提供が必須になります。
Telegramコンポーネント
Telegramコンポーネント(camel-telegram)では、認証トークンがURIパスでの指定からクエリパラメータでの指定に変更されました。
telegram:bots/myTokenHere
の代わりに、
telegram:bots?authorizationToken=myTokenHere
と書き換える必要があります。
XML Securityコンポーネント
XML Securityコンポーネントのデフォルト署名アルゴリズムが、RSA-SHA1からRSA-SHA256に変更されました。
XSLTコンポーネント
XSLTコンポーネントは、camel-coreからcamel-xsltとcamel-xslt-saxonに移動しました。
- came-xslt ― JDKのXSLTエンジン(Xalan)ベースのコンポーネント
- camel-xslt-saxon ― Saxonベースのコンポーネント
コンポーネントのエンドポイントURIも、それぞれxslt
、xslt-saxon
と別々のものを使う必要があります。
XSLTのアグリゲーションストラテジーを使っている場合、Saxonサポートを有効にするにはorg.apache.camel.component.xslt.saxon.XsltSaxonAggregationStrategy
を使います。XSLTビルダーを使っている場合、Saxonサポートを有効にするにはorg.apache.camel.component.xslt.saxon.XsltSaxonBuilder
を使います。また、allowStax
のサポートはcamel-xslt-saxonを使う場合のみになります。JDK XSLTでStaxはサポートされないためです。
データフォーマットのマイグレーション
Cryptoデータフォーマット
Crypto(JCE)データフォーマットのデフォルト暗号化アルゴリズムに変更があり、デフォルトはnull
で明示的な値の設定が必要になりました。以前は"DES/CBC/PKCS5Padding"
でした。
JSONデータフォーマット
JSONデータフォーマットのデフォルトJSONライブラリが、XStreamからJacksonに変更されました。
XML Securityデータフォーマット
XML Securityデータフォーマットのデフォルト暗号化キーが削除されました。したがって、今後は対称暗号を利用する際はキー(文字列 or バイト)の提供が必須になります。つまり、キーを渡さずにXMLSecurityDataFormat
クラスを使っていたメソッドは削除されたことを意味します。
さらに、デフォルトの対称暗号アルゴリズムがTriple DESからAES-256(GCMモード)に変更されました。
Zip / Gzipデータフォーマット
zip
/ gzip
データフォーマットはそれぞれzipdeflater
/ gzipdeflater
に名前変更されました。これは、これらのデータフォーマットがzip / gzipアルゴリズムでデータ圧縮を行うためのもので、zip / gzipファイルを直接扱うものではなかったためです。zipファイルを扱うには、camel-zipfileデータフォーマットを使います。
また、これらのデータフォーマットはcamel-coreからcamel-zip-deflaterに移されました。使用には、camel-zip-deflaterの明示的なdependency追加が必要です。Java/XML DSLの名前も変更されたので、そちらもマイグレーションが必要になります。
最後に
Camel 3マイグレーションガイドの日本語記事が無事完成しました。原文ガイドの構成がカオスな分、日本のCamelユーザの皆さんの方がマイグレーションしやすい環境が整ったと自負しています(笑)。
Camel 3を採用した製品版のRed Hat Fuse 8もいずれリリース(2020年内?)されると思いますが、一足先に是非新しいCamel 3ライフをお楽しみください!