Использование JSF, JPA и DAO. Без весны? - PullRequest
5 голосов
/ 07 декабря 2009

до сих пор я все еще работал с JSF и JPA без DAO. Теперь я хотел бы использовать DAO. Но как я могу инициализировать EntityManager в DAO-классах?

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?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 07 декабря 2009

Если ваш контейнер не внедряет EntityManager для вас, вы можете получить его с помощью:

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

Где "jpatest" из единицы, определенной в вашем постоянстве. Xml

5 голосов
/ 07 декабря 2009

Java EE 5 не поддерживает внедрение в неуправляемый компонент, поэтому без Spring вам придется использовать менеджер сущностей, управляемый приложением , здесь (и, следовательно, для управления его жизненным циклом на уровне приложения).

На самом деле, Java EE 5+ на самом деле не поддерживает использование шаблона DAO ( Убил ли JPA DAO? хорошая статья на эту тему) и упаковывает менеджер сущностей, который реализует Шаблон Store Store , который в значительной степени делает то, что делает DAO, в DAO, на мой взгляд, не имеет смысла.

0 голосов
/ 09 мая 2011

Другой вариант для вас - реализовать сам DAO как SLSB. Таким образом, вы можете внедрить EntityManger, а не создавать его. Но у него есть свои плохие эффекты, такие как слишком много сессионных компонентов. связывание бобов и т. д., что является плохим условием.

...