如何配置骆驼路线以使用数据库事务

how to configure camel route for using transactions with database

我需要在 Karaf 下处理 OSGI 应用程序的事务(我使用的是 ServiceMix 7.0)。所有逻辑都在骆驼路线下。 首先,我收到 Web 请求并在路由中处理它,进行转换,然后我需要开始事务:在 Oracle 中调用 storedProcedures,调用另一个 Web 服务,如果对 Web 服务的调用成功,我需要提交存储过程调用,否则回滚。可能正在使用 EJB 或 JTA 中的容器管理事务。 Camel 没有用于调用存储过程的现成组件。所以我使用 org.springframework.jdbc.object.StoredProcedure。现在我不知道如何使用事务上下文进行 SP 调用。

您可以执行以下操作:

from("direct:mainRoute")
   .transacted()
   .to("direct:invokeService")
   .to("sql-stored:SUBNUMBERS(INTEGER ${headers.num1},INTEGER ${headers.num2},OUT INTEGER resultofsub)

您还需要将 TransactionManager 添加到上下文中。

<!-- spring transaction manager -->
<!-- this is the transaction manager Camel will use for transacted routes -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
</bean>

关于Camel SQL stored proc 组件的更多细节请参考: http://camel.apache.org/sql-stored-procedure.html