Search in sources :

Example 66 with Synchronization

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());
}
Also used : TransactionSynchronizationRegistryImple(com.arjuna.ats.internal.jta.transaction.jts.TransactionSynchronizationRegistryImple) TransactionSynchronizationRegistry(javax.transaction.TransactionSynchronizationRegistry) Synchronization(javax.transaction.Synchronization) Test(org.junit.Test)

Example 67 with Synchronization

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);
}
Also used : Transaction(javax.transaction.Transaction) TransactionImple(com.arjuna.ats.internal.jta.transaction.jts.TransactionImple) WorkSynchronization(com.arjuna.ats.internal.jta.transaction.jts.jca.WorkSynchronization) Synchronization(javax.transaction.Synchronization) WorkSynchronization(com.arjuna.ats.internal.jta.transaction.jts.jca.WorkSynchronization) Test(org.junit.Test)

Example 68 with Synchronization

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());
}
Also used : InterpositionCreator(com.arjuna.ats.internal.jts.interposition.resources.arjuna.InterpositionCreator) ManagedSynchronizationImple(com.arjuna.ats.internal.jta.resources.jts.orbspecific.ManagedSynchronizationImple) ServerControl(com.arjuna.ats.internal.jts.orbspecific.interposition.ServerControl) PropagationContext(org.omg.CosTransactions.PropagationContext) ArjunaTransactionImple(com.arjuna.ats.internal.jts.orbspecific.coordinator.ArjunaTransactionImple) TransactionImple(com.arjuna.ats.internal.jta.transaction.jts.TransactionImple) CurrentImple(com.arjuna.ats.internal.jts.orbspecific.CurrentImple) Control(org.omg.CosTransactions.Control) ServerControl(com.arjuna.ats.internal.jts.orbspecific.interposition.ServerControl) ControlWrapper(com.arjuna.ats.internal.jts.ControlWrapper) ArjunaTransactionImple(com.arjuna.ats.internal.jts.orbspecific.coordinator.ArjunaTransactionImple) ControlImple(com.arjuna.ats.internal.jts.orbspecific.ControlImple) XAException(javax.transaction.xa.XAException) Synchronization(javax.transaction.Synchronization) Uid(com.arjuna.ats.arjuna.common.Uid) XAResource(javax.transaction.xa.XAResource) Xid(javax.transaction.xa.Xid) ServerTopLevelAction(com.arjuna.ats.internal.jts.orbspecific.interposition.resources.arjuna.ServerTopLevelAction) Test(org.junit.Test)

Example 69 with Synchronization

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;
}
Also used : Transaction(javax.transaction.Transaction) SystemException(javax.transaction.SystemException) TransactionContext(org.teiid.dqp.service.TransactionContext) Synchronization(javax.transaction.Synchronization) RollbackException(javax.transaction.RollbackException) HeuristicRollbackException(javax.transaction.HeuristicRollbackException)

Example 70 with Synchronization

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);
}
Also used : Transaction(javax.transaction.Transaction) InvocationOnMock(org.mockito.invocation.InvocationOnMock) TransactionContext(org.teiid.dqp.service.TransactionContext) Synchronization(javax.transaction.Synchronization)

Aggregations

Synchronization (javax.transaction.Synchronization)87 Test (org.junit.Test)42 Transaction (javax.transaction.Transaction)23 SystemException (javax.transaction.SystemException)21 RollbackException (javax.transaction.RollbackException)14 SQLException (java.sql.SQLException)13 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)7 TransactionSynchronizationRegistry (javax.transaction.TransactionSynchronizationRegistry)7 HeuristicRollbackException (javax.transaction.HeuristicRollbackException)6 ArrayList (java.util.ArrayList)5 HashMap (java.util.HashMap)5 Map (java.util.Map)5 UserTransaction (javax.transaction.UserTransaction)5 XAResource (javax.transaction.xa.XAResource)5 EJBException (javax.ejb.EJBException)4 HeuristicMixedException (javax.transaction.HeuristicMixedException)4 TransactionImple (com.arjuna.ats.internal.jta.transaction.jts.TransactionImple)3 List (java.util.List)3 Xid (javax.transaction.xa.Xid)3 IntegrationTest (org.apache.geode.test.junit.categories.IntegrationTest)3