59.12. トランザクションサポート
Camel 2.19 以降で利用可能
Camel CDI は、JTA を使用して Camel トランザクションクライアントをサポートします。
このサポートはオプションであるため、アプリケーションのクラスパスに JTA を含める必要があります。たとえば、Maven を使用するときに JTA を依存関係として明示的に追加します。
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<scope>runtime</scope>
</dependency>アプリケーションを JTA 対応コンテナーにデプロイするか、スタンドアロンの JTA 実装を提供する必要があります。
当面の間、トランザクションマネージャーは java:/TransactionManager キーで JNDI リソースとしてルックアップされることに注意してください。
より幅広いデプロイメントシナリオをサポートするために、より柔軟なストラテジーが将来追加される予定です。
59.12.1. トランザクションポリシー
Camel CDI は、通常サポートされる Camel TransactedPolicy の実装を CDI Bean として提供します。これらのポリシーは、処理された EIP を使用して名前で検索することができます。たとえば、次のようになります。
class MyRouteBean extends RouteBuilder {
@Override
public void configure() {
from("activemq:queue:foo")
.transacted("PROPAGATION_REQUIRED")
.bean("transformer")
.to("jpa:my.application.entity.Bar")
.log("${body.id} inserted");
}
}これは次と同等です。
class MyRouteBean extends RouteBuilder {
@Inject
@Named("PROPAGATION_REQUIRED")
Policy required;
@Override
public void configure() {
from("activemq:queue:foo")
.policy(required)
.bean("transformer")
.to("jpa:my.application.entity.Bar")
.log("${body.id} inserted");
}
}サポートされているトランザクションポリシー名のリストは次のとおりです。
-
PROPAGATION_NEVER, -
PROPAGATION_NOT_SUPPORTED, -
PROPAGATION_SUPPORTS, -
PROPAGATION_REQUIRED, -
PROPAGATION_REQUIRES_NEW, -
PROPAGATION_NESTED, -
PROPAGATION_MANDATORY.
59.12.2. トランザクションエラーハンドラー
Camel CDI は、再配信エラーハンドラーを拡張するトランザクションエラーハンドラーを提供し、例外が発生するたびにロールバックを強制し、再配信ごとに新しいトランザクションを作成します。
Camel CDI は、transactionErrorHandler ヘルパーメソッドを公開する CdiRouteBuilder クラスを提供して、設定への迅速なアクセスを可能にします。
class MyRouteBean extends CdiRouteBuilder {
@Override
public void configure() {
errorHandler(transactionErrorHandler()
.setTransactionPolicy("PROPAGATION_SUPPORTS")
.maximumRedeliveries(5)
.maximumRedeliveryDelay(5000)
.collisionAvoidancePercent(10)
.backOffMultiplier(1.5));
}
}