I'm developing my first ever servlet for Tomcat 6.0.18 under Mac OS X 10.5.6 with Java 1.5.0_16. I've used Tomcat a lot with Cocoon and I know Java reasonably well.

I'd like to extend the standard WebdavServlet that comes with Tomcat to access data from a relational database using JDBC. I've started to write a DirContext (called DBDirContext) to do this. I've written a test servlet

public class DBServlet extends WebdavServlet {...}

and filled it with methods which print out a message and invoke their super methods:

... xxx(...) {
    System.out.println("some text");
    super.xxx(...);
}

i.e. I just want a trace on standard output of what WebDAV calls so I know what bits of DBDirContext to develop next.

My Tomcat is as installed by NetBeans 6.5, that is with a separate CATALINA_HOME and CATALINA_BASE. I have discovered that my DBDirContext and supporting database stuff is not found if I include it in the WAR file deployed into $CATALINA_BASE/webapps, so I modified $CATALINA_BASE/conf/catalina.properties to make common.loader look also in $CATALINA_BASE/common/lib and I put DBDirContext and supporting cast into there.

If I put the following file into META-INF/context.xml, I can call DBServlet over an HTTP session and successfully mount a WebDAV disk using the filesystem:

<Context>
    <Resource name="jdbc/xwdb" auth="Container"
type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="..."
username="..." password="..." maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>

All of my output to standard output appears in the log.

However, when I include <Resources... /> to pull in DBDirContext as follows, WebDAV gets as far as an initial OPTIONS method and gives up:

<Context>
    <Resources className="org.vimia.xw.db.dircontext.DBDirContext" />
    <Resource name="jdbc/xwdb" auth="Container"
type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="..."
username="..." password="..." maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>

The trace I built in does not appear on standard output in this case. Examining the response to the OPTIONS method, I see that WebDAV generates a response from doOptions in HttpServlet and not from the overriding one in WebdavServlet.

So WebdavServlet and my DBServlet seem to be being ignored. I don't understand why and I'd be grateful if someone could give me some pointers. The Tomcat documentation suggests that changing the <Resources .../> to something other than the filesystem results in Tomcat not being able to read files it needs: does this include my JAR files? If so, do I have to make a hybrid DBDirContext that gets the files Tomcat needs from the filesystem and the data I want from the database?

Steve



Reply via email to