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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Mar 29 06:18:50 EDT 2011


Author: jhalliday
Date: 2011-03-29 06:18:50 -0400 (Tue, 29 Mar 2011)
New Revision: 36869

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/CoordinatorEnvironmentBean.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java
   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/interposition/coordinator/ServerTransaction.java
Log:
Make BasicAction finalizer configurable. JBTM-832


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/CoordinatorEnvironmentBean.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/CoordinatorEnvironmentBean.java	2011-03-28 16:15:02 UTC (rev 36868)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/CoordinatorEnvironmentBean.java	2011-03-29 10:18:50 UTC (rev 36869)
@@ -75,6 +75,8 @@
 
     private volatile String communicationStore = HashedActionStore.class.getName();
 
+    private volatile boolean finalizeBasicActions = false;
+
     /**
      * Returns the symbolic name for the action store type.
      *
@@ -670,4 +672,29 @@
     {
         this.communicationStore = communicationStore;
     }
+
+    /**
+     * Sets whether or not to use finalizers for BasicActions (i.e. transactions).
+     * This can provide a useful safety net to ensure cleanup of locks and other
+     * resources, but does not perform well.  In most cases it's preferable to
+     * set a transaction timeout and rely on the reaper for cleanup.
+     *
+     * Default: false
+     *
+     * @return true if a finalize method should be registered for BasicActions instances, false otherwise.
+     */
+    public boolean isFinalizeBasicActions()
+    {
+        return finalizeBasicActions;
+    }
+
+    /**
+     * Sets whether or not to use finalizers for BasicActions (i.e. transactions).
+     *
+     * @param finalizeBasicActions true to enable finalization, false to disable.
+     */
+    public void setFinalizeBasicActions(boolean finalizeBasicActions)
+    {
+        this.finalizeBasicActions = finalizeBasicActions;
+    }
 }

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	2011-03-28 16:15:02 UTC (rev 36868)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java	2011-03-29 10:18:50 UTC (rev 36869)
@@ -138,7 +138,7 @@
      * applying abort to it we should end up at ourselves!
      */
 
-    public void finalize ()
+    public void finalizeInternal()
     {
         if (tsLogger.logger.isTraceEnabled()) {
             tsLogger.logger.trace("BasicAction::finalize()");
@@ -1377,6 +1377,10 @@
 
                 ActionManager.manager().put(this);
 
+                if(finalizeBasicActions) {
+                    finalizerObject = new BasicActionFinalizer(this);
+                }
+
                 if (TxStats.enabled())
                 {
                     TxStats.getInstance().incrementTransactions();
@@ -3549,8 +3553,28 @@
     private Hashtable _childThreads;
     private Hashtable _childActions;
 
+    private BasicActionFinalizer finalizerObject;
+    private static final boolean finalizeBasicActions = arjPropertyManager.getCoordinatorEnvironmentBean().isFinalizeBasicActions();
+
     //    private Mutex _lock = new Mutex(); // TODO
 
     private static CheckedActionFactory _checkedActionFactory = arjPropertyManager.getCoordinatorEnvironmentBean().getCheckedActionFactory();
+
 }
 
+class BasicActionFinalizer
+{
+    private final BasicAction basicAction;
+
+    BasicActionFinalizer(BasicAction basicAction)
+    {
+        this.basicAction = basicAction;
+    }
+
+    @Override
+    protected void finalize() throws Throwable
+    {
+        basicAction.finalizeInternal();
+    }
+}
+

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	2011-03-28 16:15:02 UTC (rev 36868)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java	2011-03-29 10:18:50 UTC (rev 36869)
@@ -250,7 +250,7 @@
 	 * Memory management is much better in Java, so we don't have the problem of
 	 * the Control referencing the transaction and vice versa.
 	 */
-
+    @Override
 	public void finalize ()
 	{
 		if (jtsLogger.logger.isTraceEnabled()) {
@@ -270,7 +270,7 @@
 
 		controlHandle = null;
 
-		super.finalize();
+		super.finalizeInternal();
 	}
 
 	public final synchronized ControlImple getControlHandle ()

Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/interposition/coordinator/ServerTransaction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/interposition/coordinator/ServerTransaction.java	2011-03-28 16:15:02 UTC (rev 36868)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/interposition/coordinator/ServerTransaction.java	2011-03-29 10:18:50 UTC (rev 36869)
@@ -96,6 +96,7 @@
 		_prepState = ActionStatus.COMMITTING;
 	}
 
+    @Override
 	public void finalize ()
 	{
 		if (jtsLogger.logger.isTraceEnabled()) {
@@ -117,7 +118,7 @@
 
 		_recoveryCoordinator = null;
 
-		super.finalize();
+		super.finalizeInternal();
 	}
 
 	public String type ()



More information about the jboss-svn-commits mailing list