我正在尝试为Jetty中的Jackrabbit存储库工厂设置JNDI资源。问题是我似乎将JNDI作为webapp作用域。我需要它是JVM作用域。据我所知,你需要指定一个null arg,如下所示(<Arg></Arg>
),以便这样做(解释here)。
我有两个部署到Jetty的webapps,我需要它们共享相同的JNDI。如果他们没有共享它,Jackrabbit会尝试初始化两次并失败,这会破坏我的整个应用程序。
我通过调试器运行代码,我可以看到第一个访问的Web应用程序需要对Jackrabbit存储库进行JNDI查找,获取BindableRepositoryFactory
的实例并正确地将记录添加到{{1对象。但是,在JNDI查找时为cache
创建了一个完全不同的对象。这显然仍然是空的,因此会创建一个新的实例,这会搞砸。
我正在使用Jetty 7.6.2.v20120308。 这是我的jetty-jndi.xml:
cache
在我正在调用jetty的pom文件中,我有以下相关设置告诉Jetty使用JNDI和Plus设置xml -s:
<New class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jndi:comp/env/jcr/repository</Arg>
<Arg>
<New class="javax.naming.Reference" id="reference">
<Arg>javax.jcr.Repository</Arg>
<Arg>org.apache.jackrabbit.core.jndi.BindableRepositoryFactory</Arg>
<Arg>null</Arg>
<Call name="add" id="reference">
<Arg>
<New class="javax.naming.StringRefAddr">
<Arg>configFilePath</Arg>
<Arg><SystemProperty name="jetty.home" default="."/>/jackrabbit/repository.xml</Arg>
</New>
</Arg>
</Call>
<Call name="add" id="reference">
<Arg>
<New class="javax.naming.StringRefAddr">
<Arg>repHomeDir</Arg>
<Arg><SystemProperty name="jetty.home" default="."/>/jackrabbit</Arg>
</New>
</Arg>
</Call>
</New>
</Arg>
</New>
在jetty-plus.xml中我有:
<jettyConfig>${project.build.directory}/jetty/etc/jetty-plus.xml,${project.build.directory}/jetty/etc/jetty-jndi.xml</jettyConfig>
任何想法我可能做错了什么?
非常感谢提前! :)