well, there really seem to be two issues.  first, sending lots of messages 
within an xa transaction fails when lots > ~15000.  second, when the 
transaction does fail, the messages that were sent still get sent, event though 
the rest of the transaction rolls back.  i'm using oracle on the backend, and 
the question i have here is: has anyone else seen this behavior (and fixed it 
through some configuration tweak), or is this a legitimate jboss bug (in which 
case i will file a jira entry)?  This is being run on jboss 4.0.1.

the test code that i am using at this point is included below.  I am not using 
CMT because the actual code doesn't run within an EJB (i just stuck it in one 
for simplicity of testing).

  public void runTest(int numMessagesToSend) throws Exception
  {
    try {
      Transaction tx = null;
      LOG.info("Beginning transaction");
      getTxManager().begin();
      tx = getTxManager().getTransaction();
      tx.registerSynchronization(new TxDebugger("", tx.toString()));

      XASession session = null;
      MessageProducer sender = null;
      try {
      
        LOG.info("Creating Session");
        session = getHAXAConnection().createXASession();
        tx.enlistResource(session.getXAResource());
        sender = session.createProducer(getWorkQueue());

        LOG.info("Sending " + numMessagesToSend + " messages");
        for(int i = 0; i < numMessagesToSend; ++i) {

          ObjectMessage msg = session.createObjectMessage();
          msg.setObject(new TestXAPayload());
          sender.send(msg, DeliveryMode.PERSISTENT, 4,
                      Message.DEFAULT_TIME_TO_LIVE);
        }
        LOG.info("Done sending messages");

      } finally {
        JMSUtil.close(sender, session);
      }

      jdbcSave(numMessagesToSend);

      // commit tx
      LOG.info("Committing transaction");
      getTxManager().commit();
    } finally {
      drainQueue();
    }

    LOG.info("Finished");
  }

  private void jdbcSave(int numMessagesToSend) throws Exception
  {
    LOG.info("Saving TestXAState (jdbc)");
    DataSource ds = (DataSource)new 
InitialContext().lookup("java:/DrenchTestDS");
    
    java.sql.Connection conn = null;
    java.sql.Statement stmt = null;
    try {
      conn = ds.getConnection();
      stmt = conn.createStatement();

      stmt.executeUpdate("INSERT INTO TESTXASTATE(ID, NUMMESSAGESSENT) VALUES 
('1', '" + numMessagesToSend + "')");
    } finally {
      DbUtil.close(stmt, conn);
    }
  }
  
  private void drainQueue() throws Exception
  {
    LOG.info("Draining messages");
    MessageConsumer consumer = null;
    Session session = null;
    int numDrained = 0;
    try {
      session = getHAConnection().createSession(false,
                                                Session.AUTO_ACKNOWLEDGE);
      consumer = session.createConsumer(getWorkQueue());
      Message msg = null;
      while((msg = consumer.receive(5000)) != null) {
        ++numDrained;
      }
    } finally {
      JMSUtil.close(consumer, session);
    }
    LOG.info("Drained " + numDrained + " messages");    
  }


The output of this when run is as follows (notice that the transaction claims 
to have rolledback--and indeed, the separate jdbc update does not happen--but 
the messages get sent anyway):

2005-12-06 17:15:08,132 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Beginning transaction
2005-12-06 17:15:08,137 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Creating Session
2005-12-06 17:15:08,365 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Sending 32000 messages
2005-12-06 17:15:12,989 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Done sending messages
2005-12-06 17:15:13,009 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Saving TestXAState (jdbc)
2005-12-06 17:15:14,859 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Committing transaction
2005-12-06 17:15:14,860 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
TxDebugger beforeCompletion, id , txStr TransactionImpl:XidImpl[FormatId=257, 
GlobalId=james.ws.hmsonline.com/13, BranchQual=, localId=13]
2005-12-06 17:18:39,816 WARN  [org.jboss.tm.TransactionImpl] XAException: 
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=james.ws.hmsonline.com/13, 
BranchQual=, localId=13] errorCode=XAER_NOTA
javax.transaction.xa.XAException
        at com.inet.ora.p.prepare(Unknown Source)
        at 
org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.prepare(XAManagedConnection.java:166)
        at 
org.jboss.tm.TransactionImpl$Resource.prepare(TransactionImpl.java:2100)
        at 
org.jboss.tm.TransactionImpl.prepareResources(TransactionImpl.java:1552)
        at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:319)
        at org.jboss.tm.TxManager.commit(TxManager.java:200)
        at 
com.hmsonline.drench.testApp.ejb.TestXABean.runTest(TestXABean.java:155)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
        at 
org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
        at 
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
        at 
org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
        at 
org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:51)
        at 
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
        at 
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
        at 
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:280)
        at 
org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
        at 
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:123)
        at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
        at 
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
        at 
org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
        at org.jboss.ejb.Container.invoke(Container.java:870)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at 
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
        at 
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
        at 
org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
        at 
org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
        at 
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
        at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
        at java.lang.Thread.run(Thread.java:595)
2005-12-06 17:18:42,066 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
TxDebugger afterCompletion, id , txStr TransactionImpl:XidImpl[FormatId=257, 
GlobalId=james.ws.hmsonline.com/13, BranchQual=, localId=13] status: 
STATUS_ROLLEDBACK
2005-12-06 17:18:42,067 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Draining messages
2005-12-06 17:23:03,638 INFO  [com.hmsonline.drench.testApp.ejb.TestXABean] 
Drained 32000 messages


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3911016#3911016

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3911016


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to