JBoss 4.0.5.GA
JBoss Messaging 1.0.1
Jboss TS 4.2.2
MS-SQL 2000 w/jtds driver

I'm seeing the same problem. Tenured gen is filling up with 
org.jboss.jms.tx.TxState and org.jboss.jms.tx.LocalTx when processing messages 
using an EJB3 MDB. I am debugging through the 
org.jboss.jms.tx.MessagingXAResource and here is what I'm seeing...

In public void start(Xid xid, int flags) throws XAException A new TxState is 
put into the ResourceManager's map of transactions.

In public void end(Xid xid, int flags) throws XAException Another new TxState 
is put into the map of transactions b/c of the call to 
unsetCurrentTransactionId.

  |   // Don't unset the xid if it has previously been suspended.  The session 
could have been
  |       // recycled
  |       if (xid.equals(sessionState.getCurrentTxId()))
  |       {
  |          sessionState.setCurrentTxId(rm.createLocalTx());
  |       }
  | 
which is called no matter what the outcome of the transaction based on this 
code...

  | public void end(Xid xid, int flags) throws XAException
  |    {
  |       if (trace) { log.trace(this + " ending " + xid + ", flags: " + 
flags); }
  | 
  |       synchronized (this)
  |       {
  |          switch (flags)
  |          {
  |             case TMSUSPEND :
  |                unsetCurrentTransactionId(xid);                             
  |                rm.suspendTx(xid);
  |                break;
  |             case TMFAIL :
  |                unsetCurrentTransactionId(xid);
  |                rm.endTx(xid, false);
  |                break;
  |             case TMSUCCESS :
  |                unsetCurrentTransactionId(xid);
  |                rm.endTx(xid, true);
  |                break;
  |          }
  |       }
  |    }
  | 
I'm not by any means an expert in the TX code...but this 
unsetCurrentTransactionId seems to be what's causing the problem...the xid is 
always equal to the currentTxId so a new TxState is added to the 
ResourceManager's map of transactions. Is this correct? Why? This results in 
two TxState objects being put into the transaction map for each 
transaction...and only one gets removed when commit is called...causing the 
heap to grow. 


In public void commit(Xid xid, boolean onePhase) throws XAException the first 
TxState is removed from the map of transactions.

Is there something I've done wrong to cause this behavior? TransactionAttribute 
settings? Some setting in JBoss Messaging? Of is this a genuine bug?


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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4006965
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to