[jboss-cvs] JBossAS SVN: r109208 - in projects/ejb3/trunk/core/src: test/java/org/jboss/ejb3/core/test/common/tx and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Nov 9 06:48:00 EST 2010


Author: wolfc
Date: 2010-11-09 06:47:59 -0500 (Tue, 09 Nov 2010)
New Revision: 109208

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/SessionSynchronizationInterceptor.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransaction.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransactionManager.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/txsync/unit/TxSyncTestCase.java
Log:
EJBTHREE-2195: discard bean on exception from beforeCompletion

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/SessionSynchronizationInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/SessionSynchronizationInterceptor.java	2010-11-09 10:07:01 UTC (rev 109207)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/SessionSynchronizationInterceptor.java	2010-11-09 11:47:59 UTC (rev 109208)
@@ -104,12 +104,19 @@
                CurrentInvocationContext.pop();
             }            
          }
+         catch(Error e)
+         {
+            handleThrowable("beforeCompletion on " + ctx.getContainer(), e);
+            throw e;
+         }
          catch(RuntimeException e)
          {
+            handleThrowable("beforeCompletion on " + ctx.getContainer(), e);
             throw e;
          }
          catch(Exception e)
          {
+            handleThrowable("beforeCompletion on " + ctx.getContainer(), e);
             throw new RuntimeException(e);
          }
          finally
@@ -170,6 +177,30 @@
             container.getCache().release(ctx);
          }
       }
+
+      /**
+       * Handle all exceptions or errors from session synchronization callbacks.
+       *
+       * EJB 3.1 FR 14.3.7
+       * @param callback an identification of the callback
+       * @param t the exception or error
+       */
+      private void handleThrowable(String callback, Throwable t)
+      {
+         // Log the exception or error to bring the problem to the attention of the System Administrator.
+         // TODO: use a functional log, instead of tech log
+         log.error(callback + " failed", t);
+
+         // If the instance is in a transaction, mark the transaction for rollback.
+         //  JTA 1.1 5 Interface Synchronization
+         //  Upon encountering encountering an unchecked exception thrown by a registered synchronization
+         //  object, the transaction manager must mark the transaction for rollback.
+
+         // Discard the instance.
+         ctx.discard();
+
+         // The exception did not happen in a client invocation, so we're done.
+      }
       
       private void popEnc()
       {

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java	2010-11-09 10:07:01 UTC (rev 109207)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java	2010-11-09 11:47:59 UTC (rev 109208)
@@ -221,6 +221,12 @@
       
    }
 
+   protected void discard()
+   {
+      getContainer().getCache().remove(getId());
+      setDiscarded(true);
+   }
+
    public List<StatefulBeanContext> getContains()
    {
       if (bean == null)

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransaction.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransaction.java	2010-11-09 10:07:01 UTC (rev 109207)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransaction.java	2010-11-09 11:47:59 UTC (rev 109208)
@@ -21,7 +21,7 @@
  */
 package org.jboss.ejb3.core.test.common.tx;
 
-import java.util.LinkedList;
+import org.jboss.logging.Logger;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -31,9 +31,8 @@
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 import javax.transaction.xa.XAResource;
+import java.util.LinkedList;
 
-import org.jboss.logging.Logger;
-
 /**
  * We keep track of the synchronizations ourself.
  * 
@@ -87,10 +86,11 @@
          {
             sync.afterCompletion(status);
          }
-         catch(Exception e)
+         catch(RuntimeException e)
          {
-            log.error("afterCompletion", e);
+            //log.error("afterCompletion", e);
             tm.report(e);
+            throw e;
          }
       }
    }
@@ -103,10 +103,11 @@
          {
             sync.beforeCompletion();
          }
-         catch(Exception e)
+         catch(RuntimeException e)
          {
-            log.error("beforeCompletion", e);
+            //log.error("beforeCompletion", e);
             tm.report(e);
+            throw e;
          }
       }
    }

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransactionManager.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransactionManager.java	2010-11-09 10:07:01 UTC (rev 109207)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/tx/ControlledTransactionManager.java	2010-11-09 11:47:59 UTC (rev 109208)
@@ -21,10 +21,6 @@
  */
 package org.jboss.ejb3.core.test.common.tx;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
 import javax.transaction.InvalidTransactionException;
@@ -33,6 +29,9 @@
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * A transaction manager of which we have a better control.
@@ -55,7 +54,12 @@
    
    public void begin() throws NotSupportedException, SystemException
    {
+      Transaction tx = currentTx.get();
+      if(tx != null)
+         throw new NotSupportedException("Already running tx " + tx);
       delegate.begin();
+      Transaction delegateTx = delegate.getTransaction();
+      currentTx.set(new ControlledTransaction(this, delegateTx));
    }
 
    public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException,
@@ -78,17 +82,7 @@
    
    public ControlledTransaction getControlledTransaction() throws SystemException
    {
-      ControlledTransaction tx = currentTx.get();
-      if(tx == null)
-      {
-         Transaction delegateTx = delegate.getTransaction();
-         if(delegateTx != null)
-         {
-            tx = new ControlledTransaction(this, delegateTx);
-            currentTx.set(tx);
-         }
-      }
-      return tx;
+      return currentTx.get();
    }
    
    public List<Exception> getReports()

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/txsync/unit/TxSyncTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/txsync/unit/TxSyncTestCase.java	2010-11-09 10:07:01 UTC (rev 109207)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/txsync/unit/TxSyncTestCase.java	2010-11-09 11:47:59 UTC (rev 109208)
@@ -21,16 +21,6 @@
  */
 package org.jboss.ejb3.core.test.txsync.unit;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.util.Collection;
-
-import javax.ejb.EJBTransactionRolledbackException;
-import javax.ejb.NoSuchEJBException;
-import javax.naming.NamingException;
-import javax.transaction.RollbackException;
-
 import org.jboss.ejb3.core.test.common.AbstractEJB3TestCase;
 import org.jboss.ejb3.core.test.common.tx.ControlledTransactionManager;
 import org.jboss.ejb3.core.test.txsync.TxSync;
@@ -39,6 +29,15 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import javax.ejb.EJBTransactionRolledbackException;
+import javax.ejb.NoSuchEJBException;
+import javax.naming.NamingException;
+import javax.transaction.RollbackException;
+import java.util.Collection;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 /**
  * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
  * @version $Revision: $
@@ -207,7 +206,15 @@
       }
       finally
       {
-         tm.commit();
+         try
+         {
+            tm.commit();
+            fail("Expecting RollbackException");
+         }
+         catch(RollbackException e)
+         {
+            // good
+         }
       }
       assertEquals(1, TxSyncBean.afterBeginCalls);
       assertEquals(1, TxSyncBean.beforeCompletionCalls);



More information about the jboss-cvs-commits mailing list