2
我想在一個類中使用容器管理的事務並將其與其子類共享。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);
}
}
使用它一個servlet:
當我試圖堅持一個 我得到一個NPE我錯過了什麼?
JDK 6
JBoss的5.1.0.GA
JPA 1
爲什麼你會給一個抽象類的@Stateless?你可以從那裏刪除它並測試 – 2012-02-09 03:38:30
我不確定你的代碼不工作的原因。我可以告訴你的是,NetBeans完全像你一樣生成服務外觀類,唯一的區別是EntityManager被注入到子類中。它起作用(至少在GlassFish 3上)。 http://netbeans.dzone.com/nb-generate-simpler-rest – perissf 2012-02-09 10:25:40
我用我的一些代碼更新了我的帖子 – Stephan 2012-02-09 10:55:14