60.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 资源。
以后将添加更灵活的策略来支持更广泛的部署场景。
60.12.1. 事务策略
Camel CDI 为通常支持的 Camel TransactedPolicy
作为 CDI Bean 提供实施。可以使用 transacted 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
.
60.12.2. 事务错误处理程序
Camel CDI 提供了一个事务性错误处理程序,它扩展了 redelivery 错误处理程序,在每次发生异常时强制进行回滚,并为每个重新发送创建新事务。
Camel CDI 提供 CdiRouteBuilder
类,它公开 transactionErrorHandler
帮助程序方法,以启用对配置的快速访问,例如:
class MyRouteBean extends CdiRouteBuilder { @Override public void configure() { errorHandler(transactionErrorHandler() .setTransactionPolicy("PROPAGATION_SUPPORTS") .maximumRedeliveries(5) .maximumRedeliveryDelay(5000) .collisionAvoidancePercent(10) .backOffMultiplier(1.5)); } }