簡體   English   中英

如何在JBoss的默認RMI注冊表中注冊服務器並從另一個JVM中運行的客戶端訪問它?

[英]How do I register a server in the default RMI registry for JBoss and access it from a client running in another JVM?

我試圖通過RMI訪問部署在JBoss應用程序服務器上的Jackrabbit存儲庫。

當我嘗試使用ClientRepositoryFactory.getRepository('rmi://xxx.xxx.xxx.xxx:1099 / imageserver')連接到工廠時,我收到以下異常。 但是,如果我創建一個Web應用程序,在服務器上使用不同的端口啟動新的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)

我認為您可能需要使用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();

或者您可能應該在JBoss耳朵中啟動自己的RMI服務器並在其他端口發布。

干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM