代码之家  ›  专栏  ›  技术社区  ›  Brian Matthews

如何在JBoss的默认RMI注册表中注册服务器,并从另一个JVM中运行的客户机访问它?

  •  3
  • Brian Matthews  · 技术社区  · 17 年前

    我正在尝试访问 Jackrabbit 存储库部署在 JBoss 通过RMI的应用服务器。

    当我尝试使用Cli连接到工厂时,出现以下异常entRepositoryFactory.getRepository存储库('rmi://xxx.xxx.xxx.xxx:1099/imageserver')。但是,如果我创建一个web应用程序,在服务器上用不同的端口启动一个新的RMI注册表,并在新的注册表中注册Jackrabbit,它就可以工作了。

    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 回复  |  直到 17 年前
        1
  •  2
  •   Martín Schonaker    16 年前

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

    或者您应该在jbossear中启动自己的RMI服务器,并在其他端口发布。

    干杯。