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();
}