[jboss-svn-commits] JBL Code SVN: r24853 - in labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats: jts/extensions and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 21 13:18:34 EST 2009


Author: mark.little at jboss.com
Date: 2009-01-21 13:18:34 -0500 (Wed, 21 Jan 2009)
New Revision: 24853

Modified:
   labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/ControlWrapper.java
   labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/extensions/AtomicTransaction.java
Log:
https://jira.jboss.org/jira/browse/JBTM-474 and https://jira.jboss.org/jira/browse/JBTM-473

Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/ControlWrapper.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/ControlWrapper.java	2009-01-21 17:36:07 UTC (rev 24852)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/ControlWrapper.java	2009-01-21 18:18:34 UTC (rev 24853)
@@ -57,6 +57,7 @@
 import org.omg.CosTransactions.NoTransaction;
 import org.omg.CosTransactions.HeuristicMixed;
 import org.omg.CosTransactions.HeuristicHazard;
+import org.omg.CORBA.OBJECT_NOT_EXIST;
 import org.omg.CORBA.SystemException;
 import org.omg.CORBA.UNKNOWN;
 import org.omg.CORBA.BAD_OPERATION;
@@ -453,47 +454,51 @@
             return _controlImpl.getImplHandle().getSynchronizations();    
     }
 
-    public final org.omg.CosTransactions.Status get_status ()
-			throws SystemException
-	{
-		try
-		{
-			if (_controlImpl != null)
-				return _controlImpl.getImplHandle().get_status();
-			else
-			{
-				Coordinator c = null;
+    public final org.omg.CosTransactions.Status get_status () throws SystemException
+    {
+        if (_controlImpl != null)
+            return _controlImpl.getImplHandle().get_status();
+        else
+        {
+            Coordinator c = null;
 
-				try
-				{
-					c = _control.get_coordinator();
-				}
-				catch (Unavailable e)
-				{
-					c = null;
-				}
+            try
+            {
+                if (_control != null)
+                    c = _control.get_coordinator();
+                else
+                    return org.omg.CosTransactions.Status.StatusUnknown;
+            }
+            catch (final OBJECT_NOT_EXIST ex)
+            {
+                // definitely not there so rolled back.
+                
+                return org.omg.CosTransactions.Status.StatusRolledBack;
+            }
+            catch (final Exception e)
+            {
+                return org.omg.CosTransactions.Status.StatusUnknown;
+            }
 
-				if (c != null)
-				{
-					try
-					{
-						return c.get_status();
-					}
-					catch (Exception e)
-					{
-						return org.omg.CosTransactions.Status.StatusUnknown;
-					}
-				}
-				else
-					return org.omg.CosTransactions.Status.StatusNoTransaction;
-			}
-		}
-		catch (NullPointerException ex)
-		{
-			return org.omg.CosTransactions.Status.StatusNoTransaction;
-		}
-	}
+            try
+            {
+                return c.get_status();
+            }
+            catch (final OBJECT_NOT_EXIST ex)
+            {
+                // definitely not there any more.
 
+                return org.omg.CosTransactions.Status.StatusRolledBack;
+            }
+            catch (final Exception e)
+            {
+                // who knows?!
+
+                return org.omg.CosTransactions.Status.StatusUnknown;
+            }
+        }
+    }
+
 	public final XID get_xid (boolean branch) throws SystemException
 	{
 		if (_controlImpl != null)

Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/extensions/AtomicTransaction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/extensions/AtomicTransaction.java	2009-01-21 17:36:07 UTC (rev 24852)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/extensions/AtomicTransaction.java	2009-01-21 18:18:34 UTC (rev 24853)
@@ -219,8 +219,6 @@
 
 		CurrentImple current = OTSImpleManager.current();
 
-		current.begin();
-
 		synchronized (_theStatus)
 		{
 			if (_theAction != null)
@@ -229,6 +227,8 @@
 						CompletionStatus.COMPLETED_NO);
 			}
 
+		        current.begin();
+
 			_theAction = current.getControlWrapper();
 		}
 
@@ -704,7 +704,17 @@
 			throw new WrongTransaction();
 		}
 
-		_theAction = OTSImpleManager.current().suspendWrapper();
+		synchronized (_theStatus)
+		{
+        		_theAction = OTSImpleManager.current().suspendWrapper();
+        		
+        		/*
+        		 * Make sure to set the status in case we get called again.
+        		 */
+        		
+        		if (_theAction == null)
+        		    _theStatus = org.omg.CosTransactions.Status.StatusNoTransaction;
+		}
 	}
 
 	/**
@@ -914,7 +924,12 @@
 			}
 		}
 
-		org.omg.CosTransactions.Status stat = Status.StatusNoTransaction;
+		/*
+		 * It shouldn't be possible for _theAction to be null and for the status
+		 * to be unset. If it is something went wrong!!
+		 */
+		
+		org.omg.CosTransactions.Status stat = org.omg.CosTransactions.Status.StatusUnknown;
 
 		if (_theAction != null)
 		{




More information about the jboss-svn-commits mailing list