[英]Do I need all classes on the client, server and registry for RMI to work?
[英]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.