Как зарегистрировать сервер в реестре RMI по умолчанию для JBoss и получить к нему доступ от клиента, работающего в другой JVM? - PullRequest
3 голосов
/ 07 мая 2009

Я пытаюсь получить доступ к репозиторию Jackrabbit , развернутому на сервере приложений JBoss через RMI.

Я получаю следующее исключение, когда пытаюсь подключиться к фабрике с помощью ClientRepositoryFactory.getRepository ('rmi: //xxx.xxx.xxx.xxx: 1099 / imageserver'). Но если я создаю веб-приложение, которое запускает новый реестр RMI на сервере с другим портом, и регистрирую Jackrabbit в этом новом реестре, это работает.

Однако мне нужно, чтобы это работало с минимальной настройкой конфигурации JBoss по умолчанию. Так может кто-нибудь пролить свет на причины проблемы. Я видел много постов на ту же тему в другом месте, и мы испробовали все возможные (и многие неправдоподобные) предлагаемые решения.

org.apache.jackrabbit.rmi.client.RemoteRuntimeException: java.rmi.ConnectIOException: non-JRMP server at remote endpoint
    org.apache.jackrabbit.rmi.client.SafeClientRepository.getDescriptor(SafeClientRepository.java:81)
    com.btmatthews.freelancer.webapp.servlet.TestServlet.doGet(TestServlet.java:39)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause

java.rmi.ConnectIOException: non-JRMP server at remote endpoint
    sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:230)
    sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
    sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
    sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    java.rmi.Naming.lookup(Naming.java:84)
    org.apache.jackrabbit.rmi.client.ClientRepositoryFactory$1.getRemoteRepository(ClientRepositoryFactory.java:95)
    org.apache.jackrabbit.rmi.client.SafeClientRepository.getDescriptor(SafeClientRepository.java:77)
    com.btmatthews.freelancer.webapp.servlet.TestServlet.doGet(TestServlet.java:39)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

1 Ответ

1 голос
/ 30 июня 2010

Я думаю, что вам может понадобиться JNP-клиент, который отличается от IIOP и JRMP. Это протокол, который JBoss предоставляет в 1099 году. Это означает, что вам может потребоваться настроить начальный контекст следующим образом:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put("java.naming.factory.initial",
        "org.jnp.interfaces.NamingContextFactory");
env.put("java.naming.provider.url", "jnp://localhost:1099");
env.put("java.naming.factory.url.pkgs",
        "org.jboss.naming:org.jnp.interfaces");

Context context = new InitialContext(env);

Service s = (Service) context.lookup("service");

s.sayHello();

Или, может быть, вам следует запустить собственный RMI-сервер в ухе JBoss и опубликовать его в другом порту.

Приветствие.

...