2
컨테이너 관리 트랜잭션을 한 클래스에서 사용하고 하위 클래스와 공유하려고합니다.JBoss - EntityManager 삽입 실패
이 아이의 상단에@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);
}
}
를 사용하는 서블릿 : 자식의
@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());
}
}
하나 : 여기
내 추상 클래스입니다지속하려고 할 때 NPE가 발생합니다. Ordre
무엇이 누락 되었습니까?
JDK 6
보스 5.1.0.GA
JPA 1
왜 @Stateless를 추상 클래스에 제공하겠습니까? 거기에서 제거하고 테스트 할 수 있습니다. –
코드가 작동하지 않는 이유가 확실하지 않습니다. NetBeans는 EntityManager가 서브 클래스에 삽입된다는 점만 제외하면 정확히 같은 방식으로 서비스 facade 클래스를 생성합니다. 그리고 그것은 (적어도 GlassFish 3에서는) 작동합니다. http://netbeans.dzone.com/nb-generate-simpler-rest – perissf
내 게시물을 내 일부 코드로 업데이트했습니다. – Stephan