En utilisant JSF, JPA et DAO. Sans Printemps?

jusqu'à présent je travaillais encore avec JSF et JPA sans DAOs. Maintenant, J'aimerais utiliser DAOs. Mais comment initialiser le EntityManager dans les Classes 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;
        }
    }
}

dois-je utiliser le ressort ou y a-t-il une solution qui fonctionne sans ressort?

Merci.

5
demandé sur ich-bin-drin 2009-12-07 19:42:09

3 réponses

si votre flacon ne vous injecte pas L'EntityManager, vous pouvez en obtenir un avec:

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

Où "jpatest" de l'unité définie dans votre persistance.xml

5
répondu nos 2009-12-07 16:56:31

Java EE 5 ne supporte pas l'injection dans les composants non gérés.donc, sans Spring, vous devrez utiliser un gestionnaire d'entité géré par application ici (et par conséquent pour gérer son cycle de vie au niveau de l'application).

en fait, Java EE 5+ ne préconise pas vraiment l'utilisation du modèle DAO ( est-ce que JPA a tué le DAO? est un bel article sur ce sujet) et envelopper le gestionnaire d'entité qui met en œuvre le Domain Store motif, qui fait à peu près ce que fait DAO, dans un DAO n'a pas vraiment de sens à mon avis.

5
répondu Pascal Thivent 2010-07-11 19:48:25

une autre option pour vous est de mettre en œuvre votre OAC lui-même en tant que SLSB. De cette façon, vous pouvez injecter L'EntityManger plutôt que de le créer. Mais il a ses propres effets néfastes comme trop de haricots de session. enchaînement des haricots etc qui est une sorte de mauvais découpage.

0
répondu Eager Learner 2011-05-09 10:52:20