2016-07-15 4 views
0

マルチトランザクションでラップされたときに常にNullPayloadを返すフローがあります。マルチトランザクションタグを削除すると、期待した結果が得られます。何故ですか?ここにコードスニペットがありますトランザクションでラップされた場合のみ、データベースクエリの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> 

答えて

0

私の悪いことに、以前の取引は完了せず、コミットされていません。 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> 
関連する問題