每次调用DataService时,都会在Camel路由中创建一个新事务

时间:2014-05-29 00:59:19

标签: spring jdbc transactions apache-camel

我有2个数据库驱动器,它们调用2个不同的存储过程(更新某些表)。我在dataservice上使用了DataSourceTransactionManager来满足这个请求。 这些数据服务是从业务服务中的单个路由(事务处理)调用的,它使用平台事务管理器,其策略为PROPAGATION_REQUIRED。

问题是这两个dataservice调用没有持久化事务,即如果seocond调用失败,则只返回第二个调用,同时提交第一个数据服务调用。我希望dataservice调用都是同一事务的一部分。

下面是我的配置:

 <bean id="required" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
  </bean>

 <bean id="txManager" class="org.springframework.transaction.PlatformTransactionManager"/>


<route>
  <from uri="direct:businessservice"/>
  <transacted ref="required"/>
  <to uri="DataService?updateCustomer"/>
 <to uri="DataService?updateaccount"/>
</route>

我希望上述路线完全是一个交易。

1 个答案:

答案 0 :(得分:0)

Cluas你是对的我必须使用相同的事务管理器。

在数据源源端使用DatasourceTxManager,然后通过OSGI公开它解决了这个问题。