I've finally got the servlet working (up to the point where it gets the repository that was configured in the Context). For whatever reason, using WEB-INF/context.xml (as suggested by the Tomcat and Jackrabbit docs) didn't work, but $CATALINA_HOME/conf/[enginename]/ [hostname]/[webappname].xml did. Also I had the same string in both the name attribute and global attribute of my ResourceLink.

From what I've seen on other mailing lists and web forums, I'm not the only one who's had trouble figuring out where to put the Context information. I'd suggest the following diffs to the site documentation, just to make the alternate context location more prominent.

Index: src/site/xdoc/doc/deploy/howto-model2.xml
===================================================================
--- src/site/xdoc/doc/deploy/howto-model2.xml   (revision 377679)
+++ src/site/xdoc/doc/deploy/howto-model2.xml   (working copy)
@@ -106,8 +106,10 @@
           In Tomcat versions 4.x and 5.0, add the following snippet
in <code>server.xml</code> under the <code>Context</code> element of your web application. In Tomcat version 5.5, add the snippet - in your application's <code>context.xml</code> file (or in the - <code>server.xml</code> file if you prefer central configuration).
+          in your application's <code>context.xml</code> or
+ <code>$CATALINA_HOME/conf/[enginename]/[hostname]/ [webappname].xml</code>. + If you prefer central configuration, you can add the configuration
+          to the Host Context section in the <code>server.xml</code>.
         </p>
         <source><![CDATA[
<ResourceLink name="jcr/repository"
Index: src/site/xdoc/doc/deploy/howto-model1.xml
===================================================================
--- src/site/xdoc/doc/deploy/howto-model1.xml   (revision 377679)
+++ src/site/xdoc/doc/deploy/howto-model1.xml   (working copy)
@@ -104,8 +104,10 @@
]]></source>
         <p>
In Tomcat 5.5, add the following snippet in your application's - <code>context.xml</code> file (or in the <code>server.xml</ code>
-          file if you prefer central configuration).
+          <code>WEB-INF/context.xml</code> or
+ <code>$CATALINA_HOME/conf/[enginename]/[hostname]/ [webappname].xml</code>. + If you prefer central configuration, you can add the configuration
+          to the Host Context section in the <code>server.xml</code>.
         </p>
         <source><![CDATA[
<Resource name="jcr/repository"


I did find one other potential documentation bug in the howto- model1.xml page. The text says

      <p>
        <strong>Limitations:</strong> the application should not be
redeployed during the same JVM process to avoid creating duplicate Jackrabbit instances with the same configuration. In case you want
        to redeploy your application be sure to shutdown the repository
        when your application is undeployed. It can be done by calling
        RepositoryImpl.shutdown() (e.g. in the destroy() method of a
        servlet).
      </p>

I set up a model 1 repository in the same servlet (but with different repository settings) and tried to follow these directions. The problem that I ran into is that the shutdown() method is not in the javax.jcr.Repository interface, and BindableRepository is package protected so I can't even cast the object returned by the Context to a BindableRepository. Without that, I wasn't able to see how the shutdown() method could be called from my servlet's destroy() method.

Mark

On Feb 13, 2006, at 7:29 PM, Mark Slater wrote:

Another update. I added the log4j.properties to tomcat and am now able to watch it initialize the repository; there are no errors during the process. Unfortunately, none of the jackrabbit code seems to be executed when I try to get the BindableRepository from the context. I'm assuming at this point its a Tomcat configuration issue, because I've tried a fair number of configurations (embedded- model-1, shared-model-2, both, defined in global context, defined in local context, defined in server.xml, etc.) and am no closer to a solution. I've posted to the Tomcat's users for help, but if anyone here has a spare cycle to point me in the right direction, I'd really appreciate it.

In the most recent trial (embedded repository defined in servlet.xml) I'm able to get an Integer value stored in the context, but when I try to get the jackrabbit repository, I get a class not found exception on BindableRepositoryFactory. This is despite having the jackrabbit jar file in both the webapp's WEB-INF/ lib/ and Tomcat's server/lib/.


Mark

On Feb 13, 2006, at 8:15 AM, Mark Slater wrote:

Nope. There's no errors in any of the log files. I tried moving Jackrabbit jar files (and dependencies) to server/lib (they had all been in common/lib) leaving only jcr-1.0.jar in common/lib ... restarted Tomcat ... no change in results.

I know Jackrabbit is being initialized because, over the weekend, as soon as I'd put all the dependencies into common/lib I stopped getting exceptions during Tomcat's initialization and the repository got initialized (the local file system and the database tables). That's when I started writing the servlet.

The only mention of Jackrabbit in the catalina.out file is at the very start of Tomcat's initialization, I get these lines:

log4j:WARN No appenders could be found for logger (org.apache.jackrabbit.core.fs.local.LocalFileSystem).
log4j:WARN Please initialize the log4j system properly.

I'd worry about the log4j configuration but the exception doesn't show any Jackrabbit code in the stack... its mostly tomcat, catalina, and naming packages, with a few calls to java/javax code and my doGet() servlet function.

Mark

On Feb 13, 2006, at 2:04 AM, Jukka Zitting wrote:

Hi,

On 2/13/06, Mark Slater <[EMAIL PROTECTED]> wrote:
However, when I run my servlet, I get:

javax.naming.NamingException: Cannot create resource instance

Do you have some errors showing up in the Tomcat error log? One
possible cause for this problem is that you don't have the Jackrabbit jar files in the correct place. A safe alternative is to just put all
the jars in common/lib, but a more correct way would be to put only
the jcr-1.0.jar in the common class loader and the Jackrabbit jar file
(and the dependencies) in the server class loader.

BR,

Jukka Zitting

--
Yukatan - http://yukatan.fi/ - [EMAIL PROTECTED]
Software craftmanship, JCR consulting, and Java development





Reply via email to