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...
how we can rollback the inserted rows using wso2dss in wso2 esb let me know...
ReplyDeletei have multiple tables like dependent if 1 one successfully inserted but while i am entering in 2nd table error occuered so 1st table inserted data also rollback how we can do this in wso2