I have tested this same functionality within a servlet using UserTransactions and it works fine. Using the same managed resources referenced by the J2EE container as the MDB uses. Any help would be apprecicated.
Thanks sbuster wrote: > > 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-tp25331346p25389655.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.