activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Phil Pickett <Phil.Pick...@springsource.com>
Subject Re: Another XA Transaction question
Date Mon, 07 Sep 2009 17:43:41 GMT


----- Original Message -----
From: sbuster <stevebuster911@hotmail.com>
To: users@activemq.apache.org <users@activemq.apache.org>
Sent: Mon Sep 07 09:24:16 2009
Subject: Another XA Transaction question


I'm using ActiveMQ 5.2 with WebSphere 7.0 and Sun JavaDB 10.x.  Pretty
standard requirement, I have a message that arrives on a Queue, gets pulled
off with Message Drive Bean and needs to be directly insert into JavaDB. 
However, when I thrown an exception inside my MDB to test the rollback
capabilities, the database is rolled back, the the messages is never rolled
back. The message is never placed back on the queue, it gets consumed
somehow.   I have "transaction required" set in the MDB deployment file(see
below) and I've even tried changing the ra.xml file for ActiveMQ to
specifically state ActiveMQXAConnection factory.  Can anyone help?





ejb deployment file
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
	<display-name>MessageEngine2</display-name>
	<enterprise-beans>
		<message-driven id="EventConsumer">
			<ejb-name>EventConsumer</ejb-name>
			<ejb-class>cat.cw.messaging.EventConsumerBean</ejb-class>
			<messaging-type>javax.jms.MessageListener</messaging-type>
			<transaction-type>Container</transaction-type>
			<message-destination-type>javax.jms.Queue</message-destination-type>
			<activation-config>
				<activation-config-property>
				
<activation-config-property-name>destinationType</activation-config-property-name>
				
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
				</activation-config-property>
			</activation-config>
			<resource-ref id="ResourceRef_1251986165885">
				<description>
				</description>
				<res-ref-name>jdbc/NSSampleDB</res-ref-name>
				<res-type>javax.sql.DataSource</res-type>
				<res-auth>Container</res-auth>
				<res-sharing-scope>Shareable</res-sharing-scope>
			</resource-ref>
		</message-driven>
	</enterprise-beans>
	<assembly-descriptor>
		<container-transaction>
			<method>
				<ejb-name>EventConsumer</ejb-name>
				<method-name>*</method-name>
			</method>
			<trans-attribute>Required</trans-attribute>
		</container-transaction>
	</assembly-descriptor>
</ejb-jar>


MDB
public void onMessage(javax.jms.Message msg) {
		
		
		InitialContext ctx = null;
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			String txtMsg = null;
			if(msg instanceof BytesMessage){
				txtMsg = readByteData((BytesMessage)msg);
			}else{
				txtMsg = ((TextMessage)msg).getText();
			}
			ctx = new InitialContext();
			DataSource ds = (DataSource)ctx.lookup("jdbc/NSSampleDB");
			con = ds.getConnection();
			con.setAutoCommit(false);
			stmt = con.prepareStatement("insert into app.messages(message)
values(?)");
			
			stmt.setString(1,txtMsg);
			int result = stmt.executeUpdate();
			if(txtMsg.equalsIgnoreCase("error")){
				throw new Exception("error");
			}
			//con.commit();
			System.out.println("inserted message:");
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			fMessageDrivenCtx.setRollbackOnly();
			System.out.println(e.getMessage());
		}finally{
			try{
			stmt.close();
			con.close();
			}catch(Exception e){}
		}
	}
-- 
View this message in context: http://www.nabble.com/Another-XA-Transaction-question-tp25331346p25331346.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Mime
View raw message