2012-04-13 52 views
0

我正在嘗試爲Jetty中的Jackrabbit存儲庫工廠設置JNDI資源。問題是我似乎正在將JNDI作爲webapp的範圍。我需要它是JVM範圍。據我瞭解的文檔,您需要指定一個空參數,如下所示(<Arg></Arg>)爲了這樣做(解釋here)。如何讓Jetty使用JVM作用域的JNDI?

我有兩個webapps部署到Jetty,我需要他們共享相同的JNDI。如果他們不分享它,Jackrabbit會嘗試進行兩次初始化,並且失敗會導致我的整個應用程序崩潰。

我通過調試器運行代碼,我可以看到第一個被訪問並需要JNRL查找Jackrabbit存儲庫的Web應用程序獲取BindableRepositoryFactory的實例,並正確地將記錄添加到cache對象。但是,在JNDI查找時爲cache創建了完全不同的對象。這顯然仍然是空的,因此創建了一個新的實例,從而將事情搞砸了。

我正在使用Jetty 7.6.2.v20120308。 這裏是我的碼頭,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> 

在POM文件,其中我是從,我有以下的相關設定,讓碼頭調用碼頭使用JNDI和Plus設置xml -s:

<jettyConfig>${project.build.directory}/jetty/etc/jetty-plus.xml,${project.build.directory}/jetty/etc/jetty-jndi.xml</jettyConfig> 

在碼頭-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> 

任何想法我可能做錯了什麼?

非常感謝提前! :)

+0

當您在配置中正常部署到碼頭時它工作正常嗎?我可以看到這對jetty-maven插件來說可能是一個問題。 – 2012-04-13 15:02:19

+0

@jessemcconnell:請您詳細說明疑似「潛在問題」?不,我還沒有在獨立的碼頭嘗試過它。我現在會這樣做。但是,我不認爲它會有很大的不同。畢竟Maven插件正在調用Jetty服務器的代碼。 – carlspring 2012-04-13 15:22:56

+0

部分是肯定的,但jetty-maven插件處理類加載器與傳統分發有點不同。自從我開始工作以來,它已經很年輕了,但我知道它有一些特殊情況可以用來從maven項目中獲取依賴關係,我可以看到它可能會以不同的方式對待jndi goop。如果這適用於發行版,那麼在codehaus jira上爲它打開一個bug,我們來看看。如果它在發行版中沒有按預期工作,那麼在RT-> Jetty – 2012-04-13 15:41:44

回答

0

這似乎是Jetty的全局JNDI資源配置中的一個錯誤。

我在Jetty's bugzilla提交了一個錯誤,並且將接受這個答案爲正確的,儘管事實上它是無法解決的。

+0

對於任何在此頁面上發生絆腳石的人來說,這不是一個實際上在碼頭上的錯誤,而是web應用程序的錯誤配置。對該錯誤的參考全面說明了web應用程序設置的錯誤。 – Jan 2013-02-21 01:40:40

相關問題