diff -r af35cc32dd85 src/com/ziclix/python/sql/connect/Connect.java --- a/src/com/ziclix/python/sql/connect/Connect.java Thu Jun 14 07:47:42 2012 -0400 +++ b/src/com/ziclix/python/sql/connect/Connect.java Fri Jun 15 12:42:35 2012 -0400 @@ -7,12 +7,19 @@ */ package com.ziclix.python.sql.connect; -import java.sql.*; -import java.util.*; +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; -import org.python.core.*; -import com.ziclix.python.sql.*; -import com.ziclix.python.sql.util.*; +import org.python.core.Py; +import org.python.core.PyObject; +import org.python.core.PyString; + +import com.ziclix.python.sql.PyConnection; +import com.ziclix.python.sql.zxJDBC; +import com.ziclix.python.sql.util.PyArgParser; /** * Connect using DriverManager. @@ -72,8 +79,14 @@ props.put(kws[i], value); } + Class driverClass; try { - Class.forName(driver); + ClassLoader sysCL = Py.getSystemState().getClassLoader(); + if (sysCL != null) { + driverClass = sysCL.loadClass(driver); + } else { + driverClass = Class.forName(driver); + } } catch (Throwable e) { throw zxJDBC.makeException(zxJDBC.DatabaseError, "driver [" + driver + "] not found"); } @@ -81,7 +94,18 @@ try { c = DriverManager.getConnection(url, props); } catch (SQLException e) { - throw zxJDBC.makeException(zxJDBC.DatabaseError, e); + //fall back to direct instantiation since DriverManager can only see drivers loaded by + //the boot classloader. + try { + Driver d = (Driver)driverClass.newInstance(); + c = d.connect(url, props); + } catch (InstantiationException ie) { + throw zxJDBC.makeException(zxJDBC.DatabaseError, ie); + } catch (IllegalAccessException iae) { + throw zxJDBC.makeException(zxJDBC.DatabaseError, iae); + } catch (SQLException se) { + throw zxJDBC.makeException(zxJDBC.DatabaseError, se); + } } } else { c = (Connection) arg;