Hi,
I am using JMSTemplate to send Object message in the websphere Queue. My code is just running fine and currently not giving any problem except that i have configured WebSphereUowTransactionManager with spring annotation driven transaction management support. I wrote a test code to send same message in two of the WAS 7 Queues. after sending one message i explicitly throw and exception to chk whether its rolling back or not. But the transaction is not rolled back.
Following are my JMS application context file settings:
And Following is my message sending method code:Code:<jee:jndi-lookup id="connectionFactory" jndi-name="jms/msgConnectionFactory"/> <jee:jndi-lookup id="destination2" jndi-name="jms/msgQueue2"/> <jee:jndi-lookup id="destination3" jndi-name="jms/msgQueue3"/> <beans:bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager"> </beans:bean> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- MessageSender Bean config --> <beans:bean id="messageSender" class="com.emaratech.integration.service.MessageSender"> <beans:property name="jmsTemplate" ref="jmsTemplate"></beans:property> <beans:property name="jmsTemplate2" ref="jmsTemplate2"></beans:property> </beans:bean> <!-- JMS template settings --> <beans:bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate" > <beans:property name="connectionFactory" ref="connectionFactory" /> <beans:property name="defaultDestination" ref="destination3" /> <beans:property name="sessionTransacted" value="true" /> <beans:property name="sessionAcknowledgeMode"> <util:constant static-field="javax.jms.Session.SESSION_TRANSACTED "/> </beans:property> </beans:bean> <beans:bean id="jmsTemplate2" class="org.springframework.jms.core.JmsTemplate" > <beans:property name="connectionFactory" ref="connectionFactory" /> <beans:property name="defaultDestination" ref="destination2" /> <beans:property name="sessionTransacted" value="true" /> <beans:property name="sessionAcknowledgeMode"> <util:constant static-field="javax.jms.Session.SESSION_TRANSACTED "/> </beans:property> </beans:bean>
Code:@Transactional(readOnly=false, propagation = Propagation.REQUIRES_NEW) public void sendStringMessage(final String strMsg){ log.info("strMsg: " + strMsg); try{ jmsTemplate.send(new MessageCreator(){ public Message createMessage(Session session) throws JMSException { TextMessage objMsg = session.createTextMessage(); objMsg.setText(strMsg); return objMsg; } }); log.info("msg from jms template 1 sent"); if("001".equals(strMsg)){ log.info("exception throwing after template 1"); throw new RuntimeException("Self thrown Exception"); } jmsTemplate2.send(new MessageCreator(){ public Message createMessage(Session session) throws JMSException { TextMessage objMsg = session.createTextMessage(); objMsg.setText(strMsg); return objMsg; } }); log.info("msg from jms template 2 sent"); if("002".equals(strMsg)){ log.info("exception throwing after template 2"); throw new RuntimeException("Self thrown Exception"); } }catch (Exception e) { e.printStackTrace(); } if("003".equals(strMsg)){ log.info("exception throwing after everything"); throw new RuntimeException("Self thrown Exception"); } }
Your help in this matter will be highly appreciated.
Regards,
Saif Khan


Reply With Quote
