我有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>
我希望上述路线完全是一个交易。
答案 0 :(得分:0)
Cluas你是对的我必须使用相同的事务管理器。
在数据源源端使用DatasourceTxManager,然后通过OSGI公开它解决了这个问题。