package org.jboss.as.test.iiop.transaction; import java.rmi.RemoteException; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagementType; import javax.transaction.HeuristicMixedException; import javax.transaction.HeuristicRollbackException; import javax.transaction.NotSupportedException; import javax.transaction.RollbackException; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.UserTransaction; import org.junit.Assert; /** * @author Stuart Douglas */ @Stateless @TransactionManagement(TransactionManagementType.BEAN) public class ClientEjb { @Resource private UserTransaction userTransaction; private IIOPTransactionalHome home; private IIOPTransactionalStatefulHome statefulHome; public void basicTransactionPropagationTest() throws RemoteException, SystemException, NotSupportedException { final IIOPTransactionalRemote remote = home.create(); Assert.assertEquals(Status.STATUS_NO_TRANSACTION, remote.transactionStatus()); userTransaction.begin(); try { Assert.assertEquals(Status.STATUS_ACTIVE, remote.transactionStatus()); } finally { userTransaction.rollback(); } } public void testSameTransactionEachCall() throws RemoteException, SystemException, NotSupportedException { final IIOPTransactionalStatefulRemote remote = statefulHome.create(); userTransaction.begin(); try { remote.sameTransaction(true); remote.sameTransaction(false); } finally { userTransaction.rollback(); } } public void testSynchronization(final boolean succeeded) throws RemoteException, SystemException, NotSupportedException, RollbackException, HeuristicRollbackException, HeuristicMixedException { final IIOPTransactionalStatefulRemote remote = statefulHome.create(); userTransaction.begin(); try { remote.sameTransaction(true); remote.sameTransaction(false); } finally { if (succeeded) { userTransaction.commit(); } else { userTransaction.rollback(); } } Assert.assertEquals(succeeded, remote.isBeforeCompletion()); Assert.assertEquals((Boolean) succeeded, remote.getCommitSucceeded()); } public void testRollbackOnly() throws RemoteException, SystemException, NotSupportedException { final IIOPTransactionalStatefulRemote remote = statefulHome.create(); userTransaction.begin(); try { Assert.assertEquals(Status.STATUS_ACTIVE, remote.transactionStatus()); remote.rollbackOnly(); Assert.assertEquals(Status.STATUS_MARKED_ROLLBACK, remote.transactionStatus()); } finally { userTransaction.rollback(); } Assert.assertFalse(remote.isBeforeCompletion()); Assert.assertFalse(remote.getCommitSucceeded()); } public void testRollbackOnlyBeforeCompletion() throws RemoteException, SystemException, NotSupportedException, HeuristicRollbackException, HeuristicMixedException { final IIOPTransactionalStatefulRemote remote = statefulHome.create(); userTransaction.begin(); try { Assert.assertEquals(Status.STATUS_ACTIVE, remote.transactionStatus()); remote.setRollbackOnlyBeforeCompletion(true); userTransaction.commit(); } catch (RollbackException expected) { } Assert.assertFalse(remote.getCommitSucceeded()); Assert.assertEquals(Status.STATUS_NO_TRANSACTION, remote.transactionStatus()); } }