1

JBoss 6.0 AS の localhost にアプリケーションをデプロイしています。このアプリケーションには、ExampleEJB と呼ばれる 1 つのリモート EJB Bean があります。今、私は ExampleEJB を使用する単純なクライアント アプリケーションをコーディングしようとしています。このクライアント アプリケーションは、どのアプリケーション サーバーにもデプロイされません。アイデアは、単純な Java SE クライアント プログラムをコーディングすることです。ルックアップを実行しようとして、次のように記述しました。

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL,"localhost:1099");
env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

InitialContext ic = new InitialContext(env);

この時点で、私は 2 つのアプローチを試しました。最初のアプローチは、Java EE 6 チュートリアル ( http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html )で例示されているような直接ルックアップを実行することでした。

ExampleEJB exampleEJB = (ExampleEJB) ic.lookup("java:global/myApp/ExampleEJB");

2 番目の試みは、JNDI コンテキスト環境を取得してから、この環境から目的の Bean を取得することでした。

Context envContext  = (Context)ic.lookup("java:/comp/env");
envContext.lookup(...)

問題は、「javax.naming.NameNotFoundException: global not bound」および「javax.naming.NameNotFoundException: comp not bound」という例外をそれぞれ受け取ることです。希望どおりにルックアップを実行できません。

誰かが手がかりを持っていますか?

4

2 に答える 2

1

わかりました、私は私の問題を解決しました。JBoss JMX Management Console (デフォルトの場所は localhost:8080/jmx-console/) にアクセスすることで、JBoss 上の JNDI ツリーを視覚化できることがわかりました。JNDIView サービスを検索し、list メソッドを呼び出します。JNDI ツリーを視覚化することで、間違った場所を探していたことに気付きました。JBoss は私の EJB を次の場所に登録しました。

+- ExampleEar (class: org.jnp.interfaces.NamingContext)
  |   +- ExampleEJBImpl (class: org.jnp.interfaces.NamingContext)
  |   |   +- remote-br.exemplo.ejb.ExampleEJB (class: Proxy for: br.example.ejb.ExampleEJB)
  |   |   +- remote (class: Proxy for: br.example.ejb.ExampleEJB)

次の場所でルックアップを実行するようにコードを変更しました。

ExampleEJB exampleEJB = (ExampleEJB) ic.lookup("ExampleEar/ExampleEJBImpl/remote");

そしてすべてがうまくいきました。

于 2013-08-24T21:01:44.880 に答える