/*
* Copyright (c) 2000-2007 MetaMatrix, Inc.
* All rights reserved.
*/
package org.teiid.test.framework.connection;
import java.sql.Connection;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.teiid.test.framework.exception.QueryTestFailedException;
import org.teiid.test.framework.exception.TransactionRuntimeException;
/**
* JEE (JNDI) Connection Strategy, when the test is run inside an application
* server. Make sure all the jndi names are set correctly in the properties
* file.
*/
@SuppressWarnings("nls")
public class JEEConnection extends ConnectionStrategy {
public static final String DS_JNDINAME = "ds-jndiname"; //$NON-NLS-1$
private String jndi_name = null;
public JEEConnection(Properties props) throws QueryTestFailedException {
super(props);
}
public Connection getConnection() throws QueryTestFailedException {
validate();
try {
InitialContext ctx = new InitialContext();
DataSource source = (DataSource) ctx.lookup(jndi_name);
if (source == null) {
String msg = "Unable to find jndi source " + jndi_name;//$NON-NLS-1$
QueryTestFailedException mme = new QueryTestFailedException(msg);//$NON-NLS-1$
throw mme;
}
Connection conn = source.getConnection();
return conn;
} catch (QueryTestFailedException qtfe) {
throw qtfe;
} catch (Exception e) {
throw new QueryTestFailedException(e);
}
}
public void shutdown() {
super.shutdown();
// no connection management here; app server takes care of these..
}
public void validate() {
// TODO Auto-generated method stub
jndi_name = getEnvironment().getProperty(DS_JNDINAME);
if (jndi_name == null || jndi_name.length() == 0) {
throw new TransactionRuntimeException("Property " + DS_JNDINAME
+ " was not specified");
}
}
}