Package org.teiid.test.framework.connection

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

/*
* 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.sql.XAConnection;

import org.teiid.core.util.PropertiesUtils;
import org.teiid.test.framework.ConfigPropertyLoader;
import org.teiid.test.framework.datasource.DataSource;
import org.teiid.test.framework.datasource.DataSourceMgr;
import org.teiid.test.framework.datasource.DataStore;
import org.teiid.test.framework.exception.QueryTestFailedException;
import org.teiid.test.framework.exception.TransactionRuntimeException;


public abstract class ConnectionStrategy {

    private Properties env = null;
    // private DataSourceFactory dsFactory;
    // the useProxy is used for non-teiid connections so that the sources are
    // closed and reconnected all the time
    private boolean useProxy = false;

    public ConnectionStrategy(Properties props) {
  this.env = PropertiesUtils.clone(props);

    }

    /*
     * Lifecycle methods for managing the connection
     */

    /**
     * Returns a connection
     *
     * @return Connection
     * @throws QueryTestFailedException
     */
    public abstract Connection getConnection() throws QueryTestFailedException;

    public boolean useProxy() {
  return this.useProxy;
    }

    void setUseProxy(boolean useproxy) {
  this.useProxy = useproxy;
    }

    /**
     * @since
     */
    public void shutdown() {

    }

    /**
     * @throws QueryTestFailedException 
     */
    public Connection getAdminConnection() throws QueryTestFailedException {
  return null;
    }

    private boolean autoCommit;

    public boolean getAutocommit() {
  return autoCommit;
    }

    /**
     * @throws QueryTestFailedException 
     */
    public XAConnection getXAConnection() throws QueryTestFailedException {
  return null;
    }

    /**
     * In certain testcases, the data that being provided is already
     * preconfigured and should not be touched by the {@link DataStore}
     * processing.
     *
     * @return
     */
    public boolean isDataStoreDisabled() {
  return ConfigPropertyLoader.getInstance().isDataStoreDisabled();
    }

    public Properties getEnvironment() {
  return env;
    }

    public void setEnvironmentProperty(String key, String value) {
  this.env.setProperty(key, value);
    }

    /**
     * @throws QueryTestFailedException 
     */
    void configure() throws QueryTestFailedException {
//
//  if (this.isDataStoreDisabled()) {
//      return;
//  } else {
//     
//   // commenting out until embedded testing is made available and its required to configure
//   // the vdb and bindings in this mannder
//
//      if (true)
//    return;
//  }
//
//  try {
//      // the the driver strategy is going to be used to connection
//      // directly to the connector binding
//      // source, then no administration can be done
//      Admin admin = AdminFactory.getInstance().createAdmin(
//        this.env.getProperty("admin.user"),
//        this.env.getProperty("admin.password").toCharArray(),
//        this.env.getProperty("admin.url"));
//
//      java.sql.Connection conn = getConnection();
//
//      if (!(conn instanceof ConnectionImpl)) {
//    TestLogger
//      .log("ConnectionStrategy configuration:  connection is not of type MMConnection and therefore no vdb setup will be performed");
//    return;
//      }
//     
//         
//      // setupVDBConnectorBindings(admin);
//
//      // admin.restart();
//
//      int sleep = 5;
//
//      TestLogger.log("Bouncing the system..(wait " + sleep + " seconds)"); //$NON-NLS-1$
//      Thread.sleep(1000 * sleep);
//      TestLogger.log("done."); //$NON-NLS-1$
//
//  } catch (Throwable e) {
//      e.printStackTrace();
//
//      throw new TransactionRuntimeException(e.getMessage());
//  } finally {
//      // need to close and flush the connection after restarting
//      // this.shutdown();
//
//  }
    }

    // protected void setupVDBConnectorBindings(Admin api) throws
    // QueryTestFailedException {
    //        
    // try {
    //         
    // VDB vdb = null;
    // Set<VDB> vdbs = api.getVDBs();
    // if (vdbs == null || vdbs.isEmpty()) {
    // throw new QueryTestFailedException(
    // "AdminApi.GetVDBS returned no vdbs available");
    // }
    //
    // String urlString = this.env.getProperty(DriverConnection.DS_URL);
    // JDBCURL url = new JDBCURL(urlString);
    // TestLogger.logDebug("Trying to match VDB : " + url.getVDBName());
    //
    // for (Iterator<VDB> iterator = vdbs.iterator(); iterator.hasNext();) {
    // VDB v = (VDB) iterator.next();
    // if (v.getName().equalsIgnoreCase(url.getVDBName())) {
    // vdb = v;
    // }
    //
    // }
    // if (vdbs == null) {
    // throw new QueryTestFailedException(
    // "GetVDBS did not return a vdb that matched "
    // + url.getVDBName());
    // }
    //           
    // List<Model> models = vdb.getModels();
    // Iterator<Model> modelIt = models.iterator();
    // while (modelIt.hasNext()) {
    // Model m = modelIt.next();
    //
    // if (!m.isSource())
    // continue;
    //
    // // get the mapping, if defined
    // String mappedName = this.env.getProperty(m.getName());
    //
    // String useName = m.getName();
    // if (mappedName != null) {
    // useName = mappedName;
    // }
    //
    // org.teiid.test.framework.datasource.DataSource ds =
    // this.dsFactory.getDatasource(useName, m.getName());
    //
    // if (ds != null) {
    //
    //        TestLogger.logInfo("Set up Connector Binding (model:mapping:type): " + m.getName() + ":" + useName + ":" + ds.getConnectorType()); //$NON-NLS-1$
    //
    // api.addConnectorBinding(ds.getName(),ds.getConnectorType(),
    // ds.getProperties());
    //
    // api.assignBindingToModel(vdb.getName(), vdb.getVersion(), m.getName(),
    // ds.getName(), ds.getProperty("jndi-name"));
    //
    // api.startConnectorBinding(api.getConnectorBinding(ds.getName()));
    // } else {
    // throw new QueryTestFailedException(
    // "Error: Unable to create binding to map to model : "
    // + m.getName() + ", the mapped name "
    // + useName
    // + " had no datasource properties defined");
    // }
    //
    // }
    //       
    // } catch (QueryTestFailedException qt) {
    // throw qt;
    // } catch (Exception t) {
    // t.printStackTrace();
    // throw new QueryTestFailedException(t);
    // }
    //
    //     
    // }

    public synchronized Connection createDriverConnection(String identifier)
      throws QueryTestFailedException {

  DataSource ds = null;
  if (identifier != null) {
      ds = DataSourceMgr.getInstance().getDataSource(identifier);
  }
  if (ds == null) {
      throw new TransactionRuntimeException(
        "Program Error: DataSource is not mapped to Identifier "
          + identifier);
  }

  Connection conn = ds.getConnection();

  if (conn != null)
      return conn;

  ConnectionStrategy cs = null;
  if (identifier == null) {
      cs = new DriverConnection(ds.getProperties());

  } else {
      cs = new DriverConnection(ds.getProperties());
  }

//  conn = cs.getConnection();
//
//  conn = (Connection) Proxy.newProxyInstance(Thread.currentThread()
//    .getContextClassLoader(),
//    new Class[] { java.sql.Connection.class },
//    new CloseInterceptor(conn));

  ds.setConnection(cs.getConnection());

  return ds.getConnection();

    }

    public synchronized XAConnection createDataSourceConnection(
      String identifier) throws QueryTestFailedException {

  DataSource ds = null;
  if (identifier != null) {
      ds = DataSourceMgr.getInstance().getDataSource(identifier);
  }
  if (ds == null) {
      throw new TransactionRuntimeException(
        "Program Error: DataSource is not mapped to Identifier "
          + identifier);
  }

  XAConnection conn = ds.getXAConnection();

  if (conn != null)
      return conn;

  ConnectionStrategy cs = null;
  if (identifier == null) {
      cs = new DataSourceConnection(ds.getProperties());
  } else {
      cs = new DataSourceConnection(ds.getProperties());
  }

//  conn = cs.getXAConnection();
//
//  conn = (XAConnection) Proxy.newProxyInstance(Thread.currentThread()
//    .getContextClassLoader(),
//    new Class[] { javax.sql.XAConnection.class },
//    new CloseInterceptor(conn));

  ds.setXAConnection(cs.getXAConnection());

  return ds.getXAConnection();

    }

//    class CloseInterceptor implements InvocationHandler {
//
//  Connection conn;
//  XAConnection xaconn;
//
//  CloseInterceptor(Object conn) {
//      if (conn instanceof Connection) {
//    this.conn = (Connection) conn;
//      } else {
//    this.xaconn = (XAConnection) conn;
//      }
//  }
//
//  public Object invoke(Object proxy, Method method, Object[] args)
//    throws Throwable {
//      if (method.getName().equals("close")) { //$NON-NLS-1$
//    return null;
//      }
//      try {
//    return method.invoke(this.conn, args);
//      } catch (InvocationTargetException e) {
//    throw e.getTargetException();
//      }
//  }
//    }

}
TOP

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

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.