You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/04/22 14:41:46 UTC

svn commit: r531171 - /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java

Author: aadamchik
Date: Sun Apr 22 05:41:45 2007
New Revision: 531171

URL: http://svn.apache.org/viewvc?view=rev&rev=531171
Log:
CAY-779: Improve usability of non-pooling DriverDataSource for uses outside Cayenne

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java?view=diff&rev=531171&r1=531170&r2=531171
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/conn/DriverDataSource.java Sun Apr 22 05:41:45 2007
@@ -17,7 +17,6 @@
  *  under the License.
  ****************************************************************/
 
-
 package org.apache.cayenne.conn;
 
 import java.io.PrintWriter;
@@ -29,8 +28,10 @@
 
 import javax.sql.DataSource;
 
+import org.apache.cayenne.util.Util;
+
 /**
- * A DataSource implementation wrapping a JDBC driver.
+ * A non-pooling DataSource implementation wrapping a JDBC driver.
  * 
  * @author Andrus Adamchik
  */
@@ -45,24 +46,55 @@
     protected ConnectionEventLoggingDelegate logger;
 
     /**
+     * Loads JDBC driver using current thread class loader.
+     * 
+     * @since 3.0
+     */
+    private static Driver loadDriver(String driverClassName) throws SQLException {
+
+        Class driverClass;
+        try {
+            driverClass = Class.forName(driverClassName, true, Thread
+                    .currentThread()
+                    .getContextClassLoader());
+        }
+        catch (Exception ex) {
+            throw new SQLException("Can not load JDBC driver named '"
+                    + driverClassName
+                    + "': "
+                    + ex.getMessage());
+        }
+
+        try {
+            return (Driver) driverClass.newInstance();
+        }
+        catch (Exception ex) {
+            throw new SQLException("Error instantiating driver '"
+                    + driverClassName
+                    + "': "
+                    + ex.getMessage());
+        }
+    }
+
+    /**
      * Creates a new DriverDataSource.
      */
     public DriverDataSource(String driverClassName, String connectionUrl)
             throws SQLException {
+        this(driverClassName, connectionUrl, null, null);
+    }
 
-        this.connectionUrl = connectionUrl;
+    /**
+     * @since 3.0
+     */
+    public DriverDataSource(String driverClassName, String connectionUrl,
+            String userName, String password) throws SQLException {
 
-        if (driverClassName != null) {
-            try {
-                this.driver = (Driver) Class.forName(driverClassName).newInstance();
-            }
-            catch (Exception ex) {
-                throw new SQLException("Can not load JDBC driver named '"
-                        + driverClassName
-                        + "': "
-                        + ex.getMessage());
-            }
-        }
+        setDriverClassName(driverClassName);
+
+        this.connectionUrl = connectionUrl;
+        this.userName = userName;
+        this.password = password;
     }
 
     /**
@@ -72,6 +104,7 @@
      */
     public DriverDataSource(Driver driver, String connectionUrl, String userName,
             String password) {
+
         this.driver = driver;
         this.connectionUrl = connectionUrl;
         this.userName = userName;
@@ -114,10 +147,10 @@
                 }
                 c = driver.connect(connectionUrl, connectProperties);
             }
-            
+
             // some drivers (Oracle) return null connections instead of throwing
             // an exception... fix it here
-            
+
             if (c == null) {
                 throw new SQLException("Can't establish connection: " + connectionUrl);
             }
@@ -159,5 +192,57 @@
 
     public void setLogger(ConnectionEventLoggingDelegate delegate) {
         logger = delegate;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public String getConnectionUrl() {
+        return connectionUrl;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public void setConnectionUrl(String connectionUrl) {
+        this.connectionUrl = connectionUrl;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public String getUserName() {
+        return userName;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getDriverClassName() {
+        return driver != null ? driver.getClass().getName() : null;
+    }
+
+    public void setDriverClassName(String driverClassName) throws SQLException {
+        if (!Util.nullSafeEquals(getDriverClassName(), driverClassName)) {
+            this.driver = driverClassName != null ? loadDriver(driverClassName) : null;
+        }
     }
 }