[jboss-svn-commits] JBL Code SVN: r6431 - in labs/jbosstm/trunk: ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/arjunacore ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/resources/jts/orbspecific ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 26 07:24:41 EDT 2006


Author: kevin.conner at jboss.com
Date: 2006-09-26 07:24:34 -0400 (Tue, 26 Sep 2006)
New Revision: 6431

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/arjunacore/XAResourceRecord.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/resources/jts/orbspecific/XAResourceRecord.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
Log:
Fixed one phase commit processing of heuristics for JBTM-133

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java	2006-09-25 22:29:10 UTC (rev 6430)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java	2006-09-26 11:24:34 UTC (rev 6431)
@@ -2675,8 +2675,7 @@
 					}
 				}
 
-				if ((heuristicDecision == TwoPhaseOutcome.HEURISTIC_ROLLBACK) ||
-						(heuristicDecision == TwoPhaseOutcome.HEURISTIC_COMMIT))
+				if (heuristicDecision == TwoPhaseOutcome.HEURISTIC_ROLLBACK)
 				{
 					/*
 					 * Signal that the action outcome is the same as the
@@ -2690,6 +2689,11 @@
 
 					actionStatus = ActionStatus.ABORTED;
 				}
+				else if (heuristicDecision == TwoPhaseOutcome.HEURISTIC_COMMIT)
+				{
+					heuristicDecision = TwoPhaseOutcome.PREPARE_OK;
+					actionStatus = ActionStatus.COMMITTED;
+				}
 				else
 					actionStatus = ActionStatus.COMMITTED; // can't really say
 														   // (could have

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/arjunacore/XAResourceRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/arjunacore/XAResourceRecord.java	2006-09-25 22:29:10 UTC (rev 6430)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/arjunacore/XAResourceRecord.java	2006-09-26 11:24:34 UTC (rev 6431)
@@ -550,9 +550,6 @@
 	 * @message com.arjuna.ats.internal.jta.resources.arjunacore.opcnulltx
 	 *          [com.arjuna.ats.internal.jta.resources.arjunacore.opcnulltx] {0} -
 	 *          null transaction!
-	 * @message com.arjuna.ats.internal.jta.resources.arjunacore.opcxaerror
-	 *          [com.arjuna.ats.internal.jta.resources.arjunacore.opcxaerror]
-	 *          {0} - xa error {1}
 	 * @message com.arjuna.ats.internal.jta.resources.arjunacore.opcerror
 	 *          [com.arjuna.ats.internal.jta.resources.arjunacore.opcerror] {0}
 	 *          caught: {1}
@@ -600,49 +597,20 @@
 						_theXAResource.end(_tranID, XAResource.TMSUCCESS);
 					}
 
-					try
-					{
-						_theXAResource.commit(_tranID, true);
-					}
-					catch (XAException xaex)
-					{
-						if (jtaLogger.loggerI18N.isWarnEnabled())
-						{
-							jtaLogger.loggerI18N
-									.warn(
-											"com.arjuna.ats.internal.jta.resources.arjunacore.opcxaerror",
-											new Object[]
-											{
-													"XAResourceRecord.commit_one_phase",
-													XAHelper
-															.printXAErrorCode(xaex) });
-						}
-						
-						if ((xaex.errorCode > XAException.XA_RBBASE)
-								&& (xaex.errorCode <= XAException.XA_RBEND))
-						{
-							return TwoPhaseOutcome.HEURISTIC_ROLLBACK;
-						}
-
-						_theXAResource.rollback(_tranID);
-
-						throw xaex;
-					}
+					_theXAResource.commit(_tranID, true);
 				}
 				catch (XAException e1)
 				{
-					e1.printStackTrace();
-
 					/*
 					 * XA_HEURHAZ, XA_HEURCOM, XA_HEURRB, XA_HEURMIX,
 					 * XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or
 					 * XAER_PROTO. XA_RB*
 					 */
 
-					if ((e1.errorCode > XAException.XA_RBBASE)
+					if ((e1.errorCode >= XAException.XA_RBBASE)
 							&& (e1.errorCode < XAException.XA_RBEND))
 					{
-						return TwoPhaseOutcome.HEURISTIC_ROLLBACK;
+						return TwoPhaseOutcome.FINISH_ERROR;
 					}
 
 					switch (e1.errorCode)
@@ -652,10 +620,10 @@
 					case XAException.XA_HEURMIX:
 						return TwoPhaseOutcome.HEURISTIC_HAZARD;
 					case XAException.XA_HEURCOM:
+						forget() ;
 						break;
 					case XAException.XA_HEURRB:
-						// return TwoPhaseOutcome.HEURISTIC_ROLLBACK;
-					case XAException.XA_RBROLLBACK:
+						forget() ;
 						return TwoPhaseOutcome.FINISH_ERROR;
 					case XAException.XAER_NOTA:
 					case XAException.XAER_PROTO:
@@ -706,6 +674,15 @@
 					"XAResourceRecord.forget for " + _tranID);
 		}
 
+		forget() ;
+
+		removeConnection();
+
+		return true;
+	}
+	
+	private void forget()
+	{
 		if ((_theXAResource != null) && (_tranID != null))
 		{
 			try
@@ -716,10 +693,6 @@
 			{
 			}
 		}
-
-		removeConnection();
-
-		return true;
 	}
 
 	/*

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/resources/jts/orbspecific/XAResourceRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/resources/jts/orbspecific/XAResourceRecord.java	2006-09-25 22:29:10 UTC (rev 6430)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/resources/jts/orbspecific/XAResourceRecord.java	2006-09-26 11:24:34 UTC (rev 6431)
@@ -685,51 +685,22 @@
 						_theXAResource.end(_tranID, XAResource.TMSUCCESS);
 					}
 
-					try
-					{
-						_theXAResource.commit(_tranID, true);
-					}
-					catch (XAException xaex)
-					{
-						if (jtaLogger.loggerI18N.isWarnEnabled())
-						{
-							jtaLogger.loggerI18N
-									.warn(
-											"com.arjuna.ats.internal.jta.resources.jts.orbspecific.xaerror",
-											new Object[]
-											{
-													"XAResourceRecord.commit_one_phase",
-													XAHelper
-															.printXAErrorCode(xaex) });
-						}
-						
-						if ((xaex.errorCode > XAException.XA_RBBASE)
-								&& (xaex.errorCode <= XAException.XA_RBEND))
-						{
-							throw new TRANSACTION_ROLLEDBACK();
-						}
-						
-						_theXAResource.rollback(_tranID);
-
-						throw xaex;
-					}
+					_theXAResource.commit(_tranID, true);
 				}
 				catch (XAException e1)
 				{
-					e1.printStackTrace();
-
 					/*
 					 * XA_HEURHAZ, XA_HEURCOM, XA_HEURRB, XA_HEURMIX,
 					 * XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or
 					 * XAER_PROTO. XA_RB*
 					 */
 
-					if ((e1.errorCode > XAException.XA_RBBASE)
+					if ((e1.errorCode >= XAException.XA_RBBASE)
 							&& (e1.errorCode <= XAException.XA_RBEND))
 					{
 						throw new TRANSACTION_ROLLEDBACK();
 					}
-
+					
 					switch (e1.errorCode)
 					{
 					case XAException.XAER_RMERR:
@@ -739,10 +710,10 @@
 
 						throw new org.omg.CosTransactions.HeuristicHazard();
 					case XAException.XA_HEURCOM:
+						handleForget() ;
 						break;
 					case XAException.XA_HEURRB:
-						// throw new org.omg.CosTransactions.HeuristicHazard();
-					case XAException.XA_RBROLLBACK:
+						handleForget() ;
 						throw new TRANSACTION_ROLLEDBACK();
 					case XAException.XAER_NOTA:
 					case XAException.XAER_PROTO:
@@ -797,6 +768,15 @@
 					"XAResourceRecord.forget for " + _tranID);
 		}
 
+		handleForget() ;
+
+		destroyState();
+
+		removeConnection();
+	}
+	
+	private void handleForget()
+	{
 		if ((_theXAResource != null) && (_tranID != null))
 		{
 			try
@@ -807,10 +787,6 @@
 			{
 			}
 		}
-
-		destroyState();
-
-		removeConnection();
 	}
 
 	/**

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2006-09-25 22:29:10 UTC (rev 6430)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2006-09-26 11:24:34 UTC (rev 6431)
@@ -296,11 +296,11 @@
 	}
 
 	/**
-	 * @message com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed1
-	 *          [com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed1]
+	 * @message com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed1
+	 *          [com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed1]
 	 *          Ending suspended RMs failed when rolling back the transaction!
-	 * @message com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed2
-	 *          [com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed2]
+	 * @message com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed2
+	 *          [com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed2]
 	 *          Ending suspended RMs failed when rolling back the transaction,
 	 *          but transaction rolled back.
 	 */
@@ -327,7 +327,7 @@
 			{
 				if (jtaLogger.loggerI18N.isWarnEnabled())
 				{
-					jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed1");
+					jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed1");
 				}
 			}
 
@@ -365,7 +365,7 @@
 
 			if (endSuspendedFailed)
 				throw new IllegalStateException(
-						jtaLogger.logMesg.getString("com.arjuna.ats.internal.jta.transaction.arjunacore.endsuspendfailed2"));
+						jtaLogger.logMesg.getString("com.arjuna.ats.internal.jta.transaction.jts.endsuspendfailed2"));
 		}
 		else
 			throw new IllegalStateException(
@@ -711,7 +711,7 @@
                                 {
                                     if (jtaLogger.loggerI18N.isWarnEnabled())
                                     {
-                                        jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.arjunacore.timeouterror", new Object[]
+                                        jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.jts.timeouterror", new Object[]
                                         { "TransactionImple.enlistResource", XAHelper.printXAErrorCode(te), xid });
                                     }
                                 }
@@ -1386,8 +1386,8 @@
 	 * If there are any suspended RMs then we should call end on them before the
 	 * transaction is terminated.
 	 * 
-	 * @message com.arjuna.ats.internal.jta.transaction.arjunacore.xaenderror
-	 *          [com.arjuna.ats.internal.jta.transaction.arjunacore.xaenderror]
+	 * @message com.arjuna.ats.internal.jta.transaction.jts.xaenderror
+	 *          [com.arjuna.ats.internal.jta.transaction.jts.xaenderror]
 	 *          Could not call end on a suspended resource!
 	 */
 
@@ -1433,7 +1433,7 @@
 				{
 					if (jtaLogger.loggerI18N.isWarnEnabled())
 					{
-						jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.arjunacore.xaenderror");
+						jtaLogger.loggerI18N.warn("com.arjuna.ats.internal.jta.transaction.jts.xaenderror");
 					}
 
 					result = false;




More information about the jboss-svn-commits mailing list