tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Ward" <cw...@horizon-asset.co.uk>
Subject RE: JDBC/DBCP problems
Date Wed, 28 Jan 2004 15:59:39 GMT

Hi Jay,

I don't know if it's of any help at all, but I went through
something similar.

What I found to be my problem was that my URLs for invoking
JSPs/servlets did not always specify my Tomcat <Context> and
all the DataSource stuff was set up in my context (in server.xml
and the associated web.xml).

Since I had pointed the default <Context> "/" to my <Context>
("/hal") by setting it's docBase in server.xml most of the requests
appeared to be working.

For example, if I asked for 
	{host}/jsp/myJSP.jsp 
I would get in fact reach the JSP at...
	{host}/hal/jsp/myJSP.jsp) 
but the JNDI stuff did not get picked up.  Leaving the "/hal"
out of my request meant it never saw the "/hal" stuff in server.xml
which is where my DataSource stuff lives.

I cleaned up my URL in links/forms etc. and seemed to get on okay.

Hope it helps a bit.


Best regards
Chris


> -----Original Message-----
> From: Burgess, Jay S [mailto:Jay.Burgess@ca.com] 
> Sent: Wednesday, January 28, 2004 3:36 PM
> To: tomcat-user@jakarta.apache.org
> Subject: JDBC/DBCP problems
> 
> 
> 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;Databas
> e=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
> "org.apache.commons.dbcp.BasicDataSource@2d95b3":
> 
>     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.SQL
> ServerDriv
> 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 '' org.apache.naming.NamingContext@bad8a8
> 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: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> 
> 

---------------------------------------------------------------------
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