DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15672>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15672

DBCP doesn't work on Tomcat 4.1.18 with Oracle JDBC driver





------- Additional Comments From [EMAIL PROTECTED]  2003-06-13 21:07 -------
In trying to make the move to automate my testing I have come up
against the same problem.

First some background.
I am running Tomcat 4.1.18, Java 1.3.1, Win 2k

classes12.jar, commons-collections.jar, 
commons-dbcp.jar, commons-pool are located 
in $TOMCAT_HOME/common/lib

I am attempting to get automated testing running
To do this 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 my app.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 the
java.sql.SQLException: Cannot load JDBC driver class 'null' error
when the DBCP is accessed in both.

Below are the relevant files for Option #2

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.myco.myapp.servlets.TestServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>ControllerServlet</servlet-name>
        <servlet-class>net.myco.myapp.servlets.ControllerServlet</servlet-class>
    </servlet>
    
    <servlet>
        <servlet-name>FileDownloadServlet</servlet-name>
        <servlet-class>net.myco.myapp.servlets.FileDownloadServlet</servlet-
class>
    </servlet>
    
    <servlet>
       <servlet-name>StartupServlet</servlet-name>
       <servlet-class>net.myco.myapp.servlets.StartupServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!--servlet>
        <servlet-name>log4j-init</servlet-name>
        <servlet-class>net.myco.myapp.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_myapp
      </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="/myapp" docBase="myapp.war" debug="3" reloadable="true" 
crossContext="true">  
           <Loader checkInterval="6"/>
           <Logger className="org.apache.catalina.logger.FileLogger"
                      prefix="localhost_myappdb_log." 
                      suffix=".txt"
                   timestamp="true"/>
  
           <Resource name="jdbc/oracle_myapp" auth="Container"
           type="javax.sql.DataSource"/> 

           <ResourceParams name="jdbc/oracle_myapp">
              <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>myapp</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_myco" 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>myco</value>
              </parameter>
              <parameter>
                 <name>password</name>
                 <value>myco</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  myapp.DBCmd 208  - Looking up db
2003-06-13 13:42:51,009 DEBUG  myapp.DBCmd 214  - Getting connection to 
java:/comp/env/jdbc/oracle_myapp
2003-06-13 13:42:51,019 ERROR  myapp.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.java:529)
        at org.apache.commons.dbcp.BasicDataSource.getConnection
(BasicDataSource.java:312)
        at net.myco.myapp.DBCmd.open(DBCmd.java:219)
        at net.myco.myapp.DBCmd.open(DBCmd.java:186)
        at net.myco.myapp.model.customer.Customer.<init>(Customer.java:70)
        at test.myco.myapp.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
(ApplicationFilterChain.java:247)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:260)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(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.java:191)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(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.invokeNex
t(StandardPipeline.
java:643)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.
java:641)
        at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:172)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.
java:641)
        at org.apache.catalina.valves.AccessLogValve.invoke
(AccessLogValve.java:509)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(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.invokeNex
t(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]

Reply via email to