use of com.arjuna.ats.internal.jta.transaction.arjunacore.jca.WorkSynchronization in project narayana by jbosstm.
the class WorkUnitTest method testWorkSynchronization.
@Test
public void testWorkSynchronization() throws Exception {
Transaction tx = new TransactionImple(0);
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 com.arjuna.ats.internal.jta.transaction.arjunacore.jca.WorkSynchronization in project narayana by jbosstm.
the class XATerminator method registerWork.
/**
* Register the unit of work with the specified transaction. The
* thread-to-transaction association is not changed yet. Basically this
* operation only lets the transaction system know about the work and
* nothing else.
*
* @param work
* the work to associate with the transaction.
* @param xid
* the transaction within which the work will be performed.
* @param timeout
* the lifetime of the transaction.
*
* @throws WorkCompletedException
* thrown if the work cannot be associated with the transaction.
*/
public void registerWork(Work work, Xid xid, long timeout) throws WorkCompletedException {
try {
/*
* Remember to convert timeout to seconds.
*/
Transaction tx = SubordinationManager.getTransactionImporter().importTransaction(xid, (int) timeout / 1000);
switch(tx.getStatus()) {
case Status.STATUS_NO_TRANSACTION:
case Status.STATUS_UNKNOWN:
throw new WorkCompletedException(jbossatxLogger.i18NLogger.get_jta_jca_inactive(), WorkException.TX_RECREATE_FAILED);
case Status.STATUS_ACTIVE:
break;
default:
throw new WorkCompletedException(jbossatxLogger.i18NLogger.get_jta_jca_completing(), WorkException.TX_CONCURRENT_WORK_DISALLOWED);
}
TxWorkManager.addWork(work, tx);
/*
* TODO currently means one synchronization per work item and that
* instance isn't removed when/if the work item is cancelled and
* another work item is later added.
*
* Synchronizations are pretty lightweight and this add/remove/add
* scenario will hopefully not happen that much. So, we don't
* optimise for it at the moment. Re-evaluate if it does become an
* overhead.
*/
tx.registerSynchronization(new WorkSynchronization(tx));
} catch (WorkCompletedException ex) {
throw ex;
} catch (XAException ex) {
throw new WorkCompletedException(ex);
} catch (Exception ex) {
ex.printStackTrace();
throw new WorkCompletedException(jbossatxLogger.i18NLogger.get_jta_jca_unknown(), WorkException.INTERNAL);
}
}
Aggregations