2

したがって、私のアプリケーションは Jboss-server 7.1.1 final で開発されていますが、Jboss-server 4.2.3 で Ejb を参照する必要があります。EJBを呼び出すための私のコードは

String IP = "X.X.X.X";
String Port = "1234";
String Lookup = "dummy/dummy/dummy";

    Properties props = new Properties();
    props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
    String ejbServiceURL = "jnp://"+IP +":"+Port; 
    props.put("java.naming.provider.url", ejbServiceURL);

    try {
        log.debug("looking up ejb by servie url:"+ejbServiceURL);
        remoteEjb = (EjbRemote) new InitialContext(props).lookup(Lookup);            
        log.debug("found ejb from context returning it.");
    } catch (NamingException e) {
        log.error("exception operating on ejb bean:" + e, e);
    }

これは Jboss-4.2.3 アプリケーション環境では問題なく動作しますが、Jboss-7.1.1 Final では remoteEjb は常に null を返します。

私が間違っていることを教えてもらえますか?

4

1 に答える 1

6

EJB JNDI ルックアップは、JBoss 4.2.3 および Jboss 7.1 とは異なります。上記のコードは JBoss 4.2.3 では正しいですが、JBoss 7.1 では正しくありません。Jboss 7.1 では、次の設定を行う必要があります。

Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

Context context = new InitialContext(jndiProperties);

これで、次のように呼び出してルックアップを実行できます。

context.lookup("ejb-jndi-name-here");

さらに、ネーミング コンテキストも JBoss 4.2.3 と JBoss 7.1 で異なります。Jboss 7.1 では、jndi は次のようになります。ステートレス Bean の場合:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>

ステートフル Bean の場合:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful

ログ ファイルで ejb サービスが JBoss 7.1 にデプロイされたときのマッピング名も確認できます。

于 2012-12-03T14:07:17.327 に答える