2
コンテナ管理のトランザクションを1つのクラスで使用し、そのサブクラスと共有したいと考えています。ここでJBoss - EntityManagerのインジェクトに失敗しました
私の抽象クラスです:
@TransactionManagement(TransactionManagementType.CONTAINER)
public abstract class AbstractDAO {
@PersistenceContext(unitName = "myDS")
protected EntityManager em;
@Resource
protected SessionContext context;
protected Logger log;
public AbstractDAO() {
log = LoggerFactory.getLogger(this.getClass());
}
}
その子の一つ:この子の上に
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class OrdreDAO extends AbstractDAO {
public OrdreDAO() {
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void persist(Ordre o) {
em.persist(o);// NPE here ... no EntityManager injected !
}
@SuppressWarnings("unchecked")
public List<Ordre> findAll() {
Query q = em.createQuery("from Ordre");
return q.getResultList();
}
}
、OrdreService:
public class OrdreService {
private OrdreDAO dao;
public OrdreService() {
dao=new OrdreDAO();
}
public void persist(Ordre o) {
System.out.println("Service::persist ??");
dao.persist(o);
}
public List<Ordre> getOrdres() {
return dao.findAll();
}
public Ordre getOrdre(String id) {
return dao.findByPK(id);
}
public Ordre merge(Ordre o) {
return dao.merge(o);
}
}
それを使用してサーブレット:
私は永続化しようとするとNPEを取得しますOrdre
何が欠けていますか?
JDK 6
のJBoss 5.1.0.GA
JPA 1
@Stateelessに抽象クラスを与える理由は何ですか?そこから削除してテストすることができます –
あなたのコードがうまくいかない理由がわかりません。 NetBeansは、EntityManagerがサブクラスにインジェクトされている点だけで、まったく同じようにサービスファサードクラスを生成するということが分かります。それは動作します(少なくともGlassFish 3では)。 http://netbeans.dzone.com/nb-generate-simpler-rest – perissf
自分の投稿を私のコードで更新しました – Stephan