0

私は EJB 3.1 の世界に不慣れで、JBoss Application Server 7.1 でいくつかの基本を習得しようとしています。

現時点では、本当に基本的な問題で立ち往生しています。サーバー上の Bean が別の Bean を使用したい場合、 InitialContext.lookup() メソッドを使用する必要があります。文献を見ると、次のような呼び出しが見つかりました。

TheBean = (<Interface>) new InitialContext().lookup("<NameOfTheBean>/local");

しかし、この電話は私にはうまくいきません。次のようなエラーが発生するたびに:

javax.ejb.EJBException: javax.naming.NameNotFoundException

何時間も解決策を探した後、次のような別の呼び出しを使用するコード例を見つけました。

TheBean = (<Interface>) new InitialContext().lookup("ejb:/<Package>//<NameOfTheBean>!<Package>.<Interface>");

この解決策は私にとってはうまくいきますが、問題はなぜですか? 最初の呼び出しで例外が発生し、2 番目の呼び出しでは問題なく動作する理由を誰かが知っていますか?

どうもありがとう!

4

1 に答える 1

2

なんで?JBoss の異なるバージョンは、JNDI 名前空間に異なるデフォルト名で Bean をデプロイします。

  ctx.lookup("BeanName/local")

JBoss 4.xx 以降では適切でしたが、JBoss v7 では適切ではありませんでした。たとえば、JB7 の server.log で、Bean が JNDI 名にどのようにマッピングされたかを確認できます (java:/jboss/exported/... を参照し、それが 2 回目の呼び出しにどのように対応するかを参照してください)。

13:57:05,550 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC サービス スレッド 1-4) デプロイメント ユニット デプロイメント「navi-ejb3.jar」の ProductionHistoryBean という名前のセッション Bean の JNDI バインディングは次のとおりです。 :

        java:global/navi-ejb3/ProductionHistoryBean!navi.ejb3.production.history

.ProductionHistoryRemote

        java:app/navi-ejb3/ProductionHistoryBean!navi.ejb3.production.history.Pr

生産履歴リモート

        java:module/ProductionHistoryBean!navi.ejb3.production.history.Productio

nHistoryRemote

        java:jboss/exported/navi-ejb3/ProductionHistoryBean!navi.ejb3.production

.history.ProductionHistoryRemote

        java:global/navi-ejb3/ProductionHistoryBean

        java:app/navi-ejb3/ProductionHistoryBean

        java:module/ProductionHistoryBean
于 2012-10-15T08:01:45.793 に答える