我正在尝试为 Jetty 中的 Jackrabbit 存储库工厂设置 JNDI 资源。问题是我似乎将 JNDI 作为 webapp 范围。我需要它是 JVM 范围的。据我从文档中了解到的,您需要指定一个空参数,如下所示 ( <Arg></Arg>
) 才能执行此操作(在此处解释)。
我有两个 webapps 部署到 Jetty,我需要它们共享相同的 JNDI。如果他们不共享它,Jackrabbit 会尝试初始化两次并失败,这会破坏我的整个应用程序。
我通过调试器运行代码,我可以看到第一个被访问并需要 JNDI 查找 Jackrabbit 存储库的 web 应用程序,获取 的实例BindableRepositoryFactory
并将记录正确添加到cache
对象。cache
但是,为JNDI 查找创建了一个完全不同的对象。这显然仍然是空的,因此创建了一个新实例,这把事情搞砸了。
我正在使用码头 7.6.2.v20120308。这是我的 jetty-jndi.xml:
<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 的 pom 文件中,我有以下相关设置告诉 Jetty 使用 JNDI 和 Plus 设置 xml-s:
<jettyConfig>${project.build.directory}/jetty/etc/jetty-plus.xml,${project.build.directory}/jetty/etc/jetty-jndi.xml</jettyConfig>
在 jetty-plus.xml 我有:
<!-- =========================================================== -->
<!-- Sequence of configurations to defining Plus features. -->
<!-- =========================================================== -->
<Array id="plusConfig" type="java.lang.String">
<Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
<Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item> <!-- Add for JNDI -->
<Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item> <!-- Add for JNDI -->
<Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item>
<Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item> <!-- Not needed for Jetty-8 -->
</Array>
<!-- =========================================================== -->
<!-- Apply plusConfig to all webapps for this Server -->
<!-- =========================================================== -->
<Call name="setAttribute">
<Arg>org.eclipse.jetty.webapp.configuration</Arg>
<Arg>
<Ref id="plusConfig"/>
</Arg>
</Call>
有什么想法我可能做错了吗?
提前谢谢了!:)