Я пытаюсь настроить ресурс JNDI для фабрики репозиториев Jackrabbit в Jetty. Проблема в том, что я, кажется, получаю JNDI в качестве веб-приложения. Мне нужно, чтобы это было в области JVM. Насколько я понял из документов, для этого вам нужно указать нулевой аргумент, как показано ниже (<Arg></Arg>
) (объяснение здесь).
У меня есть два веб-приложения, развернутые в Jetty, и мне нужно, чтобы они использовали один и тот же JNDI. Если они не делятся им, Jackrabbit дважды пытается инициализироваться и терпит неудачу, что ломает все мое приложение.
Я пропустил код через отладчик и вижу, что первое веб-приложение, к которому обращаются и которому требуется поиск JNDI для репозитория Jackrabbit, получает экземпляр 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, из которого я вызываю причал, у меня есть следующие соответствующие настройки, которые говорят 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>
Any ideas what I might be doing wrong?
Спасибо заранее! :)