如何让Jetty使用JVM范围的JNDI?

如何让Jetty使用JVM范围的JNDI?,jetty,jndi,jackrabbit,maven-jetty-plugin,Jetty,Jndi,Jackrabbit,Maven Jetty Plugin,我正在尝试为Jetty中的Jackrabbit存储库工厂设置JNDI资源。问题是,我似乎把JNDI作为webapp的作用域。我需要它是JVM范围的。据我从文档中了解,您需要指定一个空参数,如下所示 我有两个部署到Jetty的WebApp,我需要它们共享同一个JNDI。如果他们不共享,Jackrabbit会尝试初始化两次,但失败了,这会破坏我的整个应用程序 我通过调试器运行了代码,可以看到第一个被访问并需要对Jackrabbit存储库进行JNDI查找的webapp获得了BindableReposi

我正在尝试为Jetty中的Jackrabbit存储库工厂设置JNDI资源。问题是,我似乎把JNDI作为webapp的作用域。我需要它是JVM范围的。据我从文档中了解,您需要指定一个空参数,如下所示

我有两个部署到Jetty的WebApp,我需要它们共享同一个JNDI。如果他们不共享,Jackrabbit会尝试初始化两次,但失败了,这会破坏我的整个应用程序

我通过调试器运行了代码,可以看到第一个被访问并需要对Jackrabbit存储库进行JNDI查找的webapp获得了BindableRepositoryFactory的一个实例,并正确地将记录添加到缓存对象中。但是,在JNDI查找时会为缓存创建一个完全不同的对象。这显然仍然是空的,因此会创建一个新实例,这会把事情搞砸

我使用的是Jetty 7.6.2.v20120308。 这是我的jetty-jndi.xml:

在调用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中,我有:

你知道我做错了什么吗


非常感谢

这似乎是Jetty的全局JNDI资源配置中的一个错误


我已在中提交了一个bug,并将接受此答案为正确答案,尽管它不是解决方案。

当您在发行版中正常部署到jetty时,它是否正常工作?我可以看出这是jetty maven插件的潜在问题。@Jessemconnell:你能详细说明一下可疑的潜在问题吗?不,我还没有在独立的码头上试过。我现在就这样做。然而,我并不期望它会有太大的不同。毕竟Maven插件调用的是Jetty服务器的代码。部分是的,但是Jetty Maven插件处理的类加载器与传统发行版略有不同。从我开始研究它已经有很多年了,但我知道它有很多从maven项目中提取依赖项的特殊情况,我可以看到它可能会以不同的方式对待jndi goop。如果这对发行版有效,那么在codehaus jira打开一个bug,我们来看看。如果它在发行版上不能像预期的那样工作,那么在eclipse bugzilla中的RT->Jetty下打开一个bug。我恐怕在独立Jetty下也会以同样的方式失败。对于任何在这个页面上绊倒的人来说,这实际上不是Jetty中的bug,而是webapp的错误配置。对这个bug的引用完整地解释了webapp设置的错误。
<jettyConfig>${project.build.directory}/jetty/etc/jetty-plus.xml,${project.build.directory}/jetty/etc/jetty-jndi.xml</jettyConfig>
<!-- =========================================================== -->
<!-- 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>