Android Open Source - DKO Reflected Data Source






From Project

Back to project page DKO.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project DKO listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.kered.dko.datasource;
/*from   ww  w  .  j ava 2s. c om*/
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Logger;

import javax.sql.DataSource;

/**
 * This class will, given a class name and a method, call that method to get an
 * actual {@code javax.sql.DataSource}.   It is then cached, and all other calls
 * are passed through.
 *
 * @author Derek Anderson
 */
public class ReflectedDataSource implements MatryoshkaDataSource {

  private static final Logger log = Logger.getLogger("org.kered.dko.ReflectedDataSource");

  DataSource ds = null;
  private final String cls;
  private final String method;
  private String schema = null;
  StackTraceElement[] st = Thread.currentThread().getStackTrace();

  public ReflectedDataSource(final String cls, final String method) {
    this.cls = cls;
    this.method = method;
  }

  public ReflectedDataSource(final String cls, final String method, final String schema) {
    this.cls = cls;
    this.method = method;
    this.schema  = schema;
  }

  private void checkDS() {
    if (ds != null) return;
    try {
      Method m = null;
      if (schema == null) {
        m = Class.forName(cls).getMethod(method);
        ds = (DataSource) m.invoke(null);
      } else {
        m = Class.forName(cls).getMethod(method, String.class);
        ds = (DataSource) m.invoke(null, schema);
      }
      //System.err.println("ds: "+ ds);
    } catch (final Exception e) {
      log.severe("could not access "+ cls +"."+ method +": "+ e.getMessage());
      throw new RuntimeException(e);
    }
    if (ds==null) throw new RuntimeException("Method "+ cls +"."+ method +" returned a null DataSource.  "
        +"ReflectedDataSource created at:\n\t\t"+ Util.join("\n\t\t", st));
  }

  @Override
  public PrintWriter getLogWriter() throws SQLException {
    checkDS();
    return ds.getLogWriter();
  }

  @Override
  public int getLoginTimeout() throws SQLException {
    checkDS();
    return ds.getLoginTimeout();
  }

  @Override
  public void setLogWriter(final PrintWriter arg0) throws SQLException {
    checkDS();
    ds.setLogWriter(arg0);
  }

  @Override
  public void setLoginTimeout(final int arg0) throws SQLException {
    checkDS();
    ds.setLoginTimeout(arg0);
  }

  @Override
  public boolean isWrapperFor(final Class<?> arg0) throws SQLException {
    checkDS();
    if (ds==null) return false;
    if (ds.getClass().equals(arg0)) return true;
    return ds.isWrapperFor(arg0);
  }

  @SuppressWarnings("unchecked")
  @Override
  public <T> T unwrap(final Class<T> arg0) throws SQLException {
    checkDS();
    if (ds.getClass().equals(arg0)) return (T) ds;
    return ds.unwrap(arg0);
  }

  @Override
  public Connection getConnection() throws SQLException {
    checkDS();
    return ds.getConnection();
  }

  @Override
  public Connection getConnection(final String arg0, final String arg1)
      throws SQLException {
    checkDS();
    return ds.getConnection(arg0, arg1);
  }

  public DataSource getUnderlyingDataSource() {
    checkDS();
    return ds;
  }

  //@Override
  public Logger getParentLogger() throws SQLFeatureNotSupportedException {
    throw new SQLFeatureNotSupportedException();
  }

  @Override
  public DataSource getPrimaryUnderlying() {
    checkDS();
    return ds;
  }

  @Override
  public Collection<DataSource> getAllUnderlying() {
    checkDS();
    final Collection<DataSource> ret = new ArrayList<DataSource>(1);
    ret.add(ds);
    return ret;
  }

}




Java Source Code List

.HelloWorld.java
org.kered.contactlensfinder.DB.java
org.kered.contactlensfinder.MainActivity.java
org.kered.contactlensfinder.ViewManufacturersActivity.java
org.kered.contactlensfinder.ViewProductsActivity.java
org.kered.contactlensfinder.ViewPropertiesActivity.java
org.kered.dko.AbstractQuery.java
org.kered.dko.Bulk.java
org.kered.dko.CSV.java
org.kered.dko.ClosableIterator.java
org.kered.dko.Condition.java
org.kered.dko.Constants.java
org.kered.dko.Context.java
org.kered.dko.DBQuery.java
org.kered.dko.DBRowIterator.java
org.kered.dko.Diff.java
org.kered.dko.DualIterator.java
org.kered.dko.Expression.java
org.kered.dko.Field.java
org.kered.dko.FilteringQuery.java
org.kered.dko.Function.java
org.kered.dko.InMemoryQuery.java
org.kered.dko.Join.java
org.kered.dko.LazyCacheIterable.java
org.kered.dko.LocalJoin.java
org.kered.dko.M.java
org.kered.dko.Main.java
org.kered.dko.MatryoshkaQuery.java
org.kered.dko.PeekableClosableIterator.java
org.kered.dko.PeekableIterator.java
org.kered.dko.QueryAddField.java
org.kered.dko.QueryFactory.java
org.kered.dko.QuerySnapshot.java
org.kered.dko.Query.java
org.kered.dko.SQLFunction.java
org.kered.dko.SelectAsMapIterable.java
org.kered.dko.SelectFromOAI.java
org.kered.dko.SelectSingleColumn.java
org.kered.dko.SoftJoinUtil.java
org.kered.dko.SoftJoin.java
org.kered.dko.SqlContext.java
org.kered.dko.Statistics.java
org.kered.dko.SubQueryField.java
org.kered.dko.TableInfo.java
org.kered.dko.TableWrapper.java
org.kered.dko.Table.java
org.kered.dko.TemporaryTableFactory.java
org.kered.dko.TmpTableBuilder.java
org.kered.dko.Tuple.java
org.kered.dko.UsageMonitor.java
org.kered.dko.UsageStats.java
org.kered.dko.Util.java
org.kered.dko.ant.ClassGenerator.java
org.kered.dko.ant.CodeGeneratorBase.java
org.kered.dko.ant.CodeGenerator.java
org.kered.dko.ant.DataSourceGenerator.java
org.kered.dko.ant.GsonGenerator.java
org.kered.dko.ant.JoinGenerator.java
org.kered.dko.ant.Main.java
org.kered.dko.ant.SchemaExtractorBase.java
org.kered.dko.ant.SchemaExtractor.java
org.kered.dko.ant.Util.java
org.kered.dko.datasource.CheapConnectionPoolingDataSource.java
org.kered.dko.datasource.ConnectionCountingDataSource.java
org.kered.dko.datasource.JDBCDriverDataSource.java
org.kered.dko.datasource.MatryoshkaDataSource.java
org.kered.dko.datasource.MirroredDataSource.java
org.kered.dko.datasource.ReflectedDataSource.java
org.kered.dko.datasource.SingleConnectionDataSource.java
org.kered.dko.datasource.SingleThreadedDataSource.java
org.kered.dko.datasource.UnClosableConnection.java
org.kered.dko.datasource.Util.java
org.kered.dko.json.CDL.java
org.kered.dko.json.CookieList.java
org.kered.dko.json.Cookie.java
org.kered.dko.json.HTTPTokener.java
org.kered.dko.json.HTTP.java
org.kered.dko.json.JSONArray.java
org.kered.dko.json.JSONException.java
org.kered.dko.json.JSONML.java
org.kered.dko.json.JSONObject.java
org.kered.dko.json.JSONString.java
org.kered.dko.json.JSONStringer.java
org.kered.dko.json.JSONTokener.java
org.kered.dko.json.JSONWriter.java
org.kered.dko.json.Pickle.java
org.kered.dko.json.XMLTokener.java
org.kered.dko.json.XML.java
org.kered.dko.junk.DerbyLoadTestSchema.java
org.kered.dko.junk.OracleCreateTestUser.java
org.kered.dko.junk.OracleLoadTestSchema.java
org.kered.dko.persistence.Util.java
org.kered.dko.util.DumpDatabase.java
sakila.Example0.java
sakila.Example1.java
sakila.Example2.java
sakila.Util.java