/* * Copyright (c) 2000-2007 MetaMatrix, Inc. * All rights reserved. */ package org.teiid.test.framework.transaction; import java.sql.SQLException; import org.teiid.test.framework.TransactionContainer; import org.teiid.test.framework.TransactionQueryTestCase; import org.teiid.test.framework.ConfigPropertyNames.CONNECTION_STRATEGY_PROPS; import org.teiid.test.framework.ConfigPropertyNames.TXN_AUTO_WRAP_OPTIONS; import org.teiid.test.framework.exception.TransactionRuntimeException; /** * A transaction which is user controlled. */ @SuppressWarnings("nls") public class LocalTransaction extends TransactionContainer { public LocalTransaction() { super(); } protected void before(TransactionQueryTestCase test) { test.getConnectionStrategy().setEnvironmentProperty(CONNECTION_STRATEGY_PROPS.TXN_AUTO_WRAP, TXN_AUTO_WRAP_OPTIONS.AUTO_WRAP_OFF); try { debug("Autocommit: " + test.getConnectionStrategy().getAutocommit()); test.getConnection().setAutoCommit(test.getConnectionStrategy().getAutocommit()); } catch (SQLException e) { throw new TransactionRuntimeException(e); } } protected void after(TransactionQueryTestCase test) { boolean exception = false; try { if (test.rollbackAllways()|| test.exceptionOccurred()) { test.getConnection().rollback(); } else { test.getConnection().commit(); } } catch (SQLException se) { se.printStackTrace(); exception = true; // if exception, try to trigger the rollback try { test.getConnection().rollback(); } catch (Exception e) { // do nothing } throw new TransactionRuntimeException(se); } finally { // if an exception occurs and the autocommit is set to true - while doing a transaction // will generate a new exception overriding the first exception if (!exception) { try { test.getConnection().setAutoCommit(true); } catch (SQLException e) { throw new TransactionRuntimeException(e); } } } } }