ClassCastExceptionがでJNDI結果からオブジェクト参照のルックアップ
質問
私は、コンテナの外にEJB3のステートレスBeanを呼び出す問題を抱えている。
オブジェクト参照を取得するためのコード:
Context envCtx = (Context) context.lookup("ejb");
MyObject o = (MyObject) envCtx.lookup(MyObject);
例外の2行目の結果:
java.lang.ClassCastException: javax.naming.Reference
私はJBoss.org 5.1.0 GAを使用します。
私は、これはクライアントライブラリのバージョンが間違っによるものかもしれない疑いがあるいくつかの他の記事に基づいて。しかし、私はjarファイルに含めるべきライブラリのjar(s)はわからないんですか? (私は5.0.4.GAのjnpserverを使用してエラーが発生します。)
解決
はJBossの場合、あなたのコードは、そのようになるはずです
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
Context context = new InitialContext(properties);
(EchoBeanRemote) c.lookup("EchoBean/remote");
ご希望の場合は、、あなたは(ニーズがクラスパス上に存在すること)jndi.properties
ファイルでJNDIのenvironementの設定を置くことができます:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
と非引数InitialContext
コンストラクタを使用します:
Context context = new InitialContext();
(EchoBeanRemote) c.lookup("EchoBean/remote");
これは明らかに、よりポータブルでます。
そして両方の場合には、あなたは、クライアント側のクラスパス上にjbossall-client.jar
deが必要になります。
PS:あなたはのグローバルJNDI名をチェックすることができ、あなたのBeanは、WebベースのJMXコンソール(それがまだ存在する場合)ののJNDI表示の中で登録されています<。 / P>
所属していません StackOverflow