我有一个流,当包装在多事务中时,它总是返回NullPayload。当我删除多事务标记时,我得到了预期的结果。为什么会这样呢?以下是代码片段
<flow name="successful-flow" processingStrategy="synchronous">
<vm:inbound-endpoint exchange-pattern="request-response" path="order-process.in" doc:name="VM"/>
<ee:multi-transactional action="ALWAYS_BEGIN" doc:name="Transactional" >
<foreach collection="#[message.payload]" doc:name="For Each"
rootMessageVariableName="Original">
<jms:outbound-endpoint queue="orders.queue"
connector-ref="jmsConnector" doc:name="JMS - Send to Order Processing Queue">
<jms:transaction action="JOIN_IF_POSSIBLE"/>
</jms:outbound-endpoint>
</foreach>
<db:insert config-ref="ORDER_DB" doc:name="Save Orders" >
<db:parameterized-query><![CDATA[insert into orders(PRODUCT_ID,LINE_ITEM_CODE,PRICE,LST_UPDT_TMSP) VALUES('XXT665,'TP',20.99,'09/09/2010')]]></db:parameterized-query>
</db:insert>
</ee:multi-transactional>
<response>
<db:select config-ref="ORDER_DB" doc:name="Database" transactionalAction="ALWAYS_JOIN">
<db:parameterized-query><![CDATA[select count(*) from orders]]></db:parameterized-query>
</db:select>
</response>
<catch-exception-strategy doc:name="Order Processing Exception">
<logger
message="Error during flow - #[message] :: Exception::= # [exception.summaryMessage]"
level="ERROR" doc:name="Logger" />
</catch-exception-strategy>
</flow>发布于 2016-07-16 05:54:12
我的错,之前的事务将不会完成和提交。select查询的默认transactionalAction是JOIN_IF_POSSIBLE,这意味着我将在插入和提交数据之前读取数据。简单的修复方法如下:
<response>
<db:select config-ref="ORDER_DB" doc:name="Database" transactionalAction="NOT_SUPPORTED">
<db:parameterized-query><![CDATA[select count(*) from orders]]></db:parameterized-query>
</db:select>
</response>https://stackoverflow.com/questions/38405017
复制相似问题