【发布时间】:2015-02-10 20:31:34
【问题描述】:
编辑:骡子 3.4.1
我们有一个 Mule 流,它交替从一个数据库读取和插入另一个数据库,所有这些都包装在事务范围内。在这种特殊情况下,后来的插入失败之一,我们希望一切都回滚。
当我们查看日志时,我们会看到第二次插入的异常(例如,重复的 PRIMARY KEY)(例如,下例中的 BulkInsertInstanceToCache)。当我们查看数据库时,我们会看到第一次插入的数据(下例中的 BulkInsertActivityToCache)。我们预计所有数据都会消失。
我们是否为我们想要的行为错误地配置了这个范围?
这是一个代码示例,我将其缩减为仅两个插入以显示正在执行的处理类型。
<flow name="ProcessBulkUpdateCache" processingStrategy="synchronous" doc:name="ProcessBulkUpdateCache">
<transactional action="ALWAYS_BEGIN" doc:name="Transactional">
<jdbc-ee:outbound-endpoint exchange-pattern="request-response"
queryKey="GetActivitiesForCache" queryTimeout="-1" connector-ref="SumTotalDatabase">
<jdbc-ee:transaction action="NONE" />
</jdbc-ee:outbound-endpoint>
<jdbc-ee:outbound-endpoint exchange-pattern="request-response"
queryKey="BulkInsertActivityToCache" queryTimeout="-1" connector-ref="EAIServiceDatabase">
</jdbc-ee:outbound-endpoint>
<jdbc-ee:outbound-endpoint exchange-pattern="request-response"
queryKey="GetInstancesForCache" queryTimeout="-1" connector-ref="SumTotalDatabase">
<jdbc-ee:transaction action="NONE" />
</jdbc-ee:outbound-endpoint>
<jdbc-ee:outbound-endpoint exchange-pattern="request-response"
queryKey="BulkInsertInstanceToCache" queryTimeout="-1" connector-ref="EAIServiceDatabase">
</jdbc-ee:outbound-endpoint>
</transactional>
<catch-exception-strategy doc:name="Unexpected">
...etc.
</catch-exception-strategy>
</flow>
编辑我尝试在第一个 INSERT 中添加一个 BEGIN_OR_JOIN 事务元素,在第二个中添加一个 ALWAYS_JOIN 事务元素,但是代码在到达第二个时抛出异常,即没有事务可以加入.
【问题讨论】:
标签: jdbc transactions mule transactional