我需要调用web服务,并且需要将响应插入到具有序列作为键的DB父表中。此外,我需要选择刚插入的序列号,并在一个事务中将数据插入到2个子表中。怎么能实现这一目标?我可以在事务中执行所有插入操作但是我需要执行select以在第一次插入父表之后获取序列。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以通过将所有调用包装到事务中来实现此目的。有几种可用的异常策略,但听起来简单的回滚策略对您有用。如果事务块中的任何调用生成异常,则将触发异常策略。请记住,如果您希望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