- - PR -
jboss+tomcat クライアント側からリモートでアクセス(解決)
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-06-22 12:10
はじめまして、よろしくお願いします。
リモートクライアント(TOMCATを用いたサーブレットから)で別のEJBサーバにアクセスしようとしています。 クライアントとサーバの構成は次の通りです。 クライアント ・WINDOWS XP ・TOMCAT 4.1 ・J2SDK 1.4.2_04 サーバ ・WINDOWS XP ・JBOSS 3.0.7 ・J2SDK 1.4.2_04 クライアント側(TOMCAT_HOME\WEBAPPS\クライアント.WAR)にJBOSS_HOME\client内のjarファイルをセットし、jndiの設定もコーディングしたのですが、実行後、 javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] と表示されてしまいました。 サーバと通信はされているようなのですが、サーバからの反応を待っている間にタイムアウトしたようです。 そうすると、クライアント側でタイムアウトの値を変更すれば、タイムアウトせずに実行されると思うのですが、その設定方法をどなたかご教授願いませんでしょうか? 私の解釈が間違って入れば、その点もご指摘ください。 よろしくお願いいたします。 [ メッセージ編集済み 編集者: 優子 編集日時 2004-06-22 13:44 ] [ メッセージ編集済み 編集者: 優子 編集日時 2004-06-24 15:50 ] | ||||
|
投稿日時: 2004-06-22 13:50
JNDIのlookupでタイムアウトになっているようですが、JNDIの呼び出しはどのようにしている
のでしょうか? サーブレットでやる前に、まずコンソールアプリかなにかでテストしてみては? | ||||
|
投稿日時: 2004-06-22 14:53
UKさん、ご返事どうもありがとうございました。
ご指摘のあった点ですが、クライアントのサーブレットに、 Hashtable properties = new Hashtable(); properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); properties.put("java.naming.provider.url","http://EJBサーバのipアドレス:1099"); properties.put"java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); initContext = new InitialContext(properties); Object ref = initContext.lookup(JNDI_NAME); Object obj = PortableRemoteObject.narrow(ref, CounterHome.class); このようにハードコーディングしました。 最初は、 properties.put("java.naming.provider.url","http://EJBサーバのipアドレス:1099"); の部分を、 properties.put("java.naming.provider.url","EJBサーバのipアドレス:1099"); としていたのですが、その場合、tomcatが javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:java.net.MalformedURLException: no protocol: Files/Apache] というエラーを発生していたのです。 リモートクライアントが、EJBサーバーとアクセスするプロトコルは、サーブレットを使用している所から推測してhttpではないかと思い、且つ、 MalformedURLExceptionがURLの書式が無効であることを表すので、 properties.put("java.naming.provider.url","EJBサーバのipアドレス:1099"); にhttp://を追加した、 properties.put("java.naming.provider.url","http://EJBサーバのipアドレス:1099"); という記述にしてみたのです。 ちなみに、コンソールアプリケーションからも実行を試してみて、そちらは成功しています。その時のJNDI指定は、 properties.put("java.naming.provider.url","EJBサーバのipアドレス:1099"); のままで上手くいきました(リモート・同じEJBサーバ上どちらも成功)。 さらに追加で、同じEJBサーバ上で、 properties.put("java.naming.provider.url","http://EJBサーバのipアドレス:1099"); としてみると、最初の記事で申したようにタイムアウトしてしまいました。 http:と記述するのは何かを参考にしたという事ではありません、私の我流です。。 でも元に戻すとURL指定が違うと言われるのが引っかかります。 [ メッセージ編集済み 編集者: 優子 編集日時 2004-06-22 15:03 ] [ メッセージ編集済み 編集者: 優子 編集日時 2004-06-22 15:05 ] | ||||
|
投稿日時: 2004-06-22 16:07
JNDIのプロトコル指定でもっとも一般的なのはIIOPですが、JBossの場合はJNPというプロトコル のようですね。ですので、jnp:というプレフィックスをつけてみてください。 | ||||
|
投稿日時: 2004-06-22 16:26
ukさん、ご返答ありがとうございました。
properties.put("java.naming.provider.url","jnp://EJBサーバのipアドレス:1099"); と変更してみたところ、同じEJB上からではアクセスできるようになったのですが、リモートからでは、tomcatが、 javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:java.net.MalformedURLException: no protocol: Files/Apache] というメッセージを出しました (つまり、一番最初に実装していた方法の、 properties.put("java.naming.provider.url","EJBサーバのipアドレス:1099"); の時の結果と同じという事です)。 EJBサーバでは実行でき、クライアントからではだめ(コンソールからではOK)という状態は変わりませんでした。 java.net.MalformedURLException: no protocol: Files/Apache] のno protocol: Files/Apacheが気になります。でもApacheなんて使ってないのに。。。 EJBサーバのコンテナにはjettyを使っていますが、これがクライアントの方のコンテナに当たるtomcatと違うから駄目、っていうことはないですよね? | ||||
|
投稿日時: 2004-06-22 16:37
結果だけ見ると、JBossのクライアントクラスを認識できていないのかな、と思います。
JBossのクライアントjarファイルをWar内ではなく%TOMCAT_HOME%/common/libに入れてみたら どうなるでしょうか? | ||||
|
投稿日時: 2004-06-22 17:36
ukさん、度々申し訳ありません。
/common/libに入れて実行しても、やはり、 javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:java.net.MalformedURLException: no protocol: Files/Apache] となり、同様の結果になってしまいました。 | ||||
|
投稿日時: 2004-06-23 11:06
"jnp://EJBサーバのipアドレス:1099"の部分を"jnp://EJBサーバのipアドレス:1099/"と
言う風に、最後にスラッシュを入れたらどうなりますか? | ||||
