IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Best Practices JPA


Sujet :

Persistance des données Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 109
    Points : 108
    Points
    108
    Par défaut Best Practices JPA
    Bonjour,

    Une question générale sur le JPA et l'EntityManagerFactory et l'EntityManager.
    Comment gérez-vous la création de la factory et du manager?
    ?
    Vous les créez dans chaque méthode comme par exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Eleve findEleveById(Long id) throws DAOException {
    		emf = Persistence.createEntityManagerFactory("myPU");
    		em = emf.createEntityManager();
    		Eleve e = em.find(Eleve.class, id);
    		e.getCours().size();
    		
    		em.close();
    		emf.close();
    		return e;
    	}
    Quelles sont les bonnes pratiques à suivre ?

    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Fr@ncky Voir le message
    Bonjour,

    Une question générale sur le JPA et l'EntityManagerFactory et l'EntityManager.
    Comment gérez-vous la création de la factory et du manager?
    ?
    Vous les créez dans chaque méthode comme par exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Eleve findEleveById(Long id) throws DAOException {
            emf = Persistence.createEntityManagerFactory("myPU");
            em = emf.createEntityManager();
            Eleve e = em.find(Eleve.class, id);
            e.getCours().size();
            
            em.close();
            emf.close();
            return e;
        }
    Quelles sont les bonnes pratiques à suivre ?

    merci
    éviter de créer des objets coûteux comme l'EMF dans des routines de "bas" niveau...

    lire
    http://docs.jboss.org/hibernate/stab..._single/#d0e61

    1 EM <-> 1 "unit of work"

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Si tu es dans le monde web avec un conteneur qui te permet d'utiliser CDI, utilise les annotations,@Inject notamment.
    Il te suffit d'injecter directement ton EntityManager, l'EntityManagerFactory est géré directement.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 109
    Points : 108
    Points
    108
    Par défaut
    merci pour vos réponse.

    Si j'ai bien compris, il est judicieux de laisser le container gérer la persistance. Faut-il quand même gérer les transactions soi-même ou non ?
    Dites-moi si cette façon de procéder est correcte.

    1) Dans le constructeur du bean, j'instancie mon dao

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @Stateless
    @LocalBean
    public class MySessionBean implements MySessionBeanRemote, MySessionBeanLocal, Serializable {
     
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
     
    	private EleveDAO dao;
     
     
    	public MySessionBean() {
     
     
    		 this.dao = new EleveDaoImpl();
    	}
    2) Dans le constructeur de l'implémentation du DAO, j'instancie la factory et le manager de la façon suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    public class EleveDaoImpl implements EleveDAO {
     
     
    	private EntityManagerFactory emf;
     
     
    	@PersistenceContext(unitName = "myPU")
    	private EntityManager em;
     
     
    	public EleveDaoImpl() {
     
     
    		emf = Persistence.createEntityManagerFactory("myPU");
    		em = emf.createEntityManager();
    	}

    Cette façon de procéder est-elle correcte ?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EJB3 Entity] JPA+DAO best practices ?
    Par kirin dans le forum Java EE
    Réponses: 0
    Dernier message: 16/07/2009, 18h47
  2. swing best practices.
    Par bbclone dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 07/06/2006, 10h14
  3. Réponses: 4
    Dernier message: 23/05/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo