[jboss-svn-commits] JBL Code SVN: r31835 - in labs/jbosstm/trunk/ArjunaCore: arjuna/classes/com/arjuna/ats/arjuna/coordinator and 12 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Feb 25 08:22:01 EST 2010
Author: mark.little at jboss.com
Date: 2010-02-25 08:22:00 -0500 (Thu, 25 Feb 2010)
New Revision: 31835
Added:
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/CadaverUnitTest.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/LockRecordUnitTest.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/ReactivateUnitTest.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/TypesUnitTest.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryModuleUnitTest.java
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/ActivationRecord.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/CadaverActivationRecord.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/RecoveryRecord.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/StateManagerFriend.java
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/abstractrecords/ActivationRecordUnitTest.java
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicObject.java
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/BasicTest.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/recovery/RecoveredTransactionalObject.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/ConflictType.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/common/resources/AtomicObject.java
labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryTest.java
Log:
https://jira.jboss.org/jira/browse/JBTM-709
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -298,10 +298,13 @@
synchronized (usingActions)
{
- if (usingActions.get(action.topLevelAction().get_uid()) == null)
+ if (usingActions.get(action.get_uid()) == null)
{
- usingActions.put(action.topLevelAction().get_uid(), action
- .topLevelAction());
+ /*
+ * May cause us to add parent as well as child.
+ */
+
+ usingActions.put(action.get_uid(), action);
forceAR = true;
}
}
@@ -395,7 +398,7 @@
{
int arStatus = AddOutcome.AR_ADDED;
ActivationRecord ar = new ActivationRecord(oldStatus, this,
- action.topLevelAction());
+ action);
if ((arStatus = action.add(ar)) != AddOutcome.AR_ADDED)
{
@@ -405,8 +408,7 @@
{
synchronized (usingActions)
{
- usingActions.remove(action.topLevelAction()
- .get_uid());
+ usingActions.remove(action.get_uid());
}
}
@@ -423,6 +425,11 @@
currentlyActivated = activated = true;
}
}
+ else
+ {
+ if (currentStatus == ObjectStatus.ACTIVE_NEW)
+ currentlyActivated = activated = true;
+ }
}
return result;
@@ -555,6 +562,11 @@
return myType;
}
+ public int getObjectModel ()
+ {
+ return objectModel;
+ }
+
/**
* @return the object's unique identifier.
*/
@@ -998,6 +1010,7 @@
if (tsLogger.arjLoggerI18N.isWarnEnabled())
tsLogger.arjLoggerI18N
.warn("com.arjuna.ats.arjuna.StateManager_10");
+
activate();
}
@@ -1212,7 +1225,7 @@
/*
* Here the object must be either RECOVERABLE or PERSISTENT. Whether or
* not an action exists we still need to reset the object status to
- * avoid possible later confusion What it gets set to is not important
+ * avoid possible later confusion. What it gets set to is not important
* really as long as it gets changed from ACTIVE_NEW which might cause
* any running action to abort.
*/
@@ -1433,7 +1446,7 @@
if (committed)
{
if ((myType == ObjectType.RECOVERABLE)
- && (objectModel == ObjectModel.SINGLE))
+ && (objectModel == ObjectModel.SINGLE) || (action.typeOfAction() == ActionType.NESTED))
{
initialStatus = currentStatus = ObjectStatus.ACTIVE;
}
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 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/BasicAction.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -3007,7 +3007,7 @@
{
p = ((actionType == ActionType.TOP_LEVEL) ? record.topLevelPrepare()
: record.nestedPrepare());
-
+
if (p == TwoPhaseOutcome.PREPARE_OK)
{
record = insertRecord(preparedList, record);
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/ActivationRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/ActivationRecord.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/ActivationRecord.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -141,7 +141,18 @@
"ActivationRecord::nestedPrepare() for " + order());
}
- return TwoPhaseOutcome.PREPARE_READONLY;
+ if ((objectAddr != null) && (actionHandle != null))
+ {
+ if (StateManagerFriend.forgetAction(objectAddr, actionHandle, true, RecordType.ACTIVATION))
+ {
+ actionHandle = actionHandle.parent();
+
+ if (StateManagerFriend.rememberAction(objectAddr, actionHandle, RecordType.ACTIVATION))
+ return TwoPhaseOutcome.PREPARE_READONLY;
+ }
+ }
+
+ return TwoPhaseOutcome.FINISH_ERROR;
}
/**
@@ -246,7 +257,7 @@
/*
* should_merge and should_replace are invoked by the record list manager to
- * determine if two records should be merged togethor or if the 'newer'
+ * determine if two records should be merged together or if the 'newer'
* should replace the older. shouldAdd determines if the new record should
* be added in addition to the existing record and is currently only invoked
* if both of should_merge and should_replace return FALSE Default
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/CadaverActivationRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/CadaverActivationRecord.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/CadaverActivationRecord.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -78,6 +78,8 @@
"CadaverActivationRecord::nestedAbort() for "+get_uid());
}
+ super.nestedAbort();
+
return TwoPhaseOutcome.FINISH_OK;
}
@@ -102,6 +104,8 @@
"CadaverActivationRecord::nestedPrepare() for "+get_uid());
}
+ super.nestedPrepare();
+
return TwoPhaseOutcome.PREPARE_READONLY;
}
@@ -114,6 +118,8 @@
"CadaverActivationRecord::topLevelAbort() for "+get_uid());
}
+ super.topLevelAbort();
+
return TwoPhaseOutcome.FINISH_OK;
}
@@ -125,6 +131,8 @@
"CadaverActivationRecord::topLevelCommit() for "+get_uid());
}
+ super.topLevelCommit();
+
return TwoPhaseOutcome.FINISH_OK;
}
@@ -136,6 +144,10 @@
"CadaverActivationRecord::topLevelPrepare() for "+get_uid());
}
+ // make sure SM instance forgets about action
+
+ super.topLevelCommit();
+
return TwoPhaseOutcome.PREPARE_READONLY;
}
@@ -146,7 +158,7 @@
/*
* shouldMerge and should_replace are invoked by the record list manager
- * to determine if two records should be merged togethor or if the
+ * to determine if two records should be merged together or if the
* 'newer' should replace the older.
* shouldAdd determines if the new record should be added in addition
* to the existing record and is currently only invoked if both of
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/RecoveryRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/RecoveryRecord.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/RecoveryRecord.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -160,7 +160,7 @@
* nestedCommit does nothing since the passing of the state up to the parent
* action is handled by the record list merging system. In fact since
* nestedPrepare returns PREPARE_READONLY this function should never
- * actaully be called
+ * actually be called
*/
public int nestedCommit ()
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/StateManagerFriend.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/StateManagerFriend.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/StateManagerFriend.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -31,7 +31,6 @@
package com.arjuna.ats.internal.arjuna.abstractrecords;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.arjuna.ats.arjuna.StateManager;
@@ -48,6 +47,8 @@
* [com.arjuna.ats.internal.arjuna.abstractrecords.smf1] - StateManagerFriend.forgetAction
* @message com.arjuna.ats.internal.arjuna.abstractrecords.smf2
* [com.arjuna.ats.internal.arjuna.abstractrecords.smf2] - StateManagerFriend.destroyed
+ * @message com.arjuna.ats.internal.arjuna.abstractrecords.smf3
+ * [com.arjuna.ats.internal.arjuna.abstractrecords.smf3] - StateManagerFriend.rememberAction
*/
public class StateManagerFriend
@@ -74,7 +75,30 @@
return false;
}
}
+
+ public static final boolean rememberAction (StateManager inst,
+ BasicAction act, int recordType)
+ {
+ try
+ {
+ Method m = StateManager.class.getDeclaredMethod("rememberAction", BasicAction.class, int.class);
+ m.setAccessible(true);
+ Boolean b = (Boolean) m.invoke(inst, act, recordType);
+ m.setAccessible(false);
+
+ return b.booleanValue();
+ }
+ catch (final Throwable ex)
+ {
+ if (tsLogger.arjLoggerI18N.isWarnEnabled())
+ tsLogger.arjLoggerI18N
+ .warn("com.arjuna.ats.internal.arjuna.abstractrecords.smf3", ex);
+
+ return false;
+ }
+ }
+
public static final void destroyed (StateManager inst) //throws NoSuchMethodException, InvocationTargetException, IllegalAccessException
{
try
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/abstractrecords/ActivationRecordUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/abstractrecords/ActivationRecordUnitTest.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/abstractrecords/ActivationRecordUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -43,8 +43,14 @@
@Test
public void test ()
{
- ActivationRecord cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), new AtomicAction());
+ AtomicAction A = new AtomicAction();
+ AtomicAction B = new AtomicAction();
+ A.begin();
+ B.begin();
+
+ ActivationRecord cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), B);
+
assertFalse(cr.propagateOnAbort());
assertTrue(cr.propagateOnCommit());
assertEquals(cr.typeIs(), RecordType.ACTIVATION);
@@ -57,17 +63,19 @@
assertEquals(cr.nestedPrepare(), TwoPhaseOutcome.PREPARE_READONLY);
assertEquals(cr.nestedAbort(), TwoPhaseOutcome.FINISH_OK);
- cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), new AtomicAction());
+ cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), B);
assertEquals(cr.nestedPrepare(), TwoPhaseOutcome.PREPARE_READONLY);
assertEquals(cr.nestedCommit(), TwoPhaseOutcome.FINISH_OK);
- cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), new AtomicAction());
+ B.abort();
+
+ cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), A);
assertEquals(cr.topLevelPrepare(), TwoPhaseOutcome.PREPARE_OK);
assertEquals(cr.topLevelAbort(), TwoPhaseOutcome.FINISH_OK);
- cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), new AtomicAction());
+ cr = new ActivationRecord(ObjectType.ANDPERSISTENT, new ExtendedObject(), A);
assertEquals(cr.topLevelPrepare(), TwoPhaseOutcome.PREPARE_OK);
assertEquals(cr.topLevelCommit(), TwoPhaseOutcome.FINISH_OK);
@@ -79,5 +87,7 @@
assertTrue(cr.save_state(new OutputObjectState(), ObjectType.ANDPERSISTENT));
assertFalse(cr.restore_state(new InputObjectState(), ObjectType.ANDPERSISTENT));
+
+ A.abort();
}
}
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicObject.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicObject.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicObject.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -76,10 +76,19 @@
public int get()
{
- if (activate())
- return state;
- else
- return -1;
+ try
+ {
+ lockMutex();
+
+ if (activate())
+ return state;
+ else
+ return -1;
+ }
+ finally
+ {
+ getMutex().unlock();
+ }
}
public String type()
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/BasicTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/BasicTest.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/BasicTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -32,6 +32,8 @@
package com.hp.mwtests.ts.arjuna.statemanager;
import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectModel;
+import com.arjuna.ats.arjuna.common.Uid;
import com.hp.mwtests.ts.arjuna.resources.*;
@@ -54,5 +56,34 @@
assertTrue(bo.getStore() != null);
assertTrue(bo.getStoreRoot() != null);
+
+ assertEquals(bo.getObjectModel(), ObjectModel.SINGLE);
}
+
+ @Test
+ public void testNested () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicAction B = new AtomicAction();
+ BasicObject bo = new BasicObject();
+ Uid u = bo.get_uid();
+
+ A.begin();
+ B.begin();
+
+ bo.set(2);
+
+ B.commit();
+ A.commit();
+
+ bo = new BasicObject(u);
+
+ A = new AtomicAction();
+
+ A.begin();
+
+ assertEquals(bo.get(), 2);
+
+ A.commit();
+ }
}
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -77,7 +77,7 @@
cadaverLockStore = store;
objectTypeName = new String(lm.type());
- if (super.objectModel == ObjectModel.SINGLE)
+ if (lm.getObjectModel() == ObjectModel.SINGLE)
{
doRelease = false;
}
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -60,13 +60,7 @@
public LockRecord (LockManager lm, BasicAction currAct)
{
- super(lm.get_uid(), lm.type(), ObjectType.ANDPERSISTENT);
-
- actionHandle = currAct;
-
- managerAddress = lm;
- readOnly = false;
- managerType = lm.type();
+ this(lm, false, currAct);
}
public LockRecord (LockManager lm, boolean rdOnly, BasicAction currAct)
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/recovery/RecoveredTransactionalObject.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/recovery/RecoveredTransactionalObject.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/recovery/RecoveredTransactionalObject.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -37,20 +37,15 @@
import com.arjuna.ats.arjuna.state.*;
import com.arjuna.ats.txoj.logging.txojLogger;
-import com.arjuna.ats.txoj.logging.FacilityCode;
import com.arjuna.common.util.logging.*;
import com.arjuna.ats.arjuna.objectstore.*;
import com.arjuna.ats.arjuna.recovery.TransactionStatusConnectionManager;
-import java.util.*;
-import java.io.PrintWriter;
import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
import com.arjuna.ats.internal.arjuna.Header;
-import java.io.IOException;
-
/**
* TransactionalObject shell instantiated at recovery time.
* <p>
@@ -121,9 +116,7 @@
public class RecoveredTransactionalObject extends StateManager
{
-
- RecoveredTransactionalObject(Uid objectUid, String originalType,
- ObjectStore objectStore)
+ protected RecoveredTransactionalObject(Uid objectUid, String originalType, ObjectStore objectStore)
{
_ourUid = objectUid;
_type = originalType;
@@ -143,7 +136,7 @@
}
}
- final void replayPhase2 ()
+ protected final void replayPhase2 ()
{
if (findHoldingTransaction())
{
@@ -221,6 +214,8 @@
{
rollback();
}
+ else
+ commit();
}
else
{
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/ConflictType.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/ConflictType.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/ConflictType.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -38,7 +38,7 @@
* trying to set a lock.
*/
-class ConflictType
+public class ConflictType
{
public static final int CONFLICT = 0;
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -726,6 +726,7 @@
}
cleanUp();
+
super.terminate();
}
@@ -754,17 +755,19 @@
* act accordingly.
*/
+ BasicAction current = BasicAction.Current();
+
synchronized (super.usingActions)
{
if (super.usingActions != null)
{
- Enumeration e = super.usingActions.keys();
+ Enumeration e = super.usingActions.elements();
while (e.hasMoreElements())
{
BasicAction action = (BasicAction) e.nextElement();
- while (action != null)
+ if (action != null) // shouldn't be null!!
{
/*
* Pop actions off using list. Don't check if action
@@ -777,12 +780,14 @@
* maintain the locks because this object is being
* deleted.
*/
-
+
AbstractRecord A = new CadaverLockRecord(lockStore,
this, action);
if (action.add(A) != AddOutcome.AR_ADDED)
+ {
A = null;
+ }
}
}
}
Added: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/CadaverUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/CadaverUnitTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/CadaverUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -0,0 +1,193 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.
+ * 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
+ * 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,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.txoj.abstactrecords;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+
+import org.junit.Test;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectModel;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.coordinator.BasicAction;
+import com.arjuna.ats.internal.txoj.abstractrecords.CadaverLockRecord;
+import com.arjuna.ats.internal.txoj.abstractrecords.LockRecord;
+import com.hp.mwtests.ts.txoj.common.resources.AtomicObject;
+
+import static org.junit.Assert.*;
+
+public class CadaverUnitTest
+{
+ @Test
+ public void testCommit () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicObject B = new AtomicObject(ObjectModel.MULTIPLE);
+ Uid u = B.get_uid();
+
+ A.begin();
+
+ B.set(1234);
+
+ A.commit();
+
+ A = new AtomicAction();
+ B = new AtomicObject(u, ObjectModel.MULTIPLE);
+
+ A.begin();
+
+ AtomicAction C = new AtomicAction();
+
+ C.begin();
+
+ assertEquals(B.get(), 1234);
+
+ B.set(5678);
+
+ B.terminate();
+
+ C.commit();
+
+ assertEquals(A.commit(), ActionStatus.COMMITTED);
+ }
+
+ @Test
+ public void testAbort () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicObject B = new AtomicObject(ObjectModel.MULTIPLE);
+ Uid u = B.get_uid();
+
+ A.begin();
+
+ B.set(1234);
+
+ A.commit();
+
+ A = new AtomicAction();
+
+ B = new AtomicObject(u, ObjectModel.MULTIPLE);
+
+ A.begin();
+
+ AtomicAction C = new AtomicAction();
+
+ C.begin();
+
+ assertEquals(B.get(), 1234);
+
+ B.set(5678);
+
+ B.terminate();
+
+ C.commit();
+
+ assertEquals(A.abort(), ActionStatus.ABORTED);
+ }
+
+ @Test
+ public void testMultipleNestedCommit () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicObject B = new AtomicObject(ObjectModel.MULTIPLE);
+ Uid u = B.get_uid();
+
+ A.begin();
+
+ B.set(1234);
+
+ A.commit();
+
+ A = new AtomicAction();
+ B = new AtomicObject(u, ObjectModel.MULTIPLE);
+
+ A.begin();
+
+ AtomicAction C = new AtomicAction();
+
+ C.begin();
+
+ assertEquals(B.get(), 1234);
+
+ B.set(5678);
+
+ B.terminate();
+
+ C.commit();
+
+ assertEquals(A.commit(), ActionStatus.COMMITTED);
+ }
+
+ @Test
+ public void testMultipleNestedAbort () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicObject B = new AtomicObject(ObjectModel.MULTIPLE);
+ Uid u = B.get_uid();
+
+ A.begin();
+
+ B.set(1234);
+
+ A.commit();
+
+ A = new AtomicAction();
+ B = new AtomicObject(u, ObjectModel.MULTIPLE);
+
+ A.begin();
+
+ AtomicAction C = new AtomicAction();
+
+ C.begin();
+
+ assertEquals(B.get(), 1234);
+
+ B.set(5678);
+
+ B.terminate();
+
+ C.abort();
+
+ assertEquals(A.commit(), ActionStatus.COMMITTED);
+ }
+
+ @Test
+ public void testBasic () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+ AtomicObject B = new AtomicObject();
+
+ A.begin();
+
+ CadaverLockRecord clr = new CadaverLockRecord(null, B, A);
+ LockRecord lr = new LockRecord(B, A);
+
+ assertTrue(clr.type() != null);
+
+ clr.print(new PrintWriter(new ByteArrayOutputStream()));
+
+ clr.replace(lr);
+
+ A.abort();
+ }
+}
Added: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/LockRecordUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/LockRecordUnitTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/abstactrecords/LockRecordUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.
+ * 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
+ * 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,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.txoj.abstactrecords;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+
+import org.junit.Test;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.internal.txoj.abstractrecords.LockRecord;
+import com.hp.mwtests.ts.txoj.common.resources.AtomicObject;
+
+import static org.junit.Assert.*;
+
+public class LockRecordUnitTest
+{
+ @Test
+ public void test ()
+ {
+ LockRecord lr = new LockRecord();
+
+ assertEquals(lr.lockType(), null);
+ assertTrue(lr.save_state(new OutputObjectState(), ObjectType.ANDPERSISTENT));
+ assertFalse(lr.restore_state(new InputObjectState(), ObjectType.ANDPERSISTENT));
+ assertEquals(lr.value(), null);
+
+ lr.setValue(null);
+
+ assertEquals(lr.nestedAbort(), TwoPhaseOutcome.FINISH_ERROR);
+ assertEquals(lr.nestedCommit(), TwoPhaseOutcome.FINISH_ERROR);
+ assertEquals(lr.topLevelAbort(), TwoPhaseOutcome.FINISH_ERROR);
+ assertEquals(lr.topLevelCommit(), TwoPhaseOutcome.FINISH_ERROR);
+
+ lr = new LockRecord(new AtomicObject(), new AtomicAction());
+
+ assertTrue(lr.toString() != null);
+
+ lr.print(new PrintWriter(new ByteArrayOutputStream()));
+
+ assertTrue(lr.type() != null);
+
+ lr.merge(null);
+ lr.alter(null);
+ }
+}
Added: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/ReactivateUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/ReactivateUnitTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/ReactivateUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.
+ * 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
+ * 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,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: RecoveryTest.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.hp.mwtests.ts.txoj.basic;
+
+import com.arjuna.ats.arjuna.*;
+import com.arjuna.ats.arjuna.common.*;
+
+import com.hp.mwtests.ts.txoj.common.resources.AtomicObject;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class ReactivateUnitTest
+{
+ @Test
+ public void test()
+ {
+ try {
+ AtomicObject obj = new AtomicObject();
+ Uid objRef = obj.get_uid();
+
+ AtomicAction A = new AtomicAction();
+
+ A.begin();
+
+ obj.set(1234);
+
+ A.commit();
+
+ AtomicObject recObj = new AtomicObject(objRef);
+
+ AtomicAction B = new AtomicAction();
+
+ B.begin();
+
+ assertEquals(1234, recObj.get());
+
+ B.abort();
+ }
+ catch (Exception ex)
+ {
+ fail(ex.toString());
+ }
+ }
+}
Added: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/TypesUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/TypesUnitTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/basic/TypesUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.
+ * 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
+ * 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,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: TestException.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.hp.mwtests.ts.txoj.basic;
+
+import java.io.PrintWriter;
+
+import org.junit.Test;
+
+import com.arjuna.ats.txoj.ConflictType;
+import com.arjuna.ats.txoj.LockMode;
+import com.arjuna.ats.txoj.LockResult;
+import com.arjuna.ats.txoj.LockStatus;
+
+import static org.junit.Assert.*;
+
+public class TypesUnitTest
+{
+ @Test
+ public void test()
+ {
+ assertEquals(ConflictType.stringForm(ConflictType.COMPATIBLE), "ConflictType.COMPATIBLE");
+ assertEquals(ConflictType.stringForm(ConflictType.CONFLICT), "ConflictType.CONFLICT");
+ assertEquals(ConflictType.stringForm(ConflictType.PRESENT), "ConflictType.PRESENT");
+ assertEquals(ConflictType.stringForm(-1), "Unknown");
+
+ ConflictType.print(new PrintWriter(System.err), ConflictType.COMPATIBLE);
+
+ assertEquals(LockMode.stringForm(LockMode.INTENTION_READ), "LockMode.INTENTION_READ");
+ assertEquals(LockMode.stringForm(LockMode.INTENTION_WRITE), "LockMode.INTENTION_WRITE");
+ assertEquals(LockMode.stringForm(LockMode.READ), "LockMode.READ");
+ assertEquals(LockMode.stringForm(LockMode.WRITE), "LockMode.WRITE");
+ assertEquals(LockMode.stringForm(LockMode.UPGRADE), "LockMode.UPGRADE");
+ assertEquals(LockMode.stringForm(-1), "Unknown");
+
+ LockMode.print(new PrintWriter(System.err), LockMode.INTENTION_READ);
+
+ assertEquals(LockResult.stringForm(LockResult.GRANTED), "LockResult.GRANTED");
+ assertEquals(LockResult.stringForm(LockResult.REFUSED), "LockResult.REFUSED");
+ assertEquals(LockResult.stringForm(LockResult.RELEASED), "LockResult.RELEASED");
+ assertEquals(LockResult.stringForm(-1), "Unknown");
+
+ LockResult.print(new PrintWriter(System.err), LockResult.GRANTED);
+
+ assertEquals(LockStatus.printString(LockStatus.LOCKFREE), "LockStatus.LOCKFREE");
+ assertEquals(LockStatus.printString(LockStatus.LOCKHELD), "LockStatus.LOCKHELD");
+ assertEquals(LockStatus.printString(LockStatus.LOCKRETAINED), "LockStatus.LOCKRETAINED");
+ assertEquals(LockStatus.printString(-1), "Unknown");
+
+ LockStatus.print(new PrintWriter(System.err), LockStatus.LOCKFREE);
+ }
+}
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/common/resources/AtomicObject.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/common/resources/AtomicObject.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/common/resources/AtomicObject.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -109,12 +109,11 @@
printDebug = true;
}
- public void finalize () throws Throwable
+ public void terminate ()
{
super.terminate();
- super.finalize();
}
-
+
public void incr (int value) throws TestException
{
AtomicAction A = new AtomicAction();
Added: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryModuleUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryModuleUnitTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryModuleUnitTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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.
+ * 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
+ * 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,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: RecoveryTest.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.hp.mwtests.ts.txoj.recovery;
+
+import org.junit.Test;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.internal.txoj.recovery.TORecoveryModule;
+import com.hp.mwtests.ts.txoj.common.resources.AtomicObject;
+
+import static org.junit.Assert.*;
+
+
+public class RecoveryModuleUnitTest
+{
+ @Test
+ public void test () throws Exception
+ {
+ TORecoveryModule trm = new TORecoveryModule();
+ AtomicAction A = new AtomicAction();
+
+ A.begin();
+
+ AtomicObject obj = new AtomicObject();
+ OutputObjectState os = new OutputObjectState();
+ Uid u = new Uid();
+
+ assertTrue(obj.save_state(os, ObjectType.ANDPERSISTENT));
+
+ assertTrue(TxControl.getStore().write_uncommitted(u, obj.type(), os));
+
+ A.abort();
+
+ trm.periodicWorkFirstPass();
+ trm.periodicWorkSecondPass();
+ }
+}
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryTest.java 2010-02-25 05:05:57 UTC (rev 31834)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/tests/classes/com/hp/mwtests/ts/txoj/recovery/RecoveryTest.java 2010-02-25 13:22:00 UTC (rev 31835)
@@ -33,42 +33,73 @@
import com.arjuna.ats.arjuna.*;
import com.arjuna.ats.arjuna.common.*;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.internal.txoj.recovery.RecoveredTransactionalObject;
import com.hp.mwtests.ts.txoj.common.resources.AtomicObject;
import org.junit.Test;
import static org.junit.Assert.*;
+class MyRecoveredTO extends RecoveredTransactionalObject
+{
+ public MyRecoveredTO(Uid objectUid, String originalType,
+ ObjectStore objectStore)
+ {
+ super(objectUid, originalType, objectStore);
+ }
+
+ public void replay ()
+ {
+ super.replayPhase2();
+ }
+}
+
public class RecoveryTest
{
@Test
- public void test()
+ public void testCommit () throws Exception
{
- try {
- AtomicObject obj = new AtomicObject();
- Uid objRef = obj.get_uid();
-
- AtomicAction A = new AtomicAction();
-
- A.begin();
-
- obj.set(1234);
-
- A.commit();
-
- AtomicObject recObj = new AtomicObject(objRef);
-
- AtomicAction B = new AtomicAction();
-
- B.begin();
-
- assertEquals(1234, recObj.get());
-
- B.abort();
- }
- catch (Exception ex)
- {
- fail(ex.toString());
- }
+ AtomicAction A = new AtomicAction();
+
+ A.begin();
+
+ AtomicObject obj = new AtomicObject();
+ OutputObjectState os = new OutputObjectState();
+ Uid u = new Uid();
+
+ assertTrue(obj.save_state(os, ObjectType.ANDPERSISTENT));
+
+ assertTrue(TxControl.getStore().write_uncommitted(u, obj.type(), os));
+
+ MyRecoveredTO rto = new MyRecoveredTO(u, obj.type(), TxControl.getStore());
+
+ rto.replay();
+
+ A.abort();
}
+
+ @Test
+ public void testAbort () throws Exception
+ {
+ AtomicAction A = new AtomicAction();
+
+ A.begin();
+
+ AtomicObject obj = new AtomicObject();
+ OutputObjectState os = new OutputObjectState();
+ Uid u = new Uid();
+
+ assertTrue(obj.save_state(os, ObjectType.ANDPERSISTENT));
+
+ assertTrue(TxControl.getStore().write_uncommitted(u, obj.type(), os));
+
+ MyRecoveredTO rto = new MyRecoveredTO(u, obj.type(), TxControl.getStore());
+
+ A.abort();
+
+ rto.replay();
+ }
}
More information about the jboss-svn-commits
mailing list