2009-05-07 12 views
3

Ich versuche auf ein Jackrabbit Repository zuzugreifen, das auf einem JBoss-Anwendungsserver über RMI bereitgestellt wird.Wie kann ich einen Server in der Standard-RMI-Registrierung für JBoss registrieren und von einem Client in einer anderen JVM darauf zugreifen?

Ich erhalte die folgende Ausnahme, wenn ich versuche, mit ClientRepositoryFactory.getRepository ('rmi: //xxx.xxx.xxx.xxx: 1099/imageserver') eine Verbindung zur Factory herzustellen. Aber wenn ich eine Webanwendung erstelle, die eine neue RMI-Registrierung auf dem Server mit einem anderen Port startet und Jackrabbit in dieser neuen Registrierung registriert, funktioniert es.

Allerdings muss ich dies mit der minimalen Optimierung auf die Standard-JBoss-Konfiguration arbeiten. Kann also jemand die Ursachen für das Problem beleuchten? Ich habe viele Beiträge zum gleichen Thema an anderer Stelle gesehen und wir haben alle plausiblen (und viele unplausible) Lösungsvorschläge ausprobiert.

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) 

Antwort

1

Ich denke, Sie müssen möglicherweise einen JNP-Client verwenden, der sich von IIOP und JRMP unterscheidet. Das ist das Protokoll setzt JBoss in 1099. Dies bedeutet, dass Sie den ersten Zusammenhang mit so etwas wie konfigurieren, müssen möglicherweise:

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(); 

Oder sein können Sie Ihren eigenen RMI-Server innerhalb eines JBoss Ohrs und veröffentlichen in einem anderen Hafen beginnen sollen .

Prost.