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));
    }
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.