I am quite new to Spring, using standalone transaction managers. I am trying a put a message on to a queue using JMSTemplate and have it participate in a XA Transaction.
Here are my configurations:
Active MQ Config:
Transaction Manager Config:Code:<bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="TestQ" /> </bean>
Code:Code:<!-- Construct a TransactionManager, needed to configure Spring --> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <property name="forceShutdown"> <value>true</value> </property> <property name="transactionTimeout"> <value>600</value> </property> </bean> <!-- Configure a UserTransaction, needed to configure Spring --> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" /> <!-- Configure the Spring framework to use JTA transactions from the JTA provider --> <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean>
& Finally the exception that is thrown:Code:utx = (UserTransactionImp) ctx.getBean("atomikosUserTransaction"); utx.begin(); // Simulate putting message on a JMS queue ConnectionFactory cf = (ConnectionFactory) ctx.getBean("xaConnectionFactory"); JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(cf); jmsTemplate.send(new ActiveMQQueue("queue"), new MessageCreator() { public Message createMessage(Session session) throws JMSException { return session.createTextMessage("hello queue world"); } });
Any thoughts on the above problem?Code:Caused by: javax.jms.JMSException: Session's XAResource has not been enlisted in a distributed transaction. at org.apache.activemq.ActiveMQXASession.doStartTransaction(ActiveMQXASession.java:109) at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1587) at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:226) at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:240) at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:572) at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:549) at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:516) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:447) ... 24 more


Reply With Quote