저는 간단한 Java EE 응용 프로그램을 만들고 있습니다.PostConstruct가 호출되지 않는 이유는 무엇입니까?
나는 다음과 같은 클래스가 :
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@Stateless
public class BlogEntryDao {
EntityManager em;
@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}
public void addNewEntry(){
Blogentry blogentry = new Blogentry();
blogentry.setTitle("Test");
blogentry.setContent("asdfasfas");
em.persist(blogentry);
}
}
그래서 내 관리 빈은이 메소드를 호출합니다. 여기까지 아무 문제 없어. 하지만 initialize 메서드가 호출되지 않았으므로 em.persist에 NPE가 표시됩니다.
초기화 메서드가 호출되지 않는 이유는 무엇입니까? Glassfish 서버에서 실행하고 있습니다.
감사합니다.
처음 엔 글로벌 범위에서'EntityManager'를 열면 안됩니다; EntityManager는 대략 세션에 해당합니다. 자신의 세션 관리 (@PersistenceContext를 주입하는 것이 더 좋다)를 처리해야한다면,'addNewEntry'를 호출 할 때마다'EntityManager'를 만들고 닫아야합니다. – chrylis
컨테이너가 오브젝트를 종속성 주입이 필요한 것으로 처리하고 있음을 확인 했습니까? 모든 객체가 푹 빠져있는 것은 아니며,'new BlogEntryDao() '를 어딘가에 호출하는 경우, 컨테이너는 그것을 bean으로 초기화하도록 알지 못할 수도 있습니다. – chrylis
@chrylis 그래, 고마워, 나는 새로운 BlogEntryDao를 실제로 부르고있다. –