Не удалось получить доступ к хранилищу Jackrabbit из контейнера karaf

Я пытаюсь получить доступ к хранилищу кролика через rmi из контейнера karaf.

Я разработал верблюжий маршрут, который сохраняет файл в хранилище крольчихи

<bean id="repository"
    class="org.apache.jackrabbit.rmi.repository.URLRemoteRepository">
    <argument value="http://localhost:8020/rmi" />
</bean>


<camelContext id="blueprintContext" trace="false"
    xmlns="http://camel.apache.org/schema/blueprint">
    <route id="depotfichiersurjcr">


        <from uri="file:/C:/data?recursive=false&amp;noop=true" />
        <!-- log message="message1 ${body}"/ -->
        <setHeader headerName="CamelJcrNodeName">
            <constant>node</constant>
        </setHeader>
        <setHeader headerName="my.contents.property">
            <simple>${bodyAs(String)}</simple>
            <!-- constant>content</constant -->
        </setHeader>
        <setBody>
            <constant></constant>
        </setBody>
        <to  uri="jcr://admin:admin@repository/default?deep=true&eventTypes=3&noLocal=false" />
        <to uri="direct:a" />
    </route>

</camelContext>

маршрут отлично работает с верблюдом mvn: run

тот же маршрут не работает внутри контейнера karaf, я получил:


javax.jcr.RepositoryException: удаленный репозиторий не найден: ресурс по адресу http://localhost:8020/rmi не может быть получен по адресу org.apache.jackrabbit.rmi.repository.URLRemoteRepositoryFactory.getRemoteRepository(URLRemoteRepositoryFactory.java:84):org.apache.jackrabbit.jackrabbit-jcr-rmi:2.6.2] at org.apache.jackrabbit.rmi.repository.AbstractRemoteRepositoryFactory.getRepository(AbstractRemoteRepositoryFactory.java:57)[1626:org.apache.jackrabbitcjj. -rmi: 2.6.2] в org.apache.jackrabbit.rmi.repository.ProxyRepository.login(ProxyRepository.java:199)[1626:org.apache.jackrabbit.jackrabbit-jcr-rmi:2.6.2] в орг.apache.jackrabbit.rmi.repository.ProxyRepository.login(ProxyRepository.java:233)[1626:org.apache.jackrabbit.jackrabbit-jcr-rmi:2.6.2] в com.sagemcom.Content.process(Content.java:21)[1618: содержимое:0.0.1.SNAPSHOT] в org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)[171:org.apache.camel.camel-core:2.13.2] в org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[171:org.apache.camel.camel-core:2.13.2] в org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[171]:org.apache.camel.camel-core:2.13.2] at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[171:org.apache.camel.camel-core:2.13.2] в org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[171:org.apache.camel.camel-core:2.13.2] в org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[171:org.apache.camel.camel-core:2.13.2] at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[171:org.apache.camel.camel-core:2.13.2] в org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:157)[171:org.apache.camel.camel-core:2.13.2] в орг.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:68)[171:org.apache.camel.camel-core:2.13.2] по адресу java.util.TimerThread.mainLoop(Timer.java:555)[:1.7.0_75] at java.util.TimerThread.run(Timer.java:505)[:1.7.0_75] Причина: java.io.IOException: сервер вернул код ответа HTTP: 503 для URL: http://localhost:8020/rmi rmi на sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)[:1.7.0_75] на java.net.URL.openStream(URL.java:1037)[:1.7.0_75] at org.apache.jackrabbit.rmi.repository.URLRemoteRepositoryFactory.getRemoteRepository(URLRemoteRepositoryFactory.java:61)[1626:org.apache.jackrabbit.jackrabbit-jcr-rmi:2.6 ] ... еще 15

Есть ли какие-либо конкретные конфигурации, которые нужно сделать, чтобы контейнер karaf видел URL-адрес зайчика, любое предложение будет приветствоваться, спасибо.

1 ответ

В случае тестового набора конфигурация взята из базового класса, который может потребоваться добавить в контекст верблюда.

Вот пример конфигурации из верблюжьего примера для rmi:

    <bean id="rmiServer" class="java.rmi.registry.LocateRegistry"     factory-method="createRegistry">
        <constructor-arg index="0" value="${port}"/>

  </bean>

<camelContext xmlns="http://camel.apache.org/schema/spring" depends-on="rmiServer">
<endpoint id="rmiService" 
uri="rmi://localhost:${port}/helloServiceBean?remoteInterfaces=org.apache.camel.example.osgi.HelloService"/> 
<!-- expose a RMI service as a Camel route -->
<camel:route> 
<from ref="rmiService"/> 
<to uri="log:Incoming request on RMI"/> 
<to uri="bean:helloServiceBean"/> 
</camel:route> </camelContext>

Теперь это обычно требуется, если вы используете rmi.

В случае, который вы только что описали, нам нужна JndiRegistry. Можете ли вы попробовать добавить следующее в контекст верблюда

<bean id="registry" class="org.apache.camel.impl.JndiRegistry"/>

В случае JCR Jackrabbit попробуйте следующую конфигурацию бина:

    <bean id="repository"                    class="org.apache.jackrabbit.rmi.repository.URLRemoteRepository">
                <argument value="http://localhost:8020/rmi" />
  </bean>
Другие вопросы по тегам