Ich arbeite an einer einfachen Java EE-Anwendung.Warum wird PostConstruct nicht aufgerufen?
Ich habe Klasse wie folgt:
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);
}
}
Also mein Managed Bean ruft diese Methode. Bis hier keine Probleme. Aber da die Initialisierungsmethode nicht aufgerufen wird, erhalte ich eine NPE in em.persist.
Warum wird die Initialisierungsmethode nicht aufgerufen? Ich führe dies auf Glassfish Server.
Grüße.
Für den Anfang sollten Sie nicht eröffnen Ihren 'EntityManager' in einem globalen Umfang; der 'EntityManager' entspricht grob einer Sitzung. Wenn Sie wirklich Ihre eigene Sitzungsverwaltung verwalten müssen (das Eingeben von @PersistenceContext ist besser), sollten Sie bei jedem Aufruf von 'addNewEntry' einen' EntityManager' erstellen und schließen. – chrylis
Haben Sie bestätigt, dass Ihr Container das Objekt als Abhängigkeitsinjektion behandelt? Nicht jedes Objekt wird eingebunden, und wenn Sie nur 'new BlogEntryDao()' irgendwo aufrufen, weiß der Container möglicherweise nicht, dass es als Bean initialisiert werden soll. – chrylis
@chrylis Ja danke, ich rufe eigentlich neuen BlogEntryDao an. –