use of javax.transaction.Synchronization in project narayana by jbosstm.
the class TransactionSynchronizationRegistryTest method testTSR.
@Test
public void testTSR() throws Exception {
javax.transaction.TransactionManager tm = com.arjuna.ats.jta.TransactionManager.transactionManager();
TransactionSynchronizationRegistry tsr = new TransactionSynchronizationRegistryImple();
assertNull(tsr.getTransactionKey());
assertEquals(tm.getStatus(), tsr.getTransactionStatus());
tm.begin();
assertNotNull(tsr.getTransactionKey());
assertEquals(tm.getStatus(), tsr.getTransactionStatus());
String key = "key";
Object value = new Object();
assertNull(tsr.getResource(key));
tsr.putResource(key, value);
assertEquals(value, tsr.getResource(key));
Synchronization synchronization = new com.hp.mwtests.ts.jta.jts.common.Synchronization();
tsr.registerInterposedSynchronization(synchronization);
assertFalse(tsr.getRollbackOnly());
tsr.setRollbackOnly();
assertTrue(tsr.getRollbackOnly());
boolean gotExpectedException = false;
try {
tsr.registerInterposedSynchronization(synchronization);
} catch (IllegalStateException e) {
gotExpectedException = true;
}
assertTrue(gotExpectedException);
tm.rollback();
assertEquals(tm.getStatus(), tsr.getTransactionStatus());
}
use of javax.transaction.Synchronization in project narayana by jbosstm.
the class WorkUnitTest method testWorkSynchronization.
@Test
public void testWorkSynchronization() throws Exception {
Transaction tx = new TransactionImple();
Synchronization ws = new WorkSynchronization(tx);
DummyWork work = new DummyWork();
TxWorkManager.addWork(work, tx);
try {
ws.beforeCompletion();
fail();
} catch (final IllegalStateException ex) {
}
ws.afterCompletion(Status.STATUS_COMMITTED);
}
use of javax.transaction.Synchronization in project narayana by jbosstm.
the class JTSInterpositionSynchronizationTest method test.
@Test
public void test() throws Exception {
InterpositionCreator creator = new InterpositionCreator();
jtaPropertyManager.getJTAEnvironmentBean().setTransactionManagerClassName(com.arjuna.ats.internal.jta.transaction.jts.TransactionManagerImple.class.getName());
jtaPropertyManager.getJTAEnvironmentBean().setUserTransactionClassName(com.arjuna.ats.internal.jta.transaction.jts.UserTransactionImple.class.getName());
jtsPropertyManager.getJTSEnvironmentBean().setSupportInterposedSynchronization(true);
javax.transaction.TransactionManager tm = com.arjuna.ats.jta.TransactionManager.transactionManager();
tm.setTransactionTimeout(1000000);
tm.begin();
TransactionImple transaction = (TransactionImple) tm.getTransaction();
transaction.enlistResource(new XAResource() {
@Override
public int prepare(Xid arg0) throws XAException {
prepareCalled = true;
beforeCompletionCalledFirst = beforeCompletionCalled;
return 0;
}
@Override
public void commit(Xid arg0, boolean arg1) throws XAException {
}
@Override
public void end(Xid arg0, int arg1) throws XAException {
}
@Override
public void forget(Xid arg0) throws XAException {
}
@Override
public int getTransactionTimeout() throws XAException {
return 0;
}
@Override
public boolean isSameRM(XAResource arg0) throws XAException {
return false;
}
@Override
public Xid[] recover(int arg0) throws XAException {
return null;
}
@Override
public void rollback(Xid arg0) throws XAException {
}
@Override
public boolean setTransactionTimeout(int arg0) throws XAException {
return false;
}
@Override
public void start(Xid arg0, int arg1) throws XAException {
}
});
ControlWrapper controlWrapper = transaction.getControlWrapper();
Uid get_uid = transaction.get_uid();
ControlImple cont = controlWrapper.getImple();
ArjunaTransactionImple tx = cont.getImplHandle();
CurrentImple current = OTSImpleManager.current();
Control get_control = current.get_control();
PropagationContext ctx = cont.get_coordinator().get_txcontext();
ControlImple recreateLocal = creator.recreateLocal(ctx);
assertTrue(recreateLocal != null);
Control recreate = creator.recreate(ctx);
assertTrue(recreate != null);
Object remove = ControlImple.allControls.remove(get_uid);
ServerControl sc = new ServerControl(get_uid, get_control, null, cont.get_coordinator(), cont.get_terminator());
ControlImple.allControls.put(get_uid, remove);
ServerTopLevelAction serverTopLevelAction = new ServerTopLevelAction(sc);
sc.getImplHandle().register_synchronization(new ManagedSynchronizationImple(new Synchronization() {
@Override
public void beforeCompletion() {
beforeCompletionCalled = true;
}
@Override
public void afterCompletion(int status) {
afterCompletionCalled = true;
}
}).getSynchronization());
transaction.commit();
assertTrue(prepareCalled == true);
assertTrue(beforeCompletionCalled);
assertTrue(afterCompletionCalled);
assertTrue(beforeCompletionCalledFirst == jtsPropertyManager.getJTSEnvironmentBean().isSupportInterposedSynchronization());
}
use of javax.transaction.Synchronization in project teiid by teiid.
the class TransactionServerImpl method getOrCreateTransactionContext.
public TransactionContext getOrCreateTransactionContext(final String threadId) {
TransactionContext tc = transactions.getOrCreateTransactionContext(threadId);
if (detectTransactions) {
try {
Transaction tx = transactionManager.getTransaction();
if (tx != null && tx != tc.getTransaction()) {
tx.registerSynchronization(new Synchronization() {
@Override
public void beforeCompletion() {
}
@Override
public void afterCompletion(int status) {
transactions.removeTransactionContext(threadId);
}
});
tc.setTransaction(tx);
tc.setTransactionType(Scope.INHERITED);
}
// TODO: it may be appropriate to throw an up-front exception
} catch (SystemException e) {
} catch (IllegalStateException e) {
} catch (RollbackException e) {
}
}
return tc;
}
use of javax.transaction.Synchronization in project teiid by teiid.
the class TestTempTables method setupTransaction.
private void setupTransaction(int isolation) throws RollbackException, SystemException {
txn = Mockito.mock(Transaction.class);
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
synch = (Synchronization) invocation.getArguments()[0];
return null;
}
}).when(txn).registerSynchronization((Synchronization) Mockito.anyObject());
Mockito.stub(txn.toString()).toReturn("txn");
tc = new TransactionContext();
tc.setTransaction(txn);
tc.setIsolationLevel(isolation);
tc.setTransactionType(Scope.REQUEST);
}
Aggregations