@Override public int prepare(Xid xid) throws XAException { return contextXATerminator.prepare(xid); }
/** * @see javax.resource.spi.XATerminator */ public int prepare(Xid xid) throws XAException { return xat.prepare(xid); }
@Override public int prepare(Xid xid) throws XAException { return contextXATerminator.prepare(xid); }
@Override public int prepare(Xid xid) throws XAException { return contextXATerminator.prepare(xid); }
private Vote prepareSubordinate() { final InboundBridge inboundBridge = getInboundBridge(); int prepareResult = -1; try { if (inboundBridge != null) { prepareResult = SubordinationManager.getXATerminator().prepare(inboundBridge.getXid()); } } catch (XAException e) { } return prepareResultToVote(prepareResult); }
/** * Global Transaction */ public int prepare(final String threadId, XidImpl xid, boolean singleTM) throws XATransactionException { TransactionContext tc = checkXAState(threadId, xid, true, false); if (!tc.getSuspendedBy().isEmpty()) { throw new XATransactionException(QueryPlugin.Event.TEIID30505, XAException.XAER_PROTO, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30505, xid)); } // In the container this pass though if (singleTM) { return XAResource.XA_RDONLY; } try { return this.xaTerminator.prepare(tc.getXid()); } catch (XAException e) { throw new XATransactionException(QueryPlugin.Event.TEIID30506, e); } }
int result = xaTerminator.prepare(xid); if(result == XAResource.XA_OK)
@Test public void testTwoPhaseCommitSyncViaXATerminator() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); assertEquals(XAResource.XA_RDONLY, xaTerminator.prepare(xid)); // don't call commit for read only case assertTrue(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus()); }
@Test public void testTwoPhaseCommitSyncViaXATerminatorWithSeparateSync() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions)xaTerminator; xaTerminatorExtensions.beforeCompletion(xid); assertEquals(XAResource.XA_RDONLY, xaTerminator.prepare(xid)); // don't call commit for read only case assertTrue(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus()); }
@Test public void testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminator() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); t.setRollbackOnly(); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); try { xaTerminator.prepare(xid); } catch(XAException e) { assertEquals(XAException.XA_RBROLLBACK, e.errorCode); // expected - we tried to prepare a rollbackonly tx. } // no need to call rollback - the XA_RBROLLBACK code indicates its been done. assertFalse(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_ROLLEDBACK, t.getStatus()); }
@Test public void testTwoPhaseCommitSyncWithXAOKViaXATerminator() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); final TestXAResource xaResource = new TestXAResource(); xaResource.setPrepareReturnValue(XAResource.XA_OK); t.enlistResource(xaResource); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); assertEquals(XAResource.XA_OK, xaTerminator.prepare(xid)); xaTerminator.commit(xid, false); assertTrue(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus()); }
@Test public void testTwoPhaseCommitSyncWithRollbackOnlyViaXATerminatorWithSeparateSync() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); t.setRollbackOnly(); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions)xaTerminator; xaTerminatorExtensions.beforeCompletion(xid); try { xaTerminator.prepare(xid); } catch(XAException e) { assertEquals(XAException.XA_RBROLLBACK, e.errorCode); // expected - we tried to prepare a rollbackonly tx. } // no need to call rollback - the XA_RBROLLBACK code indicates its been done. assertTrue(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_ROLLEDBACK, t.getStatus()); }
@Test public void testTwoPhaseCommitSyncWithXAOKViaXATerminatorWithSeparateSync() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestSynchronization sync = new TestSynchronization(); t.registerSynchronization(sync); final TestXAResource xaResource = new TestXAResource(); xaResource.setPrepareReturnValue(XAResource.XA_OK); t.enlistResource(xaResource); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); final XATerminatorExtensions xaTerminatorExtensions = (XATerminatorExtensions)xaTerminator; xaTerminatorExtensions.beforeCompletion(xid); assertEquals(XAResource.XA_OK, xaTerminator.prepare(xid)); xaTerminator.commit(xid, false); assertTrue(sync.isBeforeCompletionDone()); assertTrue(sync.isAfterCompletionDone()); assertEquals(javax.transaction.Status.STATUS_COMMITTED, t.getStatus()); }
@Test public void testFailOnCommit() throws Exception { final Xid xid = new XidImple(new Uid()); final Transaction t = SubordinationManager.getTransactionImporter().importTransaction(xid); final TestXAResource xaResource = new TestXAResource(); // provoke commit into failing with TwoPhaseOutcome.FINISH_ERROR // warning: this is sensitive to the impl exception handling in // XAResourceRecord.topLevelCommit xaResource.setCommitException(new XAException(XAException.XA_HEURHAZ)); // throw a little spice into things! t.enlistResource(xaResource); final XATerminator xaTerminator = SubordinationManager.getXATerminator(); try { xaTerminator.prepare(xid); xaTerminator.commit(xid, false); } catch (final XAException ex) { // success!! return; } assertTrue("commit should throw an exception and not get to here", false); }
xaTerminator.recover(XAResource.TMENDRSCAN); xaTerminator.prepare(xid);