@Stateless
2 つのインターフェイス (リモートとローカル) を実装する 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 からの要求に応じて、注釈を参照するために使用しているパッケージを追加しています。
WeatherDataBeanには次のものがあります。
import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.inject.Inject;
リソースには次のものがあります。
import javax.enterprise.inject.Produces; import javax.faces.context.FacesContext; import javax.inject.Singleton; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;