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:[EMAIL PROTECTED] > Sent: Wednesday, January 28, 2004 3:36 PM > To: [EMAIL PROTECTED] > 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 > "[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.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 '' [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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]