【问题标题】:Apache Camel - JDBC Stored Procedures and transaction handling doubtsApache Camel - JDBC存储过程和事务处理的疑惑
【发布时间】:2018-09-29 07:39:43
【问题描述】:

我正在尝试构建一个小型的、概念验证的、基于 Camel 的应用程序(在 FuseESB 上运行),它可能会取代我们现有的基于 EJB 构建的集成系统的一部分。 现在,我正在尝试找出使用 apache camel 处理以下场景的最佳方法:

  1. JMS 短信进来
  2. 我要根据消息内容执行一系列数据库操作,主要是调用存储的precedures/functions
  3. 从 db 调用获得的结果中,我必须构造一个回复消息并将其发送到特定的 jms 队列。
  4. 如果出现错误/异常,我想使用死信通道处理机制。

我可以构建简单的骆驼路线,在骆驼中处理错误和异常看起来也很容易,我不明白的是如何使用骆驼 SQL 组件(我知道 JDBC 组件不能成为事务客户端)来制作我所有的数据库作为单个事务的一部分调用。从我在网上找到的 Camel SQL 组件不能用于执行存储过程 - 是真的吗?如果是,我应该使用处理器还是简单的 pojo 类来执行我的 jdbc 调用?在使用 pojo 或处理器类型的情况下,事务如何处理?我非常感谢任何指向描述如何处理这种用例的资源的指针。

【问题讨论】:

    标签: java apache-camel jbossfuse apache-servicemix fuseesb


    【解决方案1】:

    我建议使用 Java Bean 来进行 JDBC 交互,因为您想进行多次调用并使用存储过程。有时 Java 代码更简单。

    例如,Spring JdbcTemplate 对 JDK JDBC API 有很好的抽象,使得调用存储过程变得相当容易。

    MyBatis 也支持调用存储过程。 http://loianegroner.com/2011/03/ibatis-mybatis-working-with-stored-procedures/

    还有一个camel-mybatis组件。

    【讨论】:

    • 谢谢克劳斯,整个路由的事务怎么样,假设我在几个 bean 中有我的逻辑,每个执行 jdbc 代码,如果其中一个发生异常将整个路由(所有更改在 db 上执行的 beans) 被回滚?
    • 然后您需要设置一个 TX 管理器,并让它协调 JDBC 调用。例如,通常如果您从中获得数据源/jdbc 连接。如果您使用 Spring TX 管理器,那么您可以设置要交易的 Camel 路由,然后 Camel 将在 TX 中执行路由。最后进行提交/回滚。只需确保使用 bean 中的 TX API 查找数据源/jdbc 连接,这样它们就可以参与同一个 TX。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2019-01-16
    • 1970-01-01
    • 2012-03-21
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多