2009-05-07 4 views
3

RMI経由でJBossアプリケーションサーバーにデプロイされたJackrabbitリポジトリにアクセスしようとしています。JBoss用のデフォルトのRMIレジストリにサーバーを登録し、別のJVMで実行されているクライアントからサーバーにアクセスするにはどうすればよいですか?

ClientRepositoryFactory.getRepository( 'rmi://xxx.xxx.xxx.xxx:1099/imageserver')を使用して工場に接続しようとすると、次の例外が発生します。しかし、別のポートを持つサーバー上で新しいRMIレジストリを起動し、その新しいレジストリにJackrabbitを登録するWebアプリケーションを作成した場合、それは機能します。

しかし、私はこれを、デフォルトの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) 

答えて

1

私は、IIOPとJRMPとは異なるJNPクライアントを使用する必要があると思います。

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サーバーを起動して、いくつかの他のポートに公表すべきことがありますこれはこれはあなたのようなもので、初期コンテキストを設定する必要がありますことを意味JBossは1099で公開されたプロトコルです。

乾杯。

関連する問題