0

JettyのJackrabbitリポジトリファクトリのJNDIリソースをセットアップしようとしています。問題は、WebアプリケーションスコープとしてJNDIを取得しているように見えることです。JVMスコープにする必要があります。ドキュメントから理解できる限り、これを行うには、以下に示すようにnull引数を指定する必要があります( )(ここで<Arg></Arg>説明します)。

Jettyに2つのWebアプリケーションをデプロイしていて、それらが同じJNDIを共有している必要があります。彼らがそれを共有していない場合、Jackrabbitは2回初期化を試みて失敗し、アプリ全体が壊れます。

デバッガーを介してコードを実行したところ、アクセスされ、JackrabbitリポジトリーのJNDIルックアップが必要な最初のWebアプリが、のインスタンスを取得し、オブジェクトBindableRepositoryFactoryにレコードを正しく追加していることがわかります。ただし、 JNDIルックアップ時にcache完全に異なるオブジェクトが作成されます。cacheそれは明らかにまだ空であるため、新しいインスタンスが作成され、問題が発生します。

Jetty7.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>

私が間違っているかもしれないアイデアはありますか?

よろしくお願いします!:)

4

1 に答える 1

0

これは、JettyのグローバルJNDIリソース構成のバグのようです。

Jettyのbugzillaにバグを報告しましたが、解決策はありませんが、この回答は正しいものとして受け入れます。

于 2012-04-13T16:41:05.827 に答える