Java 使用JSF、JPA和DAO。没有春天?

Java 使用JSF、JPA和DAO。没有春天?,java,spring,jsf,jpa,dao,Java,Spring,Jsf,Jpa,Dao,到目前为止,我仍然使用JSF和JPA,没有DAOs。现在我想使用DAOs。但是如何在DAO类中初始化EntityManager public class AdresseHome { @PersistenceContext private EntityManager entityManager; public void persist(Adresse transientInstance) { log.debug("persisting Adresse i

到目前为止,我仍然使用JSF和JPA,没有DAOs。现在我想使用DAOs。但是如何在DAO类中初始化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的情况下工作


谢谢。

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


事实上,Java EE 5+并不真正提倡使用DAO模式(这是一篇关于这个主题的好文章)并将实现该模式的实体管理器包装到DAO中,在我看来,这是没有意义的。如果您的容器没有为您注入EntityManager,您可以通过以下方式获得:

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

其中“jpatest”来自persistence.xml中定义的单元,您的另一个选择是将DAO本身实现为SLSB。这样,您就可以注入整个愤怒,而不是创建它。但它也有自己的负面影响,比如太多的会话bean。用链子拴豆子等,这是一种坏习惯

所以我仍然需要为每个DAO创建一个EntityManager?