[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