Sto lavorando su una semplice applicazione Java EE.Perché PostConstruct non viene chiamato?
devo classe come questa:
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);
}
}
Quindi il mio bean gestito chiama questo metodo. Fino a qui senza problemi. Ma dal momento che il metodo di inizializzazione non viene chiamato, sto ricevendo un NPE in em.persist.
Perché il metodo di inizializzazione non viene chiamato? Sto facendo funzionare questo sul server di Glassfish.
Saluti.
Per cominciare, non si dovrebbe essere aprendo il vostro 'EntityManager' in un ambito globale; "EntityManager" corrisponde approssimativamente a una sessione. Se hai davvero bisogno di gestire la tua gestione delle sessioni (iniettando @PersistenceContext è meglio), dovresti creare e chiudere un 'EntityManager' in ogni chiamata a' addNewEntry'. – chrylis
Hai confermato che il tuo contenitore tratta l'oggetto come qualcosa che richiede un'iniezione di dipendenza? Non tutti gli oggetti vengono agganciati, e se stai solo chiamando 'new BlogEntryDao() da qualche parte, il contenitore potrebbe non sapere di inizializzarlo come bean. – chrylis
@chrylis Sì, grazie, sto chiamando il nuovo BlogEntryDao in realtà. –