I'm obviously missing something important with regards to moving our
database/JDBC connectivity to use JNDI DataSource/DBCP.  I've read and
re-read the docs, looked at every related message in the archive, and
Google'd every set of keywords I can think of, but still no luck.
Here's the issue:

Tomcat version is 4.1.29 on Windows XP.  I'm attempting to connect to
SQL Server.  The JDBC driver JARs are in CATALINA_HOME\common\lib, and
since everything works fine if I manually load the driver via
Class.forName(), I don't think my problem is related to my driver files
location.  When attempting to use getConnection(), however, I get the
dreaded "Cannot create JDBC driver of class '' for connect URL 'null',
cause: No suitable driver" error.  The highlights of my configuration
are below.

-------------------------
SERVER.XML
-------------------------
<GlobalNamingResources>
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
description="The database." />
    <ResourceParams name="jdbc/mydb">
    <parameter>
        <name>factory</name>
        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
        <name>url</name>
<value>jdbc:microsoft:sqlserver://###.###.###.###:1433;Database=MyDB</va
lue>
    </parameter>
    <parameter>
        <name>driverClassName</name>
        <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    </parameter>
    <parameter>
        <name>username</name>
        <value>MyUsername</value>
    </parameter>
    <parameter>
        <name>password</name>
        <value>MyPassword</value>
    </parameter>
...
</GlobalNamingResources>

-------------------------
WEB.XML
-------------------------
<resource-ref>
    <description>Some description. </description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

-------------------------
In my servlet's init():
-------------------------        
Context initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) envContext.lookup("jdbc/mydb");
Connection conn = dataSource.getConnection(); // throws exception

-------------------------
Further info:
-------------------------        
Adding the following line after acquiring dataSource above, I get "class

org.apache.commons.dbcp.BasicDataSource":

    System.out.println(dataSource.getClass());

And if I add the following, I get
"[EMAIL PROTECTED]":

    System.out.println((org.apache.commons.dbcp.BasicDataSource)
dataSource);

So, since it looks like a valid BasicDataSource object, I tried the
following, but get "null" back:

    System.out.println(((org.apache.commons.dbcp.BasicDataSource)
dataSource).getUrl());

This seems to indicate that the object isn't initialized?

Turning on debug for the relevant listeners (NamingContextListener and
GlobalResourcesLifecycleListener), I see the following related info in
my Tomcat console window, which looks good from what I understand:

Jan 28, 2004 9:06:11 AM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on port 8080
NamingContextListener[/]: Creating JNDI naming context
NamingContextListener[/]: Resource parameters for mydb =
ResourceParams[name=mydb, parameters=
{url=jdbc:microsoft:sqlserver://###.###.###.###:1433;Database=MyDB,
maxIdle=4,
maxActive=8, 
driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver, 
maxWait=10000, 
removeAbandoned=true, 
username=MyUsername, 
factory=org.apache.commons.dbcp.BasicDataSourceFactory, 
logAbandoned=true, 
removeAbandonedTimeout=60, 
password=MyPassword}]
NamingContextListener[/]: Adding resource ref mydb
NamingContextListener[/]: ResourceRef[
className=javax.sql.DataSource,
factoryClassLocation=null,
factoryClassName=org.apache.naming.factory.ResourceFactory,
{type=description,content=The database.},
{type=scope,content=Shareable},
{type=auth,content=Container},
{type=url,content=
jdbc:microsoft:sqlserver://###.###.###.###:1433;Database=MyDB},
{type=maxIdle,content=4},
{type=maxActive,content=8},
{type=driverClassName,content=com.microsoft.jdbc.sqlserver.SQLServerDriv
er},{type=maxWait,content=10000},
{type=removeAbandoned,content=true},
{type=username,content=MyUsername},
{type=factory,content=org.apache.commons.dbcp.BasicDataSourceFactory},
{type=logAbandoned,content=true},
{type=removeAbandonedTimeout,content=60},
{type=password,content=MyPassword}]
GlobalResourcesLifecycleListener: Creating MBeans for Global JNDI
Resources in Context '' [EMAIL PROTECTED]
GlobalResourcesLifecycleListener: Processing resource mydb
java.lang.String
Starting service Tomcat-Standalone
Apache Tomcat/4.1.29

Any help would be much appreciated.

Jay

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

Reply via email to