If you are having problems with JNDI connection pooling and you can't work out the problem, I would pay attention to the <Host> node settings in the server.xml.

I would even get a fresh installation of tomcat and start from scratch with a simple test case.

The attributes of <Host>, e.g. autoDeploy, deployOnStartup, deployXML, unpackWARs can be combined in ways that will not load the JNDI context, definitely when deploying WAR files and possibly under other circumstances. I've had it happen to me myself, and I've seen other comment on it here but sadly for you I didn't document it.

Just saying though, it's worth going back to square one.

Adam

On 03/18/2004 05:42 AM Steve Gums wrote:
I noticed a couple things. One I want to be corrected if I am wrong but
your docBase should not be root. Second your driver for MySQL isn't the
org.gjt thing anymore. Use com.mysql.jdbc.Driver


I unfortunately have seen this error far too much in the past few days.  It
is not getting into the JNDI resources.  Your context segment needs repair.

Steve I have included my DBTest.xml from
/usr/local/tomcat/conf/Catalina/localhost/  and it works now.
<Context path="/DBTest" docBase="DBTest"
        debug="5" reloadable="true" crossContext="true">

  <Logger className="org.apache.catalina.logger.FileLogger"
             prefix="localhost_DBTest_log." suffix=".txt"
             timestamp="true"/>

  <Resource name="jdbc/TestDB"
               auth="Container"
               type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/TestDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>

    <!-- Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to 0 for no limit.
         -->
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>

    <!-- Maximum number of idle dB connections to retain in pool.
         Set to 0 for no limit.
         -->
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
    <!-- Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>

    <!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>XXXX</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>XXXX</value>
    </parameter>

    <!-- Class name for mm.mysql JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>

<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed
the
connection. mysqld by default closes idle connections after 8
hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/javatest?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
-----Original Message-----
From: Kawthar Bt M Sulaiman [mailto:[EMAIL PROTECTED] Sent: Wednesday, March 17, 2004 7:32 PM
To: [EMAIL PROTECTED]
Subject: Re: Kumar's JDBC problems with MySQL


Kumar,

I've been trying to follow the JDBC pb thread as well and still can't
get rid of the
problem.  Here is what I've done.

Using J Connector 3.0, Tomcat 4.1.30 and mySQL 4.0.18.
I put my "mysql-connector-java-3.0.11-bin" under /common/lib.

1.  Start from simple web.xml:
  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mySQLDatabase</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

2. server.xml (located at $CATALINA_HOME\conf\server.xml)
<Context path="/db" docBase ="ROOT" debug="9" reloadable="true">
<Resource name="jdbc/mySQLDatabase" auth="Shareable" type="javax.sql.DataSource" description="JDBC Connection to
MySQL v4.0.18"/>


<ResourceParams name="jdbc/mySQLDatabase">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>serverName</name>
<value>localhost</value>
</parameter>
<parameter>
<name>databaseName</name>
<value>ecpa</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
<parameter>
<name>username</name>
<value>xxxx</value>
</parameter>
<parameter>
<name>password</name>
<value>xxxx</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>200</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/ecpa?autoReconnect=true</value>
</parameter>
</ResourceParams>


          <Logger className="org.apache.catalina.logger.FileLogger"
                     prefix="DBlog." suffix=".txt"
              timestamp="true"/>
     </Context>

3.  In my code:
Context ctx = new InitialContext();
            if(ctx == null)
            {
                throw new Exception("\nNo Context Error");
            }

DataSource ds = (DataSource)
ctx.lookup("java:comp/env/jdbc/mySQLDatabase");
if (ds == null)
{
System.out.println("\n DataSource is NULL ");
}
Connection conn = ds.getConnection();
if (conn != null)
{
System.out.println("\nGot Connection ");
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select username from
users");
if(rst.next())
{
System.out.println("\n username: " +
rst.getString(1));
}
conn.close();
}


4.  Error message I got from printStackTrace():
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver
of class '
' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(DriverManager.java:243)
        at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSou
rce.java:743)
        at
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource
.java:518)
        at
com.maxis.app.ContentProcessor.initializeDatabase(ContentProcessor.ja
va:60)
        at com.maxis.morequest.DBTest.init(DBTest.java:31)
        at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.
java:935)
        at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.jav
a:668)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:210)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)


I believe these are the steps everybody else implementing, but I still get this error... Did I miss something?

Thanks,
--Kawthar


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]




--
struts 1.1 + tomcat 5.0.16 + java 1.4.2
Linux 2.4.20 Debian


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to