[jboss-svn-commits] JBL Code SVN: r21571 - in labs/jbosstm/trunk: ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 15 11:52:56 EDT 2008


Author: jhalliday
Date: 2008-08-15 11:52:55 -0400 (Fri, 15 Aug 2008)
New Revision: 21571

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
   labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java
   labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java
   labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java
Log:
Added code to return transaction time to live for JBossAS integration.  JBTM-371


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -67,7 +67,7 @@
  *          TransactionReaper::getTimeout for {0} returning {1}
  * @message com.arjuna.ats.arjuna.coordinator.TransactionReaper_17
  *          [com.arjuna.ats.arjuna.coordinator.TransactionReaper_17] -
- *          TransactionReaper::getRemainingTimeout for {0} returning {1}
+ *          TransactionReaper::getRemainingTimeoutMillis for {0} returning {1}
  * @message com.arjuna.ats.arjuna.coordinator.TransactionReaper_4
  *          [com.arjuna.ats.arjuna.coordinator.TransactionReaper_4] -
  *          TransactionReaper::check interrupting cancel in progress for {0}
@@ -857,62 +857,55 @@
                 }
 	}
 
-	/**
+    /**
 	 * Given the transaction instance, this will return the time left before the
 	 * transaction is automatically rolled back if it has not been terminated.
 	 *
 	 * @param control
-	 * @return the remaining time in seconds.
+	 * @return the remaining time in milliseconds.
 	 */
 
-	public final int getRemainingTimeout (Object control)
+	public final long getRemainingTimeoutMills(Object control)
 	{
-	    if ((_transactions.size() == 0) || (control == null))
-	    {
-		if (tsLogger.arjLogger.debugAllowed())
-		{
-		    tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS,
-			    VisibilityLevel.VIS_PUBLIC,
-			    FacilityCode.FAC_ATOMIC_ACTION,
-			    "TransactionReaper::getRemainingTimeout for " + control
-			    + " returning 0");
-		}
+        if ((_transactions.size() == 0) || (control == null))
+        {
+            if (tsLogger.arjLogger.debugAllowed())
+            {
+                tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS,
+                        VisibilityLevel.VIS_PUBLIC,
+                        FacilityCode.FAC_ATOMIC_ACTION,
+                        "TransactionReaper::getRemainingTimeout for " + control
+                                + " returning 0");
+            }
 
-		return 0;
-	    }
+            return 0;
+        }
 
-	    final ReaperElement reaperElement = (ReaperElement)_timeouts.get(control);
-	    final Integer timeout;
+        final ReaperElement reaperElement = (ReaperElement)_timeouts.get(control);
+        long timeout = 0;
 
-	    if (reaperElement == null)
-	    {
-		timeout = new Integer(0);
-	    }
-	    else
-	    {
-		// units are in milliseconds at this stage.
+        if (reaperElement == null)
+        {
+            timeout = 0;
+        }
+        else
+        {
+            // units are in milliseconds at this stage.
+            timeout = reaperElement._absoluteTimeout - System.currentTimeMillis();
+        }
 
-		long remainingTime = reaperElement._absoluteTimeout - System.currentTimeMillis();
-		double timeInSeconds = Math.ceil(remainingTime/1000.0);  // round up.
-
-		if (timeInSeconds <= 0)
-		    timeInSeconds = 1;
-
-		timeout = new Integer((int) remainingTime/1000);  // convert back to seconds.
-	    }
-
         if (tsLogger.arjLoggerI18N.isDebugEnabled()) {
-        tsLogger.arjLoggerI18N
-	    .debug(
-		    DebugLevel.FUNCTIONS,
-		    VisibilityLevel.VIS_PUBLIC,
-		    FacilityCode.FAC_ATOMIC_ACTION,
-		    "com.arjuna.ats.arjuna.coordinator.TransactionReaper_17",
-		    new Object[]
-		               { control, timeout });
+            tsLogger.arjLoggerI18N
+                    .debug(
+                            DebugLevel.FUNCTIONS,
+                            VisibilityLevel.VIS_PUBLIC,
+                            FacilityCode.FAC_ATOMIC_ACTION,
+                            "com.arjuna.ats.arjuna.coordinator.TransactionReaper_17",
+                            new Object[]
+                                    { control, timeout });
         }
 
-        return timeout.intValue();
+        return timeout;
 	}
 
 	/**

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -1,20 +1,20 @@
 /*
  * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors 
- * as indicated by the @author tags. 
+ * Copyright 2007, 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. 
+ * 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 
+ * 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, 
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA  02110-1301, USA.
- * 
+ *
  * (C) 2006-2007,
  * @author JBoss Inc.
  */
@@ -44,10 +44,10 @@
         _theReaper = arg;
         _shutdown = false;
     }
-    
+
     /**
-     * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1] - Thread {0} waiting for cancelled TXs
-     * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2] - Thread {0} performing cancellations
+     * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1] - Thread {0} waiting for cancelled TXs
+     * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2] - Thread {0} performing cancellations
      */
 
 public void run ()
@@ -57,7 +57,7 @@
               tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
                                        FacilityCode.FAC_ATOMIC_ACTION, "ReaperWorkerThread.run ()");
          }
-    	
+
         for (;;)
     	{
              // wait for the reaper thread to queue some TXs for
@@ -67,7 +67,7 @@
              {
                   tsLogger.arjLoggerI18N.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
                                                FacilityCode.FAC_ATOMIC_ACTION,
-                                               "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1", 
+                                               "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1",
                                                new Object[]{Thread.currentThread()});
              }
 
@@ -84,7 +84,7 @@
              {
                   tsLogger.arjLoggerI18N.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
                                                FacilityCode.FAC_ATOMIC_ACTION,
-                                               "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2", 
+                                               "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2",
                                                new Object[]{Thread.currentThread()});
              }
 
@@ -104,5 +104,5 @@
 
     private TransactionReaper _theReaper;
     private boolean           _shutdown;
-    
+
 }

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -1868,6 +1868,10 @@
         return _theTransaction.getTimeout();
     }
 
+    public long getRemainingTimeoutMills() {
+        return TransactionReaper.transactionReaper().getRemainingTimeoutMills(_theTransaction);
+    }
+
     public java.util.Map<Uid, String> getSynchronizations()
     {
         if (_theTransaction != null)

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -62,5 +62,6 @@
 
     Map<Uid, String> getSynchronizations();
     Map<XAResource, TxInfo> getResources();
-    int getTimeout();
+    int getTimeout(); // total lifetime set, in seconds
+    long getRemainingTimeoutMills(); // time remaining until possible expire, in ms. 0 if unknown.
 }

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	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -47,6 +47,7 @@
 
 import com.arjuna.ats.arjuna.coordinator.BasicAction;
 import com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator;
+import com.arjuna.ats.arjuna.coordinator.TransactionReaper;
 
 import com.arjuna.ats.jta.xa.*;
 import com.arjuna.ats.jta.common.Configuration;
@@ -1842,6 +1843,10 @@
         return _theTransaction.getTimeout();
     }
 
+    public long getRemainingTimeoutMills() {
+        return TransactionReaper.transactionReaper().getRemainingTimeoutMills(_theTransaction.getControlWrapper());
+    }
+
     public java.util.Map<Uid, String> getSynchronizations()
     {
         if (_theTransaction != null)

Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -2130,13 +2130,20 @@
 						if (TransactionReaper.transactionReaper() != null)
 						{
 						    if (_propagateRemainingTimeout)
-							context.timeout = TransactionReaper.transactionReaper().getRemainingTimeout(control);
-						    else
-							context.timeout = TransactionReaper.transactionReaper().getTimeout(control);
-						}
+                            {
+                                long timeInMills = TransactionReaper.transactionReaper().getRemainingTimeoutMills(control);
+                                context.timeout = (int)(timeInMills/1000L);
+                            }
+                            else
+                            {
+                                context.timeout = TransactionReaper.transactionReaper().getTimeout(control);
+                            }
+                        }
 						else
-							context.timeout = 0;
-					}
+                        {
+                            context.timeout = 0;
+                        }
+                    }
 
 					control = null;
 				}
@@ -2343,7 +2350,7 @@
 	static boolean _checkedTransactions = false;
 
 	static boolean _propagateTerminator = false;
-	
+
 	static boolean _propagateRemainingTimeout = true;  // OTS 1.2 onwards supported this.
 
 	/**
@@ -2402,7 +2409,7 @@
 			if (propTerm.compareTo("YES") == 0)
 				_propagateTerminator = true;
 		}
-		
+
 		String propRemainingTimeout = jtsPropertyManager.propertyManager.getProperty(com.arjuna.ats.jts.common.Environment.OTS_1_0_TIMEOUT_PROPAGATION);
 
 		if (propRemainingTimeout != null)

Modified: labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java
===================================================================
--- labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -68,7 +68,7 @@
      * Get the time left before transaction timeout
      *
      * @param errorRollback throw an error if the transaction is marked for rollback
-     * @return the remaining in the current transaction or -1
+     * @return the time (in ms) remaining in the current transaction or -1
      * if there is no transaction
      * @throws RollbackException if the transaction is marked for rollback and
      * errorRollback is true
@@ -81,7 +81,7 @@
     public long getTimeLeftBeforeTransactionTimeout(boolean errorRollback)
         throws RollbackException
     {
-        // see JBAS-5081 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
+        // see JBAS-5081, JBTM-371 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
 
         try
     	{
@@ -103,22 +103,12 @@
                 case Status.STATUS_ACTIVE:
                 case Status.STATUS_PREPARED:
                 case Status.STATUS_PREPARING:
-                    // TODO this should attempt to return an actual value (in millisecs), but we need transactionReaper
-                    // changes to do that so it will be in 4.4+ only, not 4.2.3.SP.
-                    // For AS 5.0, something along the lines of the block below will probably work, but we should
-                    // push the code down into the JTA/JTS rather than having it here. Talking direct to ArjunaCore
-                    // seems like a bit of a hack...
-                    /*
-                    try {
-                        BasicAction basicAction = ThreadActionData.currentAction();
-                        int remainingSeconds = TransactionReaper.transactionReaper(true).getRemainingTimeout(basicAction);
-                        if(remainingSeconds != 0) {
-                            return 1000*remainingSeconds;
-                        }
-                    } catch(Exception e) {
-                        e.printStackTrace();
+                    com.arjuna.ats.jta.transaction.Transaction tx = (com.arjuna.ats.jta.transaction.Transaction)getTransaction();
+                    if(tx != null) {
+                            return tx.getRemainingTimeoutMills();
+                    } else {
+                        return 0;
                     }
-                    */
                 case Status.STATUS_NO_TRANSACTION:
                 default:
                     break;

Modified: labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java
===================================================================
--- labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java	2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java	2008-08-15 15:52:55 UTC (rev 21571)
@@ -77,8 +77,8 @@
     public long getTimeLeftBeforeTransactionTimeout(boolean errorRollback)
         throws RollbackException
     {
-        // see JBAS-5081 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
-        
+        // see JBAS-5081, JBTM-371 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
+
         try
     	{
             switch(getStatus())
@@ -99,8 +99,12 @@
                 case Status.STATUS_ACTIVE:
                 case Status.STATUS_PREPARED:
                 case Status.STATUS_PREPARING:
-                    // TODO this should attempt to return an actual value (in millisecs), but we need transactionReaper
-                    // changes to do that so it will be in 4.4+ only, not 4.2.3.SP
+                    com.arjuna.ats.jta.transaction.Transaction tx = (com.arjuna.ats.jta.transaction.Transaction)getTransaction();
+                    if(tx != null) {
+                            return tx.getRemainingTimeoutMills();
+                    } else {
+                        return 0;
+                    }
                 case Status.STATUS_NO_TRANSACTION:
                 default:
                     break;




More information about the jboss-svn-commits mailing list