[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