Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  // Copyright 2008 Google Inc.
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  // http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
 package com.google.gwtorm.jdbc;
 
 import java.io.File;
 import java.net.URL;
 import java.util.List;
 
A simple non-pooling DataSource representation.
 
 public class SimpleDataSource implements DataSource {
   private final Properties connectionInfo;
   private final String url;
   private final Driver driver;
   private PrintWriter logWriter;

  
Create a non-pooling data source.

The JDBC properties information must define at least url and driver, but may also include driver specific properties such as username and password.

Parameters:
dbInfo JDBC connection information. The property table is copied.
Throws:
java.sql.SQLException the driver class is not available through the current class loader.
 
   public SimpleDataSource(final Properties dbInfothrows SQLException {
      = new Properties();
     .putAll(dbInfo);
 
      = (String.remove("url");
     if ( == null) {
       throw new SQLException("Required property 'url' not defined");
     }
 
     final String driverName = (String.remove("driver");
     final String classpath = (String.remove("classpath");
     if (driverName != null) {
       ClassLoader cl = threadCL();
       if (classpath != null && classpath.length() > 0) {
         final List<URLurls = new ArrayList<URL>();
         for (final String path : classpath.split(.)) {
           try {
             urls.add(new URL(path));
           } catch (MalformedURLException e1) {
             final File f = new File(path);
             if (f.exists()) {
               try {
                 urls.add(f.getAbsoluteFile().toURI().toURL());
               } catch (MalformedURLException e2) {
                 throw badClasspath(classpathe2);
               }
             } else {
               throw badClasspath(classpathe1);
             }
           }
         }
         cl = new URLClassLoader(urls.toArray(new URL[urls.size()]), cl);
       }
        = loadDriver(driverNamecl);
     } else {
        = null;
     }
 
      = new PrintWriter(.);
   }
 
   private static SQLException badClasspath(final String classpath,
       final MalformedURLException e1) {
     final SQLException sqle;
     sqle = new SQLException("Invalid driver classpath " + classpath);
     sqle.initCause(e1);
     return sqle;
   }
  public Connection getConnection() throws SQLException {
    if ( != null) {
      return .connect();
    }
    return DriverManager.getConnection();
  }
  public Connection getConnection(String userString password)
      throws SQLException {
    if ( != null) {
      final Properties info = new Properties();
      if (user != null) {
        info.put("user"user);
      }
      if (password != null) {
        info.put("password"password);
      }
      return .connect(info);
    }
    return DriverManager.getConnection(userpassword);
  }
  public PrintWriter getLogWriter() {
    return ;
  }
  public void setLogWriter(final PrintWriter out) {
     = out;
  }
  public int getLoginTimeout() {
    return 0;
  }
  public void setLoginTimeout(int seconds) {
  }
  public boolean isWrapperFor(Class<?> iface) {
    return false;
  }
  public <T> T unwrap(Class<T> ifacethrows SQLException {
    throw new SQLException(getClass().getName() + " wraps nothing");
  }
    throw new SQLFeatureNotSupportedException();
  }
  private static synchronized Driver loadDriver(final String driver,
      final ClassLoader loaderthrows SQLException {
    // I've seen some drivers (*cough* Informix *cough*) which won't load
    // on multiple threads at the same time. Forcing our code to synchronize
    // around loading the driver ensures we won't ever ask for the same driver
    // to initialize from different threads. Of course that could still happen
    // in other parts of the same JVM, but its quite unlikely.
    //
    try {
      return (Driver) Class.forName(drivertrueloader).newInstance();
    } catch (Throwable err) {
      final SQLException e;
      e = new SQLException("Driver class " + driver + " not available");
      e.initCause(err);
      throw e;
    }
  }
  private static ClassLoader threadCL() {
    try {
      return Thread.currentThread().getContextClassLoader();
    } catch (SecurityException e) {
      return SimpleDataSource.class.getClassLoader();
    }
  }
New to GrepCode? Check out our FAQ X