WSO2 ESB supports transactions in two ways..
Here lets have a look on how we can use jms transport transaction to roll back the transactions in case of failures..
In my previous post, i explained how can we configure a proxy to listen to a particular queue..
Here , we'll add two more additional parameters, to make it rollback the transaction when failures occur..
Service level parameters will overwrite the transport level parameters..
2. Add "SET_ROLLBACK_ONLY" property in the mediation flow(ie: @ your InSequence). When failure occurs , this property helps to rollback the local transaction.
There is a detail article written by Rajika about the transactions support in WSO2ESB...
- Transaction mediator
- JMS transport transaction
Here lets have a look on how we can use jms transport transaction to roll back the transactions in case of failures..
In my previous post, i explained how can we configure a proxy to listen to a particular queue..
Here , we'll add two more additional parameters, to make it rollback the transaction when failures occur..
- Add a service level parameter to enable local JMS transaction...
<parameter name="transport.jms.SessionTransacted">true</parameter>You can define this parameter at your transport configuration, which is defined in the axis2 configuration..
Service level parameters will overwrite the transport level parameters..
2. Add "SET_ROLLBACK_ONLY" property in the mediation flow(ie: @ your InSequence). When failure occurs , this property helps to rollback the local transaction.
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>Here is the final modified configuration...
<proxy name="ErrorProxy" transports="https http jms" startOnLoad="true" trace="disable">If you down your endpoint(ie:ErrorQueueEndpoint); you will see that your message will remain the queue..
<target endpoint="ErrorQueueEndpoint" inSequence="ErrorInSequence" faultSequence="fault"/>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>text/xml</default>
</rules>
</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
<parameter name="transport.jms.DestinationType">queue</parameter>
<parameter name="transport.jms.SessionTransacted">true</parameter>
<parameter name="transport.jms.Destination">errorqueue</parameter>
</proxy>
<sequence name="ErrorInSequence">
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
<log level="custom">
<property name="Picked message" value="************"/>
</log>
<description/>
</sequence>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="ErrorQueueEndpoint">
<address uri="http://localhost:9000/services/SimpleStockQuoteService1">
<timeout>
<duration>30000</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="fault">
<log level="full">
<property name="FAULT SEQ" value="***"/>
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
</sequence>
There is a detail article written by Rajika about the transactions support in WSO2ESB...