You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2004/10/07 22:50:39 UTC

svn commit: rev 54014 - geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/work

Author: djencks
Date: Thu Oct  7 13:50:39 2004
New Revision: 54014

Modified:
   geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/work/WorkerContext.java
Log:
Throw correct exceptions when xid import fails or concurrent work is attempted

Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/work/WorkerContext.java
==============================================================================
--- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/work/WorkerContext.java	(original)
+++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/work/WorkerContext.java	Thu Oct  7 13:50:39 2004
@@ -26,11 +26,15 @@
 import javax.resource.spi.work.WorkListener;
 import javax.resource.spi.work.WorkManager;
 import javax.resource.spi.work.WorkRejectedException;
+import javax.transaction.xa.XAException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.SystemException;
 
 import EDU.oswego.cs.dl.util.concurrent.Latch;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.geronimo.transaction.ImportedTransactionActiveException;
 
 /**
  * Work wrapper providing an execution context to a Work instance.
@@ -291,6 +295,16 @@
             } else {
                 try {
                     transactionContextManager.begin(executionContext.getXid(), executionContext.getTransactionTimeout());
+                } catch (XAException e) {
+                    throw new WorkCompletedException("Transaction import failed for xid " + executionContext.getXid(), WorkCompletedException.TX_RECREATE_FAILED).initCause(e);
+               } catch (InvalidTransactionException e) {
+                    throw new WorkCompletedException("Transaction import failed for xid " + executionContext.getXid(), WorkCompletedException.TX_RECREATE_FAILED).initCause(e);
+               } catch (SystemException e) {
+                    throw new WorkCompletedException("Transaction import failed for xid " + executionContext.getXid(), WorkCompletedException.TX_RECREATE_FAILED).initCause(e);
+                } catch (ImportedTransactionActiveException e) {
+                    throw new WorkCompletedException("Transaction already active for xid " + executionContext.getXid(), WorkCompletedException.TX_CONCURRENT_WORK_DISALLOWED);
+                }
+                try {
                     adaptee.run();
                 } finally {
                     transactionContextManager.end(executionContext.getXid());
@@ -300,8 +314,8 @@
             workListener.workCompleted(
                     new WorkEvent(this, WorkEvent.WORK_COMPLETED, adaptee, null));
         } catch (Throwable e) {
-            workException = new WorkCompletedException(e);
-            workListener.workRejected(
+            workException =  (WorkException) (e instanceof WorkCompletedException? e: new WorkCompletedException("Unknown error", WorkCompletedException.UNDEFINED).initCause(e));
+            workListener.workCompleted(
                     new WorkEvent(this, WorkEvent.WORK_REJECTED, adaptee,
                             workException));
         } finally {