tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Holly" <mho...@talisentech.com>
Subject java.sql.SQLException: Cannot load JDBC driver class 'null'
Date Wed, 18 Jun 2003 15:20:59 GMT
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: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message