質問

私は、コンテナの外に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.jardeが必要になります。

PS:あなたはのグローバルJNDI名をチェックすることができ、あなたのBeanは、WebベースのJMXコンソール(それがまだ存在する場合)ののJNDI表示の中で登録されています<。 / P>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top