Package org.teiid.test.framework.connection

Source Code of org.teiid.test.framework.connection.DataSourceConnection

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

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;
import javax.sql.XAConnection;
import javax.sql.XADataSource;

import org.teiid.core.util.PropertiesUtils;
import org.teiid.jdbc.BaseDataSource;
import org.teiid.jdbc.TeiidDataSource;
import org.teiid.test.framework.TestLogger;
import org.teiid.test.framework.exception.QueryTestFailedException;
import org.teiid.test.framework.exception.TransactionRuntimeException;


public class DataSourceConnection extends ConnectionStrategy {

    public static final String DS_USER = "user"; //$NON-NLS-1$

    // need both user variables because Teiid uses 'user' and connectors use
    // 'username'
    public static final String DS_USERNAME = "User"; //$NON-NLS-1$
    public static final String DS_PASSWORD = "Password"; //$NON-NLS-1$

    // the driver is only used for making direct connections to the source, the
    // connector type will provide the JDBCPropertyNames.CONNECTION_SOURCE
    // driver class
    public static final String DS_DRIVER = "driver"; //$NON-NLS-1$
   
    public static final String DS_DATASOURCE = "datasource"; //$NON-NLS-1$


    public static final String DS_SERVERNAME = "ServerName"; //$NON-NLS-1$
    public static final String DS_SERVERPORT = "PortNumber"; //$NON-NLS-1$
    public static final String DS_JNDINAME = "ds-jndiname"; //$NON-NLS-1$
    public static final String DS_DATABASENAME = "DatabaseName"; //$NON-NLS-1$
    public static final String DS_APPLICATION_NAME = "application-name"; //$NON-NLS-1$
    public static final String DS_URL = "URL"; //$NON-NLS-1$

    private String driver = null;
    private String username = null;
    private String pwd = null;
    private String applName = null;
    private String databaseName = null;
    private String serverName = null;
    private String portNumber = null;
    private String url = null;

    private XAConnection xaConnection;

    public DataSourceConnection(Properties props) throws QueryTestFailedException {
  super(props);
    }

    public void validate() {
  databaseName = this.getEnvironment().getProperty(DS_DATABASENAME);
  if (databaseName == null || databaseName.length() == 0) {
      throw new TransactionRuntimeException("Property " + DS_DATABASENAME
        + " was not specified");
  }

  serverName = this.getEnvironment().getProperty(DS_SERVERNAME);
  if (serverName == null || serverName.length() == 0) {
      throw new TransactionRuntimeException("Property " + DS_SERVERNAME
        + " was not specified");
  }

  this.portNumber = this.getEnvironment().getProperty(DS_SERVERPORT);

  this.applName = this.getEnvironment().getProperty(DS_APPLICATION_NAME);

  if (this.getEnvironment().getProperty(DS_DATASOURCE) != null) {
              this.driver = this.getEnvironment().getProperty(DS_DATASOURCE);
          if (this.driver == null || this.driver.length() == 0) {
              throw new TransactionRuntimeException("Property " + DS_DATASOURCE
                + " was null");
          }
     
  } else {
          this.driver = this.getEnvironment().getProperty(DS_DRIVER);
          if (this.driver == null || this.driver.length() == 0) {
              throw new TransactionRuntimeException("Property " + DS_DRIVER
                + " was not specified");
          }
  }
 
  this.url = this.getEnvironment().getProperty(DS_URL);

  this.username = this.getEnvironment().getProperty(DS_USER);
  if (username == null) {
      this.username = this.getEnvironment().getProperty(DS_USERNAME);
  }
  this.pwd = this.getEnvironment().getProperty(DS_PASSWORD);

    }

    @Override
    public Connection getConnection() throws QueryTestFailedException {
  try {
    return getXAConnection().getConnection();   
  } catch (QueryTestFailedException qtf) {
      throw qtf;
  } catch (Exception e) {
      e.printStackTrace();
      throw new QueryTestFailedException(e);
  }
    }

    @Override
    public synchronized XAConnection getXAConnection()
      throws QueryTestFailedException {
  if (xaConnection == null) {
      validate();
      try {
    xaConnection = createConnection();
      } catch (Exception e) {
    throw new QueryTestFailedException(e);
      }
  }
  return xaConnection;
    }

  private XAConnection createConnection() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
   
    TestLogger.log("Creating Datasource Connection: \"" + this.serverName + " - " + this.databaseName + "\""); //$NON-NLS-1$ //$NON-NLS-2$

    DataSource ds = (DataSource) Class.forName(this.driver).newInstance();

    if (ds instanceof BaseDataSource) {

      BaseDataSource dataSource = (BaseDataSource) ds;

      dataSource.setDatabaseName(this.databaseName);
      if (this.applName != null) {
        dataSource.setApplicationName(this.applName);
      }

      ((TeiidDataSource) dataSource).setServerName(this.serverName);
      ((TeiidDataSource) dataSource).setPortNumber(Integer.parseInt(this.portNumber));

      if (this.username != null) {
        dataSource.setUser(this.username);
        dataSource.setPassword(this.pwd);
      }

      return ((XADataSource) dataSource).getXAConnection(this.username,
          this.pwd);
    }
    Properties props = new Properties();
    props.setProperty(DS_DATABASENAME, this.databaseName);
    props.setProperty(DS_SERVERPORT, this.portNumber);
    props.setProperty(DS_URL, this.url);
    props.setProperty(DS_SERVERNAME, this.serverName);
    if (this.username != null) {
      props.setProperty(DS_USERNAME, this.username);
      props.setProperty(DS_USER, this.username);
      props.setProperty(DS_PASSWORD, this.pwd);
    }

    PropertiesUtils.setBeanProperties(ds, props, null);
    return ((XADataSource) ds).getXAConnection();
  }

  public void shutdown() {
    super.shutdown();
    try {

      if (this.xaConnection != null) {
        this.xaConnection.close();
      }
    } catch (Exception e) {
      // ignore..
    }
    this.xaConnection = null;
  }
}
TOP

Related Classes of org.teiid.test.framework.connection.DataSourceConnection

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.