I'll see if I can put something together in the next couple of days. Obviously, this issue is tripping up a lot of people.
And I forgot to mention one thing about my instructions below--it's for a Windows setup. I think that the syntax for the "war" attribute of the "deploy" task may be slightly different on the Unix platforms e.g. too many slashes in "file:///"? I also left out the actual code that takes advantage of connection pool: At initialize time: Context initialContext = new InitialContext(); Context envContext = (Context) initialContext.lookup("java:comp/env"); DataSource dataSource = (DataSource) envContext.lookup("jdbc/protodb"); At the time a connection is required: conn = dataSource.getConnection(); Jay -----Original Message----- From: Josh Rehman [mailto:[EMAIL PROTECTED] Sent: Thursday, February 05, 2004 6:19 PM To: Tomcat Users List Subject: Re: JNDI datasource lost on redeploy That's a really nice write up, Jay. Would it be convenient for you to post a simple project that does this with a build file? Sounds like something that could make it into the FAQ. If that's too much trouble I can produce a project zip perhaps. Burgess, Jay S wrote: > Having just gone through this headache last week, I can provide a > solution that works for me (for TC5 only!). > > First, create a file called context.xml and put it in a directory called > "META-INF" at the same level in your source hierarchy as WEB-INF. > context.xml should contain your <Context> and <Resource> definitions, > something like: > > <Context path="/proto" docBase="proto.war" override="true" > cachingAllowed="true" useNaming="true" reloadable="false" debug="0"> > > <Resource name="jdbc/protodb" auth="Container" > type="javax.sql.DataSource" /> > <ResourceParams name="jdbc/protodb"> > > ... > > Second, make sure your web.xml file contains the necessary > <resource-ref> details: > > <resource-ref> > <res-ref-name>jdbc/protodb</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > > Third, use the Tomcat Ant tasks to undeploy/deploy your WAR to the > appbase directory: > > <undeploy path="/${app.name}" url="${manager.url}" > username="${manager.username}" password="${manager.password}" /> > > <deploy url="${manager.url}" username="${manager.username}" > password="${manager.password}" path="/${app.name}" > war="file:///${dist.home}/${app.name}.war" /> > > Note that I also have "unpackWARs" set to "false" in server.xml, so that > the WAR is left intact. > > I noticed that when using this setup, Tomcat pulls context.xml out of > the WAR, renames it <app name>.war, and puts it into the > "%CATALINA_HOME%/conf/Catalina/localhost" directory. I just it alone, > as it goes away on undeploy. > > Let me know if this doesn't work for you. > > Jay > > -----Original Message----- > From: todd runstein [mailto:[EMAIL PROTECTED] > Sent: Thursday, February 05, 2004 4:51 PM > To: [EMAIL PROTECTED] > Subject: JNDI datasource lost on redeploy > > I've set up a JNDI datasource on my test server that > works just fine (Tomcat=5.0.18, JDK=1.4.1, RedHat=8, > M$_SQL=2000). However, each time I recompile and > redeploy the application, I lose my connection pool, > recieving the "Cannot create JDBC driver of class '' > for connect URL 'null'" error. I have to restart > Tomcat to get it working again. > > This sort of makes sense, since I'm defining the > Resource within a Context in server.xml. It seems > that I either need to make the resource globally > available to every web app, or move the resource > definition to within my web app. Unfortunately, I > don't know what to move or where to move it or what > options might work. Any advice or suggestions? > > I'm including all the code used to get the connection > as it stands now. Again, this currently works up > until I try to redeploy the web app. > > My driver jars (there are 3 for MS SQL) are in > $CATALINA_HOME/common/lib > > server.xml: > <Context path="/mfgreports" > docBase="mfgreports" debug="5"> > <Resource > name="datasource.testtrk.circuits" > auth="Container" > type="javax.sql.DataSource" /> > <ResourceParams > name="datasource.testtrk.circuits"> > <parameter> > <name>factory</name> > > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> > </parameter> > ..... > <parameter> > <name>driverClassName</name> > > <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> > </parameter> > <parameter> > <name>url</name> > > <value>jdbc:microsoft:sqlserver://testtrk:1433;databasename=Circuits</va > lue> > </parameter> > > </ResourceParams> > </Context> > > > web.xml: > <resource-ref> > > <res-ref-name>datasource.testtrk.circuits</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > > > Code used to get connection: > public class JNDIConnection { > > public static Connection getConnection(String > datasource) > throws NamingException, SQLException{ > Context ctx = new InitialContext(); > //This syntax is a bit different than the docs show, > but it appears to be working > DataSource ds = > (DataSource)ctx.lookup("java:comp/env/"+datasource); > return ds.getConnection(); > } > } > > Thanks again! > > ===== > The only "dumb question" is the one you were too afraid to ask. > ________________________________________ > > Check out RouteRuler - Free software for runners, cyclists, walkers, > etc. > http://routeruler.sourceforge.net > ________________________________________ > > __________________________________ > Do you Yahoo!? > Yahoo! Finance: Get your refund fast by filing online. > http://taxes.yahoo.com/filing.html > > --------------------------------------------------------------------- > 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] > -- Josh Rehman citysearch.com 213.739.3559 --------------------------------------------------------------------- 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]