use of com.hp.mwtests.ts.arjuna.abstractrecords.OrderedOnePhaseAbstractRecord in project narayana by jbosstm.
the class OrderedOnePhaseResourcesUnitTest method testOrderedOnePhase.
@Test
public void testOrderedOnePhase() throws Exception {
System.setProperty("com.arjuna.ats.arjuna.common.propertiesFile", "jbossts-properties.xml");
Uid firstToCommit = new Uid();
Uid secondToCommit = new Uid();
AtomicAction A = new AtomicAction();
// These user defined records could wrap anything such as 1PC JDBC or messages
OrderedOnePhaseAbstractRecord rec1 = new OrderedOnePhaseAbstractRecord(secondToCommit);
OrderedOnePhaseAbstractRecord rec2 = new OrderedOnePhaseAbstractRecord(firstToCommit);
A.begin();
// Doesn't matter of the order
A.add(rec1);
A.add(rec2);
// Do some work you could save some concept of the work in the abstract record save_state
// rec1.sendMessage
// rec2.doSQL
// This is just so we can see the opportunity for failure recovery
rec1.causeTransientFailure();
// Commit, this would make sure the database (rec2) was committed first
A.commit();
// This shows recovery working, we should see Uid2 called again, if you had encoded some information in rec2 you could
// maybe
// retry the sending of a message or similar
RecordTypeManager.manager().add(new RecordTypeMap() {
@Override
public int getType() {
return OrderedOnePhaseAbstractRecord.typeId();
}
@Override
public Class<? extends AbstractRecord> getRecordClass() {
return OrderedOnePhaseAbstractRecord.class;
}
});
recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1);
RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT).addModule(new AtomicActionRecoveryModule());
RecoveryManager.manager().scan();
}
Aggregations