[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