- - PR -
■JBOSSで作成したセッションビーンに外部からアクセスするとlookupに失敗します。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-24 20:31
正しくJNDIを使いこなせていないためだと思われるのですが、外部からremoteタイプでStatelessなセッションビーンを
見にいけなくて困っております。Local的な呼び出し時にはJNDI名は取り出せていたようなのですが、クライアントから アクセスしようとした瞬間、たどり着けなくなりました。いろいろと試行錯誤してみたのですがうまくいきません。 どうやらlookupできないようなのです。 今JBOSS(v 3.2.5)をeclipseで立ち上げ、特定のセッションビーン(Fos2FecBean)に対してアクセスする クライアント(RMIClient)を作成し、クライアントモジュールのほうは、コンソールからキックするようにしてみました。 接続先のJBOSSサーバーのIPアドレス(fecIp)だけパラメータ設定できるようにして 【コーディング】 ◆InitialContextをProperties引数つきコンストラクタを使用した場合 Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "iiop://" + fecIp +":900"); Context initial = new InitialContext(env); Object obj = initial.lookup(Fos2FecHome.JNDI_NAME);//COMP_NAME JNDI_NAME ・・・ 【実行】 クライアントをキックするのに必要なJARをとりあえず拾い集め set JBOSS_CLIENT=%JBOSS_HOME%\client set JBOSS_CP= set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jboss-client.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jboss-common-client.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jbosssx-client.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jboss-jaas.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jboss-j2ee.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jnp-client.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jnet.jar set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\log4j.jar set FEC_CLIENT_CP=%JBOSS_CP%;%FEC_MODULE% java -classpath %FEC_CLIENT_CP% fec.RMIClient 172.xx.xx.xx 2> a.txt のようにしたところ、lookup でCommunicationExceptionが発生し、落ちてしまいます。 【結果】 log4j:WARN No appenders could be found for logger (org.jnp.interfaces.NamingContext). log4j:WARN Please initialize the log4j system properly. javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1119) at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1196) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:516) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:509) at javax.naming.InitialContext.lookup(Unknown Source) at fec.RMIClient.communicateFEC(RMIClient.java:182) at fec.RMIClient.main(RMIClient.java:50) Caused by: java.net.SocketTimeoutException: Receive timed out at java.net.PlainDatagramSocketImpl.receive0(Native Method) at java.net.PlainDatagramSocketImpl.receive(Unknown Source) at java.net.DatagramSocket.receive(Unknown Source) at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1089) ... 6 more 何か設定で足りないところなどあるのでしょうか。 お分かりの方がいらっしゃいましたら、よろしくご教授ください。よろしくお願いいたします。 INITIAL_CONTEXT_FACTORYに関しても他にもいろいろとあると思うのですが、 現在使用しているJBOSSサーバーのデプロイ環境でjava.naming.factory.initialをGREPしてみると jms-ds.xmlというファイルしかHITせず、org.jnp.interfaces.NamingContextFactoryでした。 他に、com.sun.jndi.cosnaming.CNCtxFactoryも試してみましたが、これもだめでした。 <!-- The JMS provider loader --> <mbean code="org.jboss.jms.jndi.JMSProviderLoader" name="jboss.mq:service=JMSProviderLoader,name=JMSProvider"> <attribute name="ProviderName">DefaultJMSProvider</attribute> <attribute name="ProviderAdapterClass"> org.jboss.jms.jndi.JNDIProviderAdapter </attribute> <!-- The queue connection factory --> <attribute name="QueueFactoryRef">java:/XAConnectionFactory</attribute> <!-- The topic factory --> <attribute name="TopicFactoryRef">java:/XAConnectionFactory</attribute> <!-- Uncomment to use HAJNDI to access JMS <attribute name="Properties"> java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost:1100 </attribute> --> </mbean> 【環境】 Windows XP SP2 eclipse 3.0.1 jboss 3.2.5 他に試してみたこと。これはこれでだめなのだと思いますが。 【コーディング】 ◆InitialContextをデフォルトコンストラクタを使用した場合 Context initial = new InitialContext(); Object obj = initial.lookup(Fos2FecHome.JNDI_NAME);//COMP_NAME JNDI_NAME 【結果】 javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source) at fec.RMIClient.communicateFEC(RMIClient.java:182) at fec.RMIClient.main(RMIClient.java:50) |
|
投稿日時: 2005-05-24 21:05
Firewall ではじかれているということはないでしょうか?
|
|
投稿日時: 2005-05-24 21:30
インギさんレスありがとうございます。
ファイアーウォールは無効にしてあります。 ■再挑戦してみた結果報告です。 InitialContextのコンストラクタ引数を以下に変更して再度試してみたのですが env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");// 変更せず env.put(Context.PROVIDER_URL, "iiop://" + fecIp +":900");// 変更前 を env.put(Context.PROVIDER_URL, "" + fecIp +":1099");// 変更後 に変更し env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");// 追加 を追加すると 例外の結果が少し変わりました。 Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/jboss/tm/TransactionPropagationContextFactory; at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Unknown Source) at java.lang.Class.getDeclaredField(Unknown Source) at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source) at java.io.ObjectStreamClass.access$600(Unknown Source) at java.io.ObjectStreamClass$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(Unknown Source) at java.io.ObjectStreamClass.lookup(Unknown Source) at java.io.ObjectStreamClass.initNonProxy(Unknown Source) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) ... at java.rmi.MarshalledObject.get(Unknown Source) at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:30) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:552) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:509) at javax.naming.InitialContext.lookup(Unknown Source) at fec.RMIClient.communicateFEC(RMIClient.java:188) at fec.RMIClient.main(RMIClient.java:50) Factoryが違うのでしょうか。。。? |
|
投稿日時: 2005-05-24 22:06
自己解決いたしました!!
set JBOSS_CP=%JBOSS_CP%;%JBOSS_CLIENT%\jboss-transaction-client.jar を追加したらいけました。 jboss 3.2.5 ではこのJARを含めないとこけるんですね。。。 勉強になりました。 お騒がせいたしました。 |
|
投稿日時: 2005-05-24 22:08
JBossなら、プロバイダURLはjnp://IPアドレス:1099ではないですか?
|
|
投稿日時: 2005-05-24 22:15
env.put(Context.PROVIDER_URL, "" + fecIp +":1099");//
でいけてしまったのですが、 jnp://IPアドレス:1099 も試してみますね。。。 |
|
投稿日時: 2005-05-24 22:46
jnp://IPアドレス:1099
でいけました。jndi.properties に設定すればいけます。けどiiopのほうはだめでした。?? 感想:それにしてもRMIのlookupってえらい遅いですね。。。 UDPの100倍くらい遅い印象。。。ていったら大げさですかね。 |
1