[jboss-svn-commits] JBL Code SVN: r26806 - in labs/jbosstm/trunk: ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 2 10:39:15 EDT 2009


Author: mark.little at jboss.com
Date: 2009-06-02 10:39:15 -0400 (Tue, 02 Jun 2009)
New Revision: 26806

Added:
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/CleanupSynchronization.java
Modified:
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/TransactionImporterImple.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/XATerminatorImple.java
Log:
JBTM-560 update.

Added: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/CleanupSynchronization.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/CleanupSynchronization.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/CleanupSynchronization.java	2009-06-02 14:39:15 UTC (rev 26806)
@@ -0,0 +1,63 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 2005,
+ *
+ * Arjuna Technologies Ltd,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: WorkSynchronization.java 2342 2006-03-30 13:06:17Z  $
+ */
+
+package com.arjuna.ats.internal.jta.transaction.arjunacore.jca;
+
+import javax.transaction.xa.Xid;
+
+public class CleanupSynchronization implements
+        javax.transaction.Synchronization
+{
+
+    public CleanupSynchronization (Xid current)
+    {
+        _xid = current;
+    }
+
+    public void beforeCompletion ()
+    {
+        // null-op.
+    }
+
+    public void afterCompletion (int status)
+    {
+        try
+        {
+            SubordinationManager.getTransactionImporter().removeImportedTransaction(_xid);
+        }
+        catch (final Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+
+    private Xid _xid;
+}

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java	2009-06-02 13:07:11 UTC (rev 26805)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java	2009-06-02 14:39:15 UTC (rev 26806)
@@ -34,6 +34,8 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.transaction.xa.*;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 
 import com.arjuna.ats.arjuna.common.Uid;
@@ -96,6 +98,23 @@
 			_transactions.put(new XidImple(xid), imported);
 		}
 
+		/*
+		 * Register the cleanup synchronization immediately.
+		 */
+		
+		try
+		{
+		    imported.registerSynchronization(new CleanupSynchronization(xid));
+		}
+		catch (final SystemException ex)
+		{
+		    throw new XAException(XAException.XAER_RMERR);
+		}
+		catch (final RollbackException ex)
+		{
+		    throw new XAException(XAException.XA_RBROLLBACK);
+		}
+		
 		return imported;
 	}
 

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java	2009-06-02 13:07:11 UTC (rev 26805)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java	2009-06-02 14:39:15 UTC (rev 26806)
@@ -84,31 +84,18 @@
                     tx.doOnePhaseCommit();
                 else
                     tx.doCommit();
-
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
             }
             else
                 throw new XAException(XAException.XA_RETRY);
         }
         catch (RollbackException e)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
             XAException xaException = new XAException(XAException.XA_RBROLLBACK);
             xaException.initCause(e);
             throw xaException;
         }
         catch (XAException ex)
         {
-            // resource hasn't had a chance to recover yet
-
-            if (ex.errorCode != XAException.XA_RETRY)
-            {
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-            }
-
             throw ex;
         }
         catch (HeuristicRollbackException ex)
@@ -131,18 +118,12 @@
         }
         catch (final IllegalStateException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_NOTA);
             xaException.initCause(ex);
             throw xaException;
         }
         catch (SystemException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_RMERR);
             xaException.initCause(ex);
             throw xaException;
@@ -163,8 +144,7 @@
     {
         try
         {
-            SubordinateTransaction tx = SubordinationManager
-                    .getTransactionImporter().getImportedTransaction(xid);
+            SubordinateTransaction tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
 
             if (tx == null)
                 throw new XAException(XAException.XAER_INVAL);
@@ -177,11 +157,6 @@
             xaException.initCause(ex);
             throw xaException;
         }
-        finally
-        {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-        }
     }
 
     /**
@@ -210,8 +185,6 @@
             switch (tx.doPrepare())
             {
             case TwoPhaseOutcome.PREPARE_READONLY:
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
                 return XAResource.XA_RDONLY;
             case TwoPhaseOutcome.PREPARE_NOTOK:
                 // the JCA API spec limits what we can do in terms of reporting
@@ -246,8 +219,6 @@
                     xaExceptionCode = XAException.XAER_RMERR;
                 }
 
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
                 XAException xaException = new XAException(xaExceptionCode);
                 if (initCause != null)
                 {
@@ -406,23 +377,12 @@
             if (tx.activated())
             {
                 tx.doRollback();
-
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
             }
             else
                 throw new XAException(XAException.XA_RETRY);
         }
         catch (XAException ex)
         {
-            // resource hasn't had a chance to recover yet
-
-            if (ex.errorCode != XAException.XA_RETRY)
-            {
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-            }
-
             throw ex;
         }
         catch (final HeuristicRollbackException ex)
@@ -445,18 +405,12 @@
         }
         catch (final IllegalStateException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_NOTA);
             xaException.initCause(ex);
             throw xaException;
         }
         catch (SystemException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             throw new XAException(XAException.XAER_RMERR);
         }
     }

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/TransactionImporterImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/TransactionImporterImple.java	2009-06-02 13:07:11 UTC (rev 26805)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/TransactionImporterImple.java	2009-06-02 14:39:15 UTC (rev 26806)
@@ -34,10 +34,12 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.transaction.xa.*;
-import javax.transaction.Transaction;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
 
 import com.arjuna.ats.arjuna.common.Uid;
 import com.arjuna.ats.internal.jta.transaction.jts.subordinate.jca.TransactionImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.CleanupSynchronization;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporter;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
 import com.arjuna.ats.jta.xa.XidImple;
@@ -92,6 +94,23 @@
 			_transactions.put(new XidImple(xid), imported);
 		}
 		
+		/*
+                 * Register the cleanup synchronization immediately.
+                 */
+                
+                try
+                {
+                    imported.registerSynchronization(new CleanupSynchronization(xid));
+                }
+                catch (final SystemException ex)
+                {
+                    throw new XAException(XAException.XAER_RMERR);
+                }
+                catch (final RollbackException ex)
+                {
+                    throw new XAException(XAException.XA_RBROLLBACK);
+                }
+                
 		return imported;
 	}
 

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/XATerminatorImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/XATerminatorImple.java	2009-06-02 13:07:11 UTC (rev 26805)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/jca/XATerminatorImple.java	2009-06-02 14:39:15 UTC (rev 26806)
@@ -47,6 +47,7 @@
 import com.arjuna.ats.internal.jta.transaction.jts.subordinate.jca.coordinator.ServerTransaction;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TxWorkManager;
 import com.arjuna.ats.jta.exceptions.UnexpectedConditionException;
 
 /**
@@ -56,8 +57,7 @@
  */
 
 public class XATerminatorImple implements javax.resource.spi.XATerminator, XATerminatorExtensions
-{
-
+{   
     public void commit (Xid xid, boolean onePhase) throws XAException
     {
         try
@@ -74,31 +74,18 @@
                     tx.doOnePhaseCommit();
                 else
                     tx.doCommit();
-
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
             }
             else
                 throw new XAException(XAException.XA_RETRY);
         }
         catch (RollbackException e)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
             XAException xaException = new XAException(XAException.XA_RBROLLBACK);
             xaException.initCause(e);
             throw xaException;
         }
         catch (XAException ex)
         {
-            // resource hasn't had a chance to recover yet
-
-            if (ex.errorCode != XAException.XA_RETRY)
-            {
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-            }
-
             throw ex;
         }
         catch (final HeuristicCommitException ex)
@@ -121,18 +108,12 @@
         }
         catch (final IllegalStateException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_NOTA);
             xaException.initCause(ex);
             throw xaException;
         }
         catch (SystemException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_RMERR);
             xaException.initCause(ex);
             throw xaException;
@@ -157,11 +138,6 @@
             xaException.initCause(ex);
             throw xaException;
         }
-        finally
-        {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-        }
     }
 
     public int prepare (Xid xid) throws XAException
@@ -177,9 +153,6 @@
             switch (tx.doPrepare())
             {
             case TwoPhaseOutcome.PREPARE_READONLY:
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-
                 return XAResource.XA_RDONLY;
             case TwoPhaseOutcome.PREPARE_NOTOK:
                 try
@@ -190,10 +163,7 @@
                 {
                     // if we failed to prepare then rollback should not fail!
                 }
-
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-
+                
                 throw new XAException(XAException.XA_RBROLLBACK);
             case TwoPhaseOutcome.PREPARE_OK:
                 return XAResource.XA_OK;
@@ -329,23 +299,12 @@
             if (tx.baseXid() != null)
             {
                 tx.doRollback();
-
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
             }
             else
                 throw new XAException(XAException.XA_RETRY);
         }
         catch (XAException ex)
         {
-            // resource hasn't had a chance to recover yet
-
-            if (ex.errorCode != XAException.XA_RETRY)
-            {
-                SubordinationManager.getTransactionImporter()
-                        .removeImportedTransaction(xid);
-            }
-
             throw ex;
         }
         catch (HeuristicCommitException ex)
@@ -368,18 +327,12 @@
         }
         catch (final IllegalStateException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_NOTA);
             xaException.initCause(ex);
             throw xaException;
         }
         catch (SystemException ex)
         {
-            SubordinationManager.getTransactionImporter()
-                    .removeImportedTransaction(xid);
-
             XAException xaException = new XAException(XAException.XAER_RMERR);
             xaException.initCause(ex);
             throw xaException;




More information about the jboss-svn-commits mailing list