使用JSF,JPA和DAO。 没有spring?

到目前为止,我仍然使用JSF和JPA而没有DAO。 现在我想使用DAO。 但是如何在DAO-Classes中初始化EntityManager?

public class AdresseHome { @PersistenceContext private EntityManager entityManager; public void persist(Adresse transientInstance) { log.debug("persisting Adresse instance"); try { entityManager.persist(transientInstance); log.debug("persist successful"); } catch (RuntimeException re) { log.error("persist failed", re); throw re; } } } 

我有没有使用Spring,还是有一个没有Spring的解决方案?

谢谢。

如果您的容器没有为您注入EntityManager,您可以使用以下内容:

 EntityManagerFactory factory; factory = Persistence.createEntityManagerFactory("jpatest"); EntityManager em = factory.createEntityManager(); 

来自persistence.xml中定义的单元的“jpatest”

Java EE 5不支持非托管组件中的注入,因此如果没有Spring,您将不得不在此处使用应用程序管理的实体管理器 (并因此在应用程序级别管理其生命周期)。

实际上,Java EE 5+并不真正提倡使用DAO模式( JPA Killed DAO?是关于这个主题的一篇很好的文章)并包装实现Domain Store模式的实体管理器,它实际上完成了DAO的工作。在DAO中,在我看来并没有多大意义。

另一个选择是将DAO本身实现为SLSB。 这样您就可以注入EntityManger而不是创建它。 但它有自己的不良影响,如会话bean太多。 豆类等链接,这是一种不好的做法。