Yes, driver doe's it this way : static{ DriverManager.registerDriver( new MyDriversPrivateConstructor() ); }
> The following is from DriverManager's doc: > > public static Driver getDriver(String url) > throws SQLException > > Attempts to locate a driver that understands the given URL. The > DriverManager attempts to select an appropriate driver from the > set of registered JDBC drivers. > > > So to get driver via url it must be registered first. > But to register it you have to have the driver's class instance! > > James House wrote: > > > > In the "BasicDataSource.createDataSource()" method, there are 2 serious > > bugs in the following block of code: > > > > =========================================== > > // Load the JDBC driver class > > Class driverClass = null; > > try { > > driverClass = Class.forName(driverClassName); > > } catch (Throwable t) { > > String message = "Cannot load JDBC driver class '" + > > driverClassName + "'"; > > getLogWriter().println(message); > > t.printStackTrace(getLogWriter()); > > throw new SQLException(message); > > } > > > > // Create a JDBC driver instance > > Driver driver = null; > > try { > > driver = (Driver) driverClass.newInstance(); > > } catch (Throwable t) { > > String message = "Cannot create JDBC driver of class '" + > > driverClassName + "'"; > > getLogWriter().println(message); > > t.printStackTrace(getLogWriter()); > > throw new SQLException(message); > > } > > =========================================== > > > > The if method createDataSource() encounters a problem loading or > > instantiating the JDBC driver, it calls the method > > getLogWriter(). getLogWriter() in turn calls createDataSource(), thus > > creating an infinite loop, and a stack-overflow exception. Perhaps > > createDataSource() needs to simply log it's errors to stderr ??? > > > > The second bug in this block of code causes the creation of the data source > > to fail, even though there's no real problem. > > > > This problem stems from the fact that many JDBC drivers (well, at least 2 > > that I use regularly) do not have a public constructor, and therefore you > > can't call newInstance() on them. (the instantiate themselves in a static > > {} block, as they are loaded and registered with driver manager). > > > > The EASY solution is to replace the second try block body with this call: > > > > driver = DriverManager.getDriver(url); > > > > Simple huh? > > > > If you want to "fix" the two bugs in the manner I've suggested, the > > replacement of the block outlined above would be: > > =========================================== > > import java.sql.DriverManager; > > ... > > > > // Load the JDBC driver class > > Class driverClass = null; > > try { > > driverClass = Class.forName(driverClassName); > > } catch (Throwable t) { > > String message = "Cannot load JDBC driver class '" + > > driverClassName + "'"; > > System.err.println(message); > > t.printStackTrace(); > > throw new SQLException(message); > > } > > > > // Create a JDBC driver instance > > Driver driver = null; > > try { > > driver = DriverManager.getDriver(url); > > } catch (Throwable t) { > > String message = "Cannot get a reference to JDBC driver of > > class '" + > > driverClassName + "' - " + t.getMessage(); > > System.err.println(message); > > t.printStackTrace(); > > throw new SQLException(message); > > } > > =========================================== > > > > BTW: I REALLY appreciate the recent changes that have made the pool > > (getConnection()) throw SQLException. > > > > James > > > > -- > > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- > Lev Assinovsky Peterlink Web > Programmer St. Petersburg, Russia > Tel/Fax: +7 812 3275343 197022 ul.Chapigina 7Á > E-mail: [EMAIL PROTECTED] > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>