JTA Service

The TransactionTestCase gets the UserTransaction service and registers a transactional user object (i.e. one that implements Synchronization ) with the TransactionManager service. It then verifies that modifications on the user object are transactional.

This functionality is only available in the context of AS7.

Transactional txObj = new Transactional();

ServiceReference userTxRef = context.getServiceReference(UserTransaction.class.getName());
assertNotNull("UserTransaction service not null", userTxRef);

UserTransaction userTx = (UserTransaction)context.getService(userTxRef);
assertNotNull("UserTransaction not null", userTx);

userTx.begin();
try
{
   ServiceReference tmRef = context.getServiceReference(TransactionManager.class.getName());
   assertNotNull("TransactionManager service not null", tmRef);
   
   TransactionManager tm = (TransactionManager)context.getService(tmRef);
   assertNotNull("TransactionManager not null", tm);
   
   Transaction tx = tm.getTransaction();
   assertNotNull("Transaction not null", tx);
   
   tx.registerSynchronization(txObj);
   
   txObj.setMessage("Donate $1.000.000");
   assertNull("Uncommited message null", txObj.getMessage());
   
   userTx.commit();
}
catch (Exception e)
{
   userTx.setRollbackOnly();
}

assertEquals("Donate $1.000.000", txObj.getMessage());
class Transactional implements Synchronization
{
  public void afterCompletion(int status)
  {
     if (status == Status.STATUS_COMMITTED)
        message = volatileMessage;
  }
  
  ...      
}

Transaction support in AS7

The related services are provided by default in AS7. The transaction APIs are provided by this capability.

<capability name="javax.transaction.api"/>