Example usage for javax.transaction.xa XAResource end

List of usage examples for javax.transaction.xa XAResource end

Introduction

In this page you can find the example usage for javax.transaction.xa XAResource end.

Prototype

void end(Xid xid, int flags) throws XAException;

Source Link

Document

Ends the work performed on behalf of a transaction branch.

Usage

From source file:org.nuxeo.ecm.core.storage.sql.TestSQLBackend.java

protected static void rollback(Session session, Xid xid) throws XAException {
    XAResource xaresource = ((SessionImpl) session).getXAResource();
    boolean rollback = true;
    try {/*from   w ww  .  j av a  2  s.  c  o m*/
        xaresource.end(xid, XAResource.TMFAIL);
    } catch (XAException e) {
        if (e.errorCode == XAException.XA_RBROLLBACK // Derby
                || e.errorCode == XAException.XA_RBDEADLOCK // Derby
                || e.getMessage().startsWith("XA_RBDEADLOCK") // MySQL
        ) {
            rollback = false;
        } else {
            throw e;
        }
    }
    if (rollback) {
        xaresource.rollback(xid);
    }
}

From source file:org.nuxeo.ecm.core.storage.sql.TestSQLBackend.java

@Test
public void testRollback() throws Exception {
    if (!DatabaseHelper.DATABASE.supportsXA()) {
        return;//from  ww w  .jav  a  2  s . c om
    }

    Session session = repository.getConnection();
    XAResource xaresource = ((SessionImpl) session).getXAResource();
    Node root = session.getRootNode();
    Node nodea = session.addChildNode(root, "foo", null, "TestDoc", false);
    nodea.setSimpleProperty("tst:title", "old");
    assertEquals("old", nodea.getSimpleProperty("tst:title").getString());
    session.save();

    /*
     * rollback before save (underlying XAResource saw no updates)
     */
    Xid xid = new XidImpl("11111111111111111111111111111111");
    xaresource.start(xid, XAResource.TMNOFLAGS);
    nodea = session.getNodeByPath("/foo", null);
    nodea.setSimpleProperty("tst:title", "new");
    xaresource.end(xid, XAResource.TMSUCCESS);
    xaresource.prepare(xid);
    xaresource.rollback(xid);
    nodea = session.getNodeByPath("/foo", null);
    assertEquals("old", nodea.getSimpleProperty("tst:title").getString());

    /*
     * rollback after save (underlying XAResource does a rollback too)
     */
    xid = new XidImpl("22222222222222222222222222222222");
    xaresource.start(xid, XAResource.TMNOFLAGS);
    nodea = session.getNodeByPath("/foo", null);
    nodea.setSimpleProperty("tst:title", "new");
    session.save();
    xaresource.end(xid, XAResource.TMSUCCESS);
    xaresource.prepare(xid);
    xaresource.rollback(xid);
    nodea = session.getNodeByPath("/foo", null);
    assertEquals("old", nodea.getSimpleProperty("tst:title").getString());
}

From source file:org.nuxeo.ecm.core.storage.sql.TestSQLBackend.java

@Test
public void testSaveOnCommit() throws Exception {
    if (!DatabaseHelper.DATABASE.supportsXA()) {
        return;//from ww  w.  j av a 2  s  .co m
    }

    Session session = repository.getConnection(); // init
    session.save();

    XAResource xaresource = ((SessionImpl) session).getXAResource();

    // first transaction
    Xid xid = new XidImpl("11111111111111111111111111111111");
    xaresource.start(xid, XAResource.TMNOFLAGS);
    Node root = session.getRootNode();
    assertNotNull(root);
    session.addChildNode(root, "foo", null, "TestDoc", false);
    // let end do an implicit save
    xaresource.end(xid, XAResource.TMSUCCESS);
    xaresource.prepare(xid);
    xaresource.commit(xid, false);

    // should have saved, clearing caches should be harmless
    ((SessionImpl) session).clearCaches();

    // second transaction
    xid = new XidImpl("22222222222222222222222222222222");
    xaresource.start(xid, XAResource.TMNOFLAGS);
    Node foo = session.getNodeByPath("/foo", null);
    assertNotNull(foo);
    xaresource.end(xid, XAResource.TMSUCCESS);
    int outcome = xaresource.prepare(xid);
    if (outcome == XAResource.XA_OK) {
        // Derby doesn't allow rollback if prepare returned XA_RDONLY
        xaresource.rollback(xid);
    }
}

From source file:org.seasar.karrta.jcr.intercepter.JcrTransactionInterceptor.java

public Object invoke(MethodInvocation invocation) throws Throwable {
    Thread currentThread = Thread.currentThread();
    if (this.sessionManager_.isExist(currentThread)) {
        return invocation.proceed();
    }//from w ww .  ja  va  2  s.  com

    logger_.debug("::: [Begin Transaction] ::: [" + currentThread + "] :::");

    // check in jcr-session.
    XASession session = (XASession) sessionManager_.borrowObject(currentThread);
    Xid xid = new Xid() {
        public byte[] getBranchQualifier() {
            return new byte[0];
        }

        public int getFormatId() {
            return 0;
        }

        public byte[] getGlobalTransactionId() {
            return new byte[0];
        }
    };
    XAResource xares = session.getXAResource();
    xares.start(xid, XAResource.TMNOFLAGS);

    Object result = null;
    try {
        for (Method m : invocation.getThis().getClass().getMethods()) {
            if ("setOcmQueryManager".equals(m.getName())) {
                m.invoke(invocation.getThis(), this.ocmFactory.getQueryManager());
            }
            if ("setQueryManager".equals(m.getName())) {
                m.invoke(invocation.getThis(), session.getWorkspace().getQueryManager());
            }
        }
        result = invocation.proceed();

        xares.end(xid, XAResource.TMSUCCESS);
        xares.prepare(xid);
        xares.commit(xid, false);

    } catch (Exception e) {
        e.printStackTrace();
        xares.rollback(xid);

    } finally {
        // check out jcr-session.
        this.sessionManager_.returnSession(currentThread, session);
        logger_.debug("::: [End Transaction] ::: [" + currentThread + "] :::");
    }
    return result;
}