<div class="wiki-content maincontent"><h3 id="JMSandJDBCoperationsinonetransaction-JMSandJDBCoperationsinonetransactionwithSpring/Jencks/ActiveMQ">JMS and JDBC operations in one transaction with Spring/Jencks/ActiveMQ</h3>

<p>Spring beans:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">
&lt;beans&gt;
    &lt;!-- ActiveMQ Broker --&gt;
    &lt;bean id="broker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop"&gt;
        &lt;property name="persistent" value="false"/&gt;
        &lt;property name="transportConnectorURIs"&gt;
            &lt;list&gt;
                &lt;value&gt;tcp://localhost:5000&lt;/value&gt;
            &lt;/list&gt;
        &lt;/property&gt;
    &lt;/bean&gt;

    &lt;!-- Geronimo Transaction Manager --&gt;
    &lt;bean id="transactionContextManager" class="org.jencks.factory.TransactionContextManagerFactoryBean"/&gt;
    &lt;bean id="geronimo" class="org.jencks.factory.GeronimoTransactionManagerFactoryBean"/&gt;
    &lt;bean id="geronimoTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"&gt;
        &lt;property name="userTransaction" ref="geronimo" /&gt;
    &lt;/bean&gt;

    &lt;!-- Jencks Connection Manager --&gt;
    &lt;bean id="connectionManager" class="org.jencks.factory.ConnectionManagerFactoryBean"&gt;
        &lt;property name="transactionSupport"&gt;
            &lt;bean class="org.jencks.factory.XATransactionFactoryBean"&gt;
                &lt;property name="useTransactionCaching" value="true"/&gt;
                &lt;property name="useThreadCaching" value="false"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
        &lt;property name="poolingSupport"&gt;
            &lt;bean class="org.jencks.factory.SinglePoolFactoryBean"&gt;
                &lt;property name="maxSize" value="2"/&gt;
                &lt;property name="minSize" value="1"/&gt;
                &lt;property name="blockingTimeoutMilliseconds" value="60"/&gt;
                &lt;property name="idleTimeoutMinutes" value="60"/&gt;
                &lt;property name="matchOne" value="true"/&gt;
                &lt;property name="matchAll" value="true"/&gt;
                &lt;property name="selectOneAssumeMatch" value="true"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
    &lt;/bean&gt;

    &lt;!-- ActiveMQ Connection --&gt;
    &lt;bean id="jmsResourceAdapter" class="org.apache.activemq.ra.ActiveMQResourceAdapter" depends-on="broker"&gt;
        &lt;property name="serverUrl"&gt;
            &lt;value&gt;tcp://localhost:5000&lt;/value&gt;
        &lt;/property&gt;
    &lt;/bean&gt;
    &lt;bean id="jmsManagedConnectionFactory" class="org.apache.activemq.ra.ActiveMQManagedConnectionFactory"&gt;
        &lt;property name="resourceAdapter" ref="jmsResourceAdapter"/&gt;
    &lt;/bean&gt;
    &lt;bean id="jmsConnectionFactory" class="org.springframework.jca.support.LocalConnectionFactoryBean"&gt;
        &lt;property name="managedConnectionFactory" ref="jmsManagedConnectionFactory"/&gt;
        &lt;property name="connectionManager" ref="connectionManager"/&gt;
    &lt;/bean&gt;

    &lt;!-- Tranql JDBC Connection --&gt;
    &lt;!--
    &lt;bean id="tranqlManagedConnectionFactory" class="org.jencks.tranql.XAPoolDataSourceMCF"&gt;
        &lt;property name="driverName" value="org.postgresql.Driver"/&gt;
        &lt;property name="url" value="jdbc:postgresql://ats-manager/activemq"/&gt;
        &lt;property name="user" value="activemq"/&gt;
    &lt;/bean&gt;
    &lt;bean id="tranqlDataSource" class="org.springframework.jca.support.LocalConnectionFactoryBean"&gt;
        &lt;property name="managedConnectionFactory" ref="tranqlManagedConnectionFactory"/&gt;
        &lt;property name="connectionManager" ref="connectionManager"/&gt;
    &lt;/bean&gt;
    --&gt;

    &lt;!-- Enhydra JDBC Connection --&gt;
    &lt;bean id="enhydraDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"&gt;
        &lt;property name="dataSource"&gt;
            &lt;bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"&gt;
                &lt;property name="transactionManager" ref="geronimo" /&gt;
                &lt;property name="driverName" value="org.postgresql.Driver" /&gt;
                &lt;property name="url" value="jdbc:postgresql://ats-manager/activemq" /&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
        &lt;property name="user" value="activemq"/&gt;
    &lt;/bean&gt;

    &lt;bean id="jencksJCAContainer" class="org.jencks.JCAContainer"&gt;
        &lt;property name="bootstrapContext"&gt;
            &lt;bean class="org.jencks.factory.BootstrapContextFactoryBean"&gt;
                &lt;property name="threadPoolSize" value="25"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
        &lt;property name="resourceAdapter" ref="jmsResourceAdapter"/&gt;
    &lt;/bean&gt;

    &lt;bean id="inboundConnector" class="org.jencks.JCAConnector"&gt;
        &lt;property name="jcaContainer" ref="jencksJCAContainer" /&gt;
        &lt;property name="activationSpec"&gt;
            &lt;bean class="org.apache.activemq.ra.ActiveMQActivationSpec"&gt;
                &lt;property name="destination" value="messages.input"/&gt;
                &lt;property name="destinationType" value="javax.jms.Queue"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
        &lt;property name="transactionManager" ref="geronimo"/&gt;
        &lt;property name="ref" value="echoBean"/&gt;
    &lt;/bean&gt;

    &lt;bean id="echoBean" class="transactions.EchoBean"&gt;
        &lt;property name="jdbcTemplate"&gt;
            &lt;bean class="org.springframework.jdbc.core.JdbcTemplate"&gt;
                &lt;property name="dataSource" ref="enhydraDataSource"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
        &lt;property name="jmsTemplate"&gt;
            &lt;bean class="org.springframework.jms.core.JmsTemplate"&gt;
                &lt;property name="connectionFactory" ref="jmsConnectionFactory"/&gt;
            &lt;/bean&gt;
        &lt;/property&gt;
    &lt;/bean&gt;
&lt;/beans&gt;
</pre>
</div></div>
<p>Java code:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">
public class EchoBean implements MessageListener {

    private Log log = LogFactory.getLog(getClass());

    private JdbcTemplate jdbcTemplate;
    private JmsTemplate jmsTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void onMessage(Message message) {
        log.debug(message);
        if (message instanceof TextMessage) {
            try {
                String messageText = ((TextMessage)message).getText();
                log.debug("execute JMS operation");
                jmsTemplate.convertAndSend("messages.ouptut", messageText);
                log.debug("execute JDBC operation");
                jdbcTemplate.execute("insert into t1 values('"+messageText+"')");
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}
</pre>
</div></div></div>

