You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2009/08/25 21:40:20 UTC

svn commit: r807780 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/core/transaction/ openejb-spring/src/main/java/org/apache/openejb/spring/

Author: dblevins
Date: Tue Aug 25 19:40:19 2009
New Revision: 807780

URL: http://svn.apache.org/viewvc?rev=807780&view=rev
Log:
Corrected exception handling for TxPolicy.  Incorrectly threw a TransactionRollbackException based on the value of isNewTransaction() regardless if there was a transaction in progress or not.
The actual required logic is to only throw a TransactionRolledbackException when executing in a caller's (aka client's) transaction.  Fixed the policies and added a new isClientTransaction method so the logic is more straight forward.

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/EjbTransactionUtil.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java
    openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/SpringTransactionPolicy.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/EjbTransactionUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/EjbTransactionUtil.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/EjbTransactionUtil.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/EjbTransactionUtil.java Tue Aug 25 19:40:19 2009
@@ -142,15 +142,15 @@
         txPolicy.setRollbackOnly();
 
         // Throw InvalidateReferenceException
-        if (txPolicy.isNewTransaction()) {
-            // no transaction or in a new transaction for this method call
-            RemoteException re = new RemoteException("The bean encountered a non-application exception", sysException);
-            throw new InvalidateReferenceException(re);
-        } else {
+        if (txPolicy.isClientTransaction()) {
             // using caller's transaction
             String message = "The transaction has been marked rollback only because the bean encountered a non-application exception :" + sysException.getClass().getName() + " : " + sysException.getMessage();
             TransactionRolledbackException txException = new TransactionRolledbackException(message, sysException);
             throw new InvalidateReferenceException(txException);
+        } else {
+            // no transaction or in a new transaction for this method call
+            RemoteException re = new RemoteException("The bean encountered a non-application exception", sysException);
+            throw new InvalidateReferenceException(re);
         }
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java Tue Aug 25 19:40:19 2009
@@ -39,7 +39,7 @@
     TransactionType getTransactionType();
 
     /**
-     * Is this a new transaction and not an inhreited transaction?  Some
+     * Is this a new transaction and not an inhreited transaction or no transaction?  Some
      * TransactionTypes, such as Required or Supported, use the caller's
      * transaction instead of starting a new transaction.  If there is no active
      * transaction (e.g., TransactionType is NotSupported), this method will
@@ -48,6 +48,18 @@
      */
     boolean isNewTransaction();
 
+
+    /**
+     * Is this policy running in an inhreited transaction?  Some
+     * TransactionTypes, such as Required or Supported, use the caller's
+     * transaction instead of starting a new transaction.  If there is no active
+     * transaction (e.g., TransactionType is NotSupported), this method will
+     * return false.
+     *
+     * @return true if this is an inherited transaction
+     */
+    boolean isClientTransaction();
+
     /**
      * Is there a actual transaction active?
      *

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxBeanManaged.java Tue Aug 25 19:40:19 2009
@@ -38,6 +38,10 @@
         return false;
     }
 
+    public boolean isClientTransaction() {
+        return false;
+    }
+
     protected Transaction getCurrentTrasaction() {
         try {
             return getTransaction();

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxMandatory.java Tue Aug 25 19:40:19 2009
@@ -54,6 +54,10 @@
         return false;
     }
 
+    public boolean isClientTransaction() {
+        return true;
+    }
+
     protected Transaction getCurrentTrasaction() {
         return clientTx;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java Tue Aug 25 19:40:19 2009
@@ -51,6 +51,10 @@
         return false;
     }
 
+    public boolean isClientTransaction() {
+        return false;
+    }
+    
     protected Transaction getCurrentTrasaction() {
         return null;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java Tue Aug 25 19:40:19 2009
@@ -53,6 +53,10 @@
         return false;
     }
 
+    public boolean isClientTransaction() {
+        return false;
+    }
+    
     protected Transaction getCurrentTrasaction() {
         return null;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java Tue Aug 25 19:40:19 2009
@@ -61,6 +61,10 @@
         return clientTx == null;
     }
 
+    public boolean isClientTransaction() {
+        return !isNewTransaction();
+    }
+
     protected Transaction getCurrentTrasaction() {
         return currentTx;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java Tue Aug 25 19:40:19 2009
@@ -59,6 +59,10 @@
         return true;
     }
 
+    public boolean isClientTransaction() {
+        return false;
+    }
+
     protected Transaction getCurrentTrasaction() {
         return currentTx;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java Tue Aug 25 19:40:19 2009
@@ -48,7 +48,11 @@
     }
 
     public boolean isNewTransaction() {
-        return clientTx == null;
+        return false;
+    }
+
+    public boolean isClientTransaction() {
+        return clientTx != null;
     }
 
     protected Transaction getCurrentTrasaction() {

Modified: openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/SpringTransactionPolicy.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/SpringTransactionPolicy.java?rev=807780&r1=807779&r2=807780&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/SpringTransactionPolicy.java (original)
+++ openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/SpringTransactionPolicy.java Tue Aug 25 19:40:19 2009
@@ -86,6 +86,11 @@
         return getTransactionStatus().isNewTransaction();
     }
 
+    public boolean isClientTransaction() {
+        DefaultTransactionStatus status = getTransactionStatus();
+        return status.hasTransaction() && !status.isNewSynchronization();
+    }
+
     public boolean isTransactionActive() {
         return !getTransactionStatus().isCompleted() && getTransactionStatus().hasTransaction();
     }