gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:28 25 4
gpt4 key购买 nike

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

当我尝试使用 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 中公开的协议(protocol)。这意味着您可能需要使用以下内容配置初始上下文:

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 ear 中启动您自己的 RMI 服务器并在其他端口发布。

干杯。

关于java - 如何在 JBoss 的默认 RMI 注册表中注册服务器并从运行在另一个 JVM 中的客户端访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/833292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com