<jms:config name="JMS_Config">
<jms:active-mq-connection brokerURL="tcp://localhost:61616"
userName="admin"
password="admin">
<jms:xa-connection-pool minPoolSize="1"
maxPoolSize="10"
maxIdleSeconds="45"/>
</jms:active-mq-connection>
</jms:config>
Configuring XA Transactions in JMS Connector
Anypoint Connector for JMS (JMS Connector) provides the option to use Extended Architecture Transactions (XA Transactions) when you configure the XA Connection Pool and the Transaction Type fields.
Before You Begin
Before getting started, ensure that you have an understanding of XA Transactions.
Configure XA Transactions
To configure XA transactions, follow these steps:
-
In your JMS Config, configure the XA Connection Pool fields for Min pool size, Max pool size, and Max idle seconds:
-
Configure the JMS Listener source XA Transaction field to
XA
:
</flow>
<flow name="JMS_Listener_Flow">
<jms:listener
destination="queue.in"
config-ref="JMS_Config"
transactionType="XA"
transactionalAction="ALWAYS_BEGIN">
<ee:transform>
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</jms:listener>
<vm:publish config-ref="VM_Config"
queueName="queue"
transactionType="XA"
transactionalAction="ALWAYS_JOIN"/>
</flow>
In the Configuration XML editor window, the Mule app configuration looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<vm:config name="VM_Config">
<vm:queues>
<vm:queue queueName="queue"/>
</vm:queues>
</vm:config>
<jms:config name="JMS_Config">
<jms:active-mq-connection brokerURL="tcp://localhost:61616"
userName="admin"
password="admin">
<jms:xa-connection-pool minPoolSize="1"
maxPoolSize="10"
maxIdleSeconds="45"/>
</jms:active-mq-connection>
</jms:config>
<http:listener-config name="HTTP_Listener_config">
<http:listener-connection host="0.0.0.0" port="8081"/>
</http:listener-config>
<flow name="JMS_Publish">
<http:listener config-ref="HTTP_Listener_config"
path="/publish"/>
<jms:publish transactionalAction="ALWAYS_JOIN"
destination="queue"/>
</flow>
<flow name="JMS_Listener_Flow">
<jms:listener
destination="queue.in"
config-ref="JMS_Config"
transactionType="XA"
transactionalAction="ALWAYS_BEGIN">
<ee:transform>
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</jms:listener>
<vm:publish config-ref="VM_Config"
queueName="queue"
transactionType="XA"
transactionalAction="ALWAYS_JOIN"/>
</flow>
<flow name="VM_Listener_Flow">
<vm:listener config-ref="VM_Config"
transactionalAction="NONE"
transactionType="XA"
queueName="queue">
</vm:listener>
<logger level="INFO"
message="Message Received from VM Queue: #[payload]"/>
</flow>
</mule>