我有一个流,它对数据库进行两次调用以插入数据,并在另一个数据库上调用一个存储过程。我希望将两个插入调用作为事务处理,即它们都插入或两者都不插入。我还希望对存储过程的调用是异步的,因为我不需要等待响应,并且存储过程调用期间的任何错误都不应该影响主消息处理。以下是我配置流程的方法:
<flow name="saveBrowser" doc:name="saveBrowser" >
<http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.port}" path="Browser/Save" doc:name="/Browser/Save" />
...assorted transformations...
<json:json-to-object-transformer doc:name="JSON to BrowserData" returnClass="com.mycompany.BrowserData"/>
<transactional action="ALWAYS_BEGIN" doc:name="Transactional">
<jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="saveBrowser" queryTimeout="-1" connector-ref="firstJdbcConnector" doc:name="INSERT Browser"/>
<jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="saveBrowserExtended" queryTimeout="-1" connector-ref="firstJdbcConnector" doc:name="INSERT BrowserExtended"/>
</transactional>
<async doc:name="Async">
<jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="storedProcedureBrowser" queryTimeout="-1" connector-ref="secondJdbcConnector" doc:name="Stored Proc">
<jdbc:transaction action="NONE"/>
</jdbc:outbound-endpoint>
</async>
<json:object-to-json-transformer doc:name="BrowserData to JSON" sourceClass="com.mycompany.BrowserData" />
<catch-exception-strategy doc:name="Catch Exception Strategy">
...
</catch-exception-strategy>
</flow>
但是,当我向此流发送请求时,我得到的错误是异步范围不能用于事务。事务范围的文档说,&#34;您无法在事务中构建异步流。&#34;但是,异步范围不在事务范围内。它相邻但不在其范围内。为什么这是个问题?
我通过VM端点将消息传递给包含异步范围和存储过程调用的单独流程来解决这个问题。如果有更好的方法,我很乐意知道。
我参与社区版,仅供参考。