/*
* Copyright (c) 2000-2007 MetaMatrix, Inc.
* All rights reserved.
*/
package org.teiid.test.framework.transaction;
import javax.naming.InitialContext;
import javax.transaction.UserTransaction;
import org.teiid.test.framework.ConfigPropertyNames;
import org.teiid.test.framework.TransactionContainer;
import org.teiid.test.framework.TransactionQueryTestCase;
import org.teiid.test.framework.exception.TransactionRuntimeException;
@SuppressWarnings("nls")
public class JNDITransaction extends TransactionContainer {
UserTransaction userTxn = null;
public JNDITransaction() {
super();
}
protected void before(TransactionQueryTestCase test) {
String jndi = test.getConnectionStrategy().getEnvironment().getProperty(ConfigPropertyNames.CONNECTION_STRATEGY_PROPS.JNDINAME_USERTXN);
if (jndi == null) {
throw new TransactionRuntimeException("No JNDI name found for the User Transaction to look up in application server");
}
try {
// begin the transaction
InitialContext ctx = new InitialContext();
this.userTxn = (UserTransaction)ctx.lookup(jndi);
this.userTxn.begin();
} catch (Exception e) {
throw new TransactionRuntimeException(e);
}
}
protected void after(TransactionQueryTestCase test) {
try {
if (this.userTxn != null) {
if (test.rollbackAllways()|| test.exceptionOccurred()) {
this.userTxn.rollback();
}
else {
this.userTxn.commit();
}
this.userTxn = null;
}
} catch (Exception e) {
throw new TransactionRuntimeException(e);
}
}
}