1

シングルトンBeanをセッションBeanに注入する必要があります。以下は対応するクラスです。問題は、注入されたオブジェクトが常にnullであるということです。JBoss 7.0.1サーバーが起動時に表示したすべてのJNDIルックアップ文字列を試しました(つまり、デプロイメントのデプロイメントユニットサブデプロイメントでのGlobalBeanという名前のセッションBeanのJNDIバインディングは次のとおりです: ..)。また、GlobalBean.javaの@EJBアノテーションをコメントアウトし、インジェクション中に「ejb/GlobalBean」を使用しようとしました。しかし、運がありません。理由は何でしょうか?どうも。

GlobalBean.java:

@Startup
@Singleton
@Remote(GlobalBeanRemote.class)
@EJB(name="ejb/GlobalBean", beanName="GlobalBean", beanInterface=GlobalBeanRemote.class)  
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class GlobalBean implements GlobalBeanRemote
{
   // CODE
}

SessionBean.java:

@Stateful
public class SessionBean extends ParentBean
{
      @EJB(name="java:module/GlobalBean!project.framework.interfaces.GlobalBeanRemote")
      private GlobalBeanRemote globalBeanAPI3;

      // CODE
}
4

1 に答える 1

3

SessionBeanクラスで、@EJBのname属性をmappedNameに変更してみてください。

@EJB(mappedName="java:module/GlobalBean!project.framework.interfaces.GlobalBeanRemote")

もちろん、これは2つのBeanが同じモジュールにある場合にのみ機能します。

更新 Beanが別々のモジュールにある場合は、java:app名前空間を使用してみてください。

@EJB(mappedName="java:app ...")

java:app名前空間は、同じアプリケーション内にパッケージ化されたローカルエンタープライズBeanを検索するために使用されます。つまり、エンタープライズBeanは、複数のJavaEEモジュールを含むEARファイル内にパッケージ化されています。java:app名前空間を使用するJNDIアドレスは、次の形式です。

java:app[/モジュール名]/エンタープライズBean名[/インターフェース名]

また、GlobalBeanの@EJBアノテーションを削除してみてください。@EJBは、依存関係を定義するために使用されます。

于 2012-08-23T23:31:21.500 に答える