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]