Apache camel 如何为使用数据库事务配置驼峰路由

Apache camel 如何为使用数据库事务配置驼峰路由,apache-camel,blueprint,apache-servicemix,Apache Camel,Blueprint,Apache Servicemix,我需要使用ServiceMix 7.0处理KarafI am下OSGI应用程序的事务。所有的逻辑都在驼峰路线下。 首先,我接收Web请求并在路由中处理它,进行转换,然后我需要启动事务:调用Oracle中的storedProcedures,调用另一个Web服务,如果对Web服务的调用成功,我需要提交存储过程调用,否则回滚。可能正在使用EJB或JTA中的容器管理事务。 Camel没有用于调用存储过程的现成组件。所以我使用的是org.springframework.jdbc.object.Stored

我需要使用ServiceMix 7.0处理KarafI am下OSGI应用程序的事务。所有的逻辑都在驼峰路线下。 首先,我接收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存储过程组件的更多详细信息,请参阅:

这很有趣。我甚至不知道存储的组件sql。很酷。我试试看。谢谢我已将camel更新为2.17.5版,但当我尝试调用SP时,会出现错误:原因:org.apache.camel.component.sql.stored.template.generated.ParseException:在第1行第35列遇到。他期待着……中的一个。。。这是我的召唤约翰·马西亚维利,我没有面对你提到的问题。我没有办法调查这件事。请分享更多关于代码的细节,我可以尝试重现这个错误。只是为了确保您已经升级了所有的Camel-jar,并且Camel-jar文件之间没有不匹配的地方。。对于调用存储过程,编写自己的自定义组件并仍然具有事务功能是非常困难的。事务管理是Camel的强项,作为应用程序程序员,我们不应该涉足其中。但是,您可以编写一个补偿存储过程,并在出现故障时执行该过程,以解决您的用例。。