Dawid To answer your question, yes it does.
I think I have found out the problem. I wrote a servlet to report the elements in the initalContext and found out that the configuration I have works the first time that Tomcat is started, but when it is undeployed and redeployed it loses the values in the initalContext. This undeploy redeploy cycle is critical for my unit testing. I will have to explore specifically what Tomcat does when a context is redployed. Maybe I can trick it into redicovering the values for the initalContext. So my problem is not really with the configuration but the redeployment losing the values in the initalContext. Michael -----Original Message----- From: Dawid Van Der Merwe [mailto:[EMAIL PROTECTED] Sent: Friday, June 20, 2003 1:46 AM To: 'Jakarta Commons Users List' Subject: RE: [DBCP] Configuring DBCP for Tomcat/Oracle Hi Michael. Does it work when you've got the resource configured in the <context> element in your server.xml file? Like so: <Resource name="jdbc/JNDI_NAME" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/PORTAL_EINT"> <parameter> <name>username</name> <value>user</value> </parameter> <parameter> <name>password</name> <value>******</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@db.server.net:1528:RDB</value> </parameter> <parameter> <name>maxActive</name> <value>2</value> </parameter> <parameter> <name>maxIdle</name> <value>1</value> </parameter> </ResourceParams> -----Original Message----- From: Michael Holly [mailto:[EMAIL PROTECTED] Sent: 19 Thursday June 2003 10:33 To: Jakarta Commons Users List Subject: [DBCP] Configuring DBCP for Tomcat/Oracle I am running Tomcat 4.1.18, Java 1.3.1, Win 2k Part of getting on automated testing(junit et. al.) was getting the ANT build to undeploy and then redeploy the war after it got created. 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 <defaultContext> section for the server. 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 Some things i have tried: I have tried: 1. config #1, 2. config #2, 3. replacing the <parameter> <name>driverClassName</name> <value>oracle.jdbc.OracleDriver</value> </parameter> with <parameter> <name>driverClassName</name> <value>oracle.jdbc.pool.OracleConnectionPoolDataSource</value> </parameter> Thess did not help Some Observations. 1. The app seems to deploy correctly. ( I can see app in Tomcat manager ) 2. When I alter the JNDI name(adding and 'x' to the end) I get a javax.naming.NameNotFoundException: Name oracle_tsrx is not bound in this Context error. So from this it appears that the Context is being created but something in classes12.jar is not being found or referenced properly. 3. Before I went to this new configuration, this worked with a hard coded <context> in the server.xml that contained the references for the pools. Currently the classes12.jar is located in $TOMCAT_HOME/common/lib. Is this the correct location for this class? Are all jars in $TOMCAT_HOME/common/lib automagically referencable? I understand that the pool classes need to be here because they are referenced by both the app and the container. Is there any way for me to iterate through a context and see what it's properties/parametes/resources are? 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). 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. Sorry for the HUGE post. 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
