package com.hp.mwtests.ts.jta.basic;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
import javax.transaction.Synchronization;
import javax.transaction.SystemException;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import org.junit.Test;
import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple;
public class EnlistResourceDuringCommit {
@Test
public void testEnlistResourceDuringBeforeCompletion()
throws IllegalStateException, RollbackException, SystemException,
SecurityException, HeuristicMixedException,
HeuristicRollbackException {
final TransactionImple tx = new TransactionImple(0);
tx.registerSynchronization(new Synchronization() {
@Override
public void beforeCompletion() {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
try {
tx.enlistResource(new XAResource() {
@Override
public void start(Xid arg0, int arg1)
throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
@Override
public boolean setTransactionTimeout(int arg0)
throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
return false;
}
@Override
public void rollback(Xid arg0) throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
@Override
public Xid[] recover(int arg0) throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
return null;
}
@Override
public int prepare(Xid arg0) throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
return 0;
}
@Override
public boolean isSameRM(XAResource arg0)
throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
return false;
}
@Override
public int getTransactionTimeout() throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
return 0;
}
@Override
public void forget(Xid arg0) throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
@Override
public void end(Xid arg0, int arg1) throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
@Override
public void commit(Xid arg0, boolean arg1)
throws XAException {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
});
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void afterCompletion(int status) {
System.out.println(new Throwable().getStackTrace()[0]
.getMethodName());
}
});
tx.commit();
}
}