Pracuję nad prostą aplikacją Java EE.Dlaczego PostConstruct nie jest wywoływany?
mam klasę tak:
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);
}
}
Więc moja udało fasoli nazywa ta metoda. Do tego czasu żadnych problemów. Ale ponieważ metoda initialize nie jest wywoływana, otrzymuję NPE w em.persist.
Dlaczego metoda inicjowania nie jest wywoływana? Używam tego na serwerze Glassfish.
Pozdrawiam.
Na początek, nie powinno być otwarcie 'EntityManager' w zakresie globalnym; "EntityManager" z grubsza odpowiada sesji. Jeśli naprawdę potrzebujesz obsługiwać własne zarządzanie sesjami (lepiej jest wstrzykiwać @ Service ServiceCext), powinieneś tworzyć i zamykać 'EntityManager' w każdym wywołaniu' addNewEntry'. – chrylis
Czy potwierdziłeś, że twój pojemnik traktuje obiekt jako coś, co wymaga zastrzyku zależności? Nie każdy obiekt jest wciągany, a jeśli po prostu wywołujesz 'new BlogEntryDao()' gdzieś, kontener może nie wiedzieć, aby zainicjować go jako komponent bean. – chrylis
@chrylis Tak, dziękuję, właśnie nazywam nowy blogEntryDao. –