Let me describe the setup first. I am uisng JDK 1.3. The classes12.jar (JDBC driver) has been placed in C:\jdk1.3\jre\lib\ext folder, so I have not explicitly added the jar to the classpath. My test program can make a JDBC connection fine from this windows machine to Oracle. Now, I create a jar of this code and the windows service basically loads the jar up when Windows starts. When run in this manner, I get ClassNotFoundException for "oracle.jdbc.driver.OracleDriver". However, I have a bat file that starts the jar up the same way (java -jar ReportServer.jar) and that seems to be able to make JDBC connections just fine. Below is a code excerpt being used for the connection:
...... DriverManager.registerDriver((Driver)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()); //Get a Connection to the database myConn = DriverManager.getConnection(dbUrl, rptUsername, rptPassword); .........
I am catching all the required exceptions etc.
Also, here's how the environment variables are set: JAVA_HOME=C:\jdk1.3 Path=D:\apache;C:\jdk1.3\bin;D:\Oracle\Ora81\bin;............. CLASSPATH=.;D:\Oracle\Ora81\bin;C:\jdk1.3;.....................
Any ideas? I dont know what I am doing wrong. This needs to run as a windows service. Thanks!
is not correct and can cause the Driver to be registered twice. This is only a problem if you try to remove Drivers (whcih I've never seen anyone do), but this is the preferred mechanism:
While it doesn't look like it does anything, the ClassLoader loads the Driver and as the Driver loads it is required to register itself with the DriverManager.
Have you tried taking the classes12.jar out of the lib/ext directory and getting the batch file to include it? There is a strange security ussue relating to the way Drivers get loaded, but I'm trying to remeber the ways to recreate the problem and how to solve it. the 'lib/ext' directory doesn't feel like the right place for it.