【发布时间】:2014-10-07 08:38:06
【问题描述】:
我需要调用 web 服务,并且需要将响应插入到以序列为键的 DB 父表中。此外,我需要选择刚刚插入的序列号,并将数据插入到 2 个子表中,全部在一个事务中。这怎么可能实现?我可以在事务中进行所有插入,但我需要在第一次插入父表后进行选择以获取序列。任何帮助将不胜感激。
【问题讨论】:
标签: jdbc transactions mule
我需要调用 web 服务,并且需要将响应插入到以序列为键的 DB 父表中。此外,我需要选择刚刚插入的序列号,并将数据插入到 2 个子表中,全部在一个事务中。这怎么可能实现?我可以在事务中进行所有插入,但我需要在第一次插入父表后进行选择以获取序列。任何帮助将不胜感激。
【问题讨论】:
标签: jdbc transactions mule
您可以通过将所有调用包装到一个事务中来实现此目的。有几种异常策略可用,但听起来简单的回滚策略对您有用。如果事务块中的任何调用产生异常,就会触发异常策略。请记住,如果您希望 Web 服务调用在失败时引发异常,则需要检查状态代码并在它不是您所期望的情况下生成异常。
<transactional action="ALWAYS_BEGIN" doc:name="Transactional">
<jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="getSequenceNumber" queryTimeout="-1" connector-ref="myConnector" doc:name="Database">
<jdbc-ee:transaction action="BEGIN_OR_JOIN" />
</jdbc-ee:outbound-endpoint>
<http:outbound-endpoint exchange-pattern="request-response" host="${webServiceHost}"
port="${webServicePort}"
path="${webServicePath}"
method="GET" doc:name="HTTP">
</http:outbound-endpoint>
<jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="createRecord" queryTimeout="-1" connector-ref="myConnector" doc:name="Database">
<jdbc-ee:transaction action="BEGIN_OR_JOIN" />
</jdbc-ee:outbound-endpoint>
<rollback-exception-strategy doc:name="Rollback Exception Strategy" />
</transactional>
您可以在此处阅读有关更多交易的更多信息:http://www.mulesoft.org/documentation/display/current/Transaction+Management
【讨论】: