Не удалось получить доступ к хранилищу 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&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>