私は単純な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);
}
}
だから私のマネージドBeanは、このメソッドを呼び出します。ここまで問題はありません。しかし、initializeメソッドが呼び出されていないので、em.persistにNPEを取得しています。
なぜinitializeメソッドが呼び出されないのですか? Glassfishサーバーでこれを実行しています。
よろしくお願いいたします。
、あなたがグローバルスコープで、あなたの 'EntityManager'を開くべきではありません。 'EntityManager'は大体セッションに対応しています。独自のセッション管理(@PersistenceContextの注入が優れています)を本当に処理する必要がある場合は、 'addNewEntry'を呼び出すたびに' EntityManager'を作成して閉じる必要があります。 – chrylis
コンテナがオブジェクトを依存性注入が必要なものとして扱っていることを確認しましたか?すべてのオブジェクトに夢中になるわけではなく、 'new BlogEntryDao()'をどこかで呼び出すだけであれば、コンテナはそれをBeanとして初期化することを知らないかもしれません。 – chrylis
@chrylisありがとう、私は実際に新しいBlogEntryDaoを呼び出しています。 –