【问题标题】:how to configure camel route for using transactions with database如何配置骆驼路线以使用数据库事务
【发布时间】:2017-03-03 04:56:06
【问题描述】:

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

【问题讨论】:

    标签: apache-camel blueprint apache-servicemix


    【解决方案1】:

    你可以这样做:

    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 存储过程组件的更多详细信息,请参阅: http://camel.apache.org/sql-stored-procedure.html

    【讨论】:

    • 这很有趣。我什至不知道组件 sql-stored。很酷。我会试试。谢谢!
    • 我已经将我的骆驼更新到 2.17.5 版但是当我试图调用 SP 时它给了我错误:由:org.apache.camel.component.sql.stored.template.generated 引起。 ParseException:在第 1 行第 35 列遇到“”“”“”。期待以下之一: ... ...
    • 这是我的调用 John
    • Maciavelli,我没有遇到你提到的问题。我没有办法对此进行调查。请分享有关代码的更多详细信息-我可以尝试重现此错误。只是为了确保您已经升级了所有 Camel jar 并且 Camel jar 文件之间没有不匹配..
    • 这是肯定的.. 对于调用存储过程 - 编写自己的自定义组件并且仍然具有事务功能非常困难。 Transaction mgmt 是 Camel 的强项——作为应用程序程序员,我们不应该涉足其中。但是,您可以编写一个补偿存储过程 - 并在失败的情况下执行它 - 以防解决您的用例..
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多