7

@Stateless2 つのインターフェイス (リモートとローカル) を実装する Bean があります。@LocalBeanインターフェイスなしのビューで Bean にアクセスするための注釈も追加しました。

@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote, WeatherDataBeanLocal {
    @Inject
    private EntityManager entityManager;

    public WeatherDataBean () {

    }
    // ....attributes, getter & setter methods ....
}

@Injectこの理由で、JBoss AS7 クイックスタートのこの例から取ったものを使用します。

CDI の「リソース プロデューサー」パターンを使用して、エンティティ マネージャーの昔ながらの @PersistenceContext インジェクションを CDI スタイルのインジェクションに「エイリアス」します。これにより、アプリケーション全体で一貫した注入スタイル (@Inject) を使用できます。

今、私は以前に使用しました:

@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;

EJB では問題なく動作します。しかし、@Inject注釈を使用すると、次のエラーが発生します。

WELD-001408 注入ポイント [[field] @Inject private ejb.WeatherDataBean.entityManager] で修飾子 [@Default] を持つタイプ [EntityManager] の満たされていない依存関係

クラス Resources を定義する方法は次のとおりです。

public class Resources {
     @SuppressWarnings("unused")
     @PersistenceContext(unitName="WeatherStationJPA")
     @Produces
     private EntityManager entityManager;

     @Produces
     FacesContext getFacesContext() {
         return FacesContext.getCurrentInstance();
     }
}

エンティティ マネージャーを挿入しようとすると、このエラーが発生するのはなぜですか?

編集: @LightGuard からの要求に応じて、注釈を参照するために使用しているパッケージを追加しています。

  1. WeatherDataBeanには次のものがあります。

    import javax.ejb.LocalBean;
    import javax.ejb.Stateless;
    import javax.inject.Inject;
    
  2. リソースには次のものがあります。

    import javax.enterprise.inject.Produces;
    import javax.faces.context.FacesContext;
    import javax.inject.Singleton;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
4

2 に答える 2

7

同様のエラーが発生しました。beans.xml ファイルを WEB-INF フォルダーに配置していないことが判明しました。beans.xml ファイルは、WEB-INF フォルダーにある空のファイルにすることができます。JBossAS はそのファイルをチェックして CDI サービスを開始します。

于 2013-05-20T13:24:05.693 に答える