Package org.teiid.test.framework.transaction

Source Code of org.teiid.test.framework.transaction.StandaloneGlobalTransaction

/*
* Copyright (c) 2000-2007 MetaMatrix, Inc.
* All rights reserved.
*/
package org.teiid.test.framework.transaction;

import java.util.Random;

import javax.transaction.xa.XAResource;

import org.teiid.client.xa.XidImpl;
import org.teiid.test.framework.TransactionContainer;
import org.teiid.test.framework.TransactionQueryTestCase;
import org.teiid.test.framework.exception.TransactionRuntimeException;


public class StandaloneGlobalTransaction extends TransactionContainer {
  private static Random RANDOM = new Random();
  private XidImpl xid;
 
    public StandaloneGlobalTransaction() {
        super();
    }
       
    @Override
    protected void before(TransactionQueryTestCase test) {
        try {         
          xid = createXid();
          XAResource xaResource = test.getConnectionStrategy().getXAConnection().getXAResource();
           xaResource.setTransactionTimeout(120);
          xaResource.start(xid, XAResource.TMNOFLAGS);
        } catch (Exception e) {
            throw new TransactionRuntimeException(e);
        }       
    }

  public static XidImpl createXid() {
    byte[] gid = new byte[10];
    byte[] bid = new byte[10];
    RANDOM.nextBytes(gid);
    RANDOM.nextBytes(bid);
    return new XidImpl(0, gid, bid);
  }
   
    @Override
    protected void after(TransactionQueryTestCase test) {
        boolean delistSuccessful = false;
        boolean commit = false;
        try {
            XAResource xaResource = test.getConnectionStrategy().getXAConnection().getXAResource();
           
      xaResource.end(xid, XAResource.TMSUCCESS);
           
            if (!test.exceptionExpected() && xaResource.prepare(xid) == XAResource.XA_OK) {
              commit = true;
            }
            delistSuccessful = true;
        } catch (Exception e) {
            throw new TransactionRuntimeException(e);           
        } finally {
            try {
                if (!delistSuccessful || test.rollbackAllways()|| test.exceptionOccurred()) {
                    test.getConnectionStrategy().getXAConnection().getXAResource().rollback(xid);
                 }
                else if (commit) {
                    test.getConnectionStrategy().getXAConnection().getXAResource().commit(xid, true);
                }           
            } catch (Exception e) {
                throw new TransactionRuntimeException(e);           
            }
        }
    }   
}
TOP

Related Classes of org.teiid.test.framework.transaction.StandaloneGlobalTransaction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.