2016-07-15 7 views
0

Ich habe eine Strömung, die NullPayload immer wieder, wenn sie in einer Multi-Transaktion gewickelt. Wenn ich die Multi-Transaktions Tag entfernen erhalte ich die erwarteten Ergebnisse. Warum das? Hier ist das Code-SnippetNullPayload für Datenbankabfrage nur dann, wenn in einer Transaktion eingewickelt

<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> 

Antwort

0

Meine schlechte, die vorherige Transaktion wird nicht abgeschlossen und verpflichtet worden. Der Standard transactionalAction für die Auswahlabfrage ist JOIN_IF_POSSIBLE was bedeutet, dass ich die Daten werden gelesen, bevor die Daten wurden eingefügt und engagiert. Einfache Lösung ist wie folgt:

<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> 
Verwandte Themen