Learn how to put your digital team to work with MuleSoft for Agentforce.
Contact Us 1-800-596-4880

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:

  1. In your JMS Config, configure the XA Connection Pool fields for Min pool size, Max pool size, and Max idle seconds:

 <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>
  1. 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>
View on GitHub