Hi, If you have declared your database connection pools ast the GlobalNamingResource level, but do not have your contexts declarared in server.xml, you probably need to have context.xml files in your META-INF subdirectory which contain your ResourceLink definitions for the context.
HTH -----Original Message----- From: Michael Holly [mailto:[EMAIL PROTECTED] Sent: 18 June 2003 17:21 To: [EMAIL PROTECTED] Subject: java.sql.SQLException: Cannot load JDBC driver class 'null' In trying to make the move to automate my testing I have come up against a problem. First some background. I am running Tomcat 4.1.18, Java 1.3.1, Win 2k Part of getting on automated testing was getting the ANT build to undeploy and then redeploy the war after it got created. In addition, I decided that it was more convenient to have the Test classes located in myapp.war instead of a seperate war. Part of getting this dynamic undeploy/deploy cycle to work was removing the <context> from the server.xml. The reason I want to do this is I have 2 connection pools located there. In a dynamic deploy tomcat generates it's own context for the app. I found there were three ways I could do this. #1. put the connection pool into the <GlobalNamingResources> section of server.xml #2. create a $APP_NAME.xml file that contains the context of the app and put it into $TOMCAT_HOME/webapps. Both the Tomcat manager and Admin apps do this. #3. Possibly put the context info in the web.xml file for the app. I have tried both 1 and 2 and I am getting a java.sql.SQLException: Cannot load JDBC driver class 'null' error when the DBCP is accessed. The classes12.jar file is located in $TOMCAT_HOME/common/lib. It has been renamed from .zip to .jar Is there something special that I have to do to make the pools available to my application? As you can tell from the included files I am using configuring a connection pool for two different connections. Below are my files for Option #2 (the one I would like to go with). Do I have the <resource-ref> defined correctly? Is there something I am missing? Some Observations. The app seems to deploy correctly. ( I can see app in Tomcat manager ) Using the Tomcat Admin facility I can see my DataSources. WEB.XML--------------------------------------------------------------------- ---------------- <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>TSR Application</display-name> <description>This is the web configuration for the TSR application</description> <!-- SERVLET LISTINGS --> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>net.talisen.tsr.servlets.TestServlet</servlet-class> </servlet> <servlet> <servlet-name>ControllerServlet</servlet-name> <servlet-class>net.talisen.tsr.servlets.ControllerServlet</servlet-class> </servlet> <servlet> <servlet-name>FileDownloadServlet</servlet-name> <servlet-class>net.talisen.tsr.servlets.FileDownloadServlet</servlet-class> </servlet> <servlet> <servlet-name>StartupServlet</servlet-name> <servlet-class>net.talisen.tsr.servlets.StartupServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!--servlet> <servlet-name>log4j-init</servlet-name> <servlet-class>net.talisen.tsr.servlets.Log4jInit</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>log4j-init-file</param-name> <param-value>WEB-INF\classes\log4j.properties</param-value> </init-param> </servlet--> <!-- integrate the testing --> <servlet> <servlet-name>JUnitEETestServlet</servlet-name> <description>JUnitEE test runner</description> <servlet-class>org.junitee.servlet.JUnitEEServlet</servlet-class> </servlet> <!-- SERVLET MAPPINGS --> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>StartupServlet</servlet-name> <url-pattern>/startup</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ControllerServlet</servlet-name> <url-pattern>/controller</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FileDownloadServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping> <!-- integrate the testing --> <servlet-mapping> <servlet-name>JUnitEETestServlet</servlet-name> <url-pattern>/TestServlet/*</url-pattern> </servlet-mapping> <!-- JNDI resource for DB connection pool --> <resource-ref> <description> Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the server.xml file. </description> <res-ref-name> jdbc/oracle_tsr </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth> </resource-ref> <!-- JNDI resource for DB connection pool --> <resource-ref> <description> Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the server.xml file. </description> <res-ref-name> jdbc/oracle_myco </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth> </resource-ref> </web-app> WEB.XML--------------------------------------------------------------------- ---------------- TSR.XML--------------------------------------------------------------------- ---------------- <Context path="/tsr" docBase="tsr.war" debug="3" reloadable="true" crossContext="true"> <Loader checkInterval="6"/> <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_tsrdb_log." suffix=".txt" timestamp="true"/> <Resource name="jdbc/oracle_tsr" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/oracle_tsr"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.OracleDriver</value> </parameter> <parameter> <name>url</name> <!--value>jdbc:oracle:thin:@myserver:1521:myco</value--> <value>jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.myco.com)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SID = MYCO)))</value> </parameter> <parameter> <name>username</name> <value>tsr_app</value> </parameter> <parameter> <name>password</name> <value>actuator</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> <parameter> <name>validationQuery</name> <value>select 'validationQuery' from dual</value> </parameter> <parameter> <name>testOnBorrow</name> <value>true</value> </parameter> </ResourceParams> <Resource name="jdbc/oracle_talisen" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/oracle_myco"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <!--value>jdbc:oracle:thin:@myserver:1521:myco</value--> <value>jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.myco.com)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SID = MYCO)))</value> </parameter> <parameter> <name>username</name> <value>myname</value> </parameter> <parameter> <name>password</name> <value>mypass</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> <parameter> <name>validationQuery</name> <value>select 'validationQuery' from dual</value> </parameter> <parameter> <name>testOnBorrow</name> <value>true</value> </parameter> </ResourceParams> </Context> TSR.XML--------------------------------------------------------------------- ---------------- My log even shows the look up of the datasource in the context 2003-06-13 13:42:51,009 DEBUG tsr.DBCmd 208 - Looking up db 2003-06-13 13:42:51,009 DEBUG tsr.DBCmd 214 - Getting connection to java:/comp/env/jdbc/oracle_tsr 2003-06-13 13:42:51,019 ERROR tsr.DBCmd 234 - SQL EXCEPTIONCannot load JDBC driver class 'null' java.sql.SQLException: Cannot load JDBC driver class 'null' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.jav a:529) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:3 12) at net.talisen.tsr.DBCmd.open(DBCmd.java:219) at net.talisen.tsr.DBCmd.open(DBCmd.java:186) at net.talisen.tsr.model.customer.Customer.<init>(Customer.java:70) at test.talisen.tsr.model.customer.CustomerTest.testCustomer(CustomerTest.java: 74) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl ...java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.junitee.runner.TestRunner$1.run(TestRunner.java:72) at org.junitee.runner.TestRunner.run(TestRunner.java:95) at org.junitee.servlet.JUnitEEServlet.runTests(JUnitEEServlet.java:224) at org.junitee.servlet.JUnitEEServlet.doGet(JUnitEEServlet.java:195) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve..ja va:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve..ja va:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve. java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:641) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:509) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline. java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java: 1040) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151 ) at java.lang.Thread.run(Thread.java:536) 2003-06-13 13:42:51,179 ERROR customer.Customer 139 - Customer was not able to be added. Thanks for the help Michael --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
