Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step17]
Dans le billet précédant [step16] nous avons introduit JPA en mode “standalone”. Dans ce billet nous allons mettre en place JPA dans un conteneur avec Spring en suivant le design pattern Service/DAO. Spring fournit à travers Spring ORM un support JPA Spring. Ce support Spring JPA permet de déclarer dans un bean Spring, la factory JPA EntityManagerFactory de 3 manières :
- LocalEntityManagerFactoryBean est une factory Spring qui permet de créer une instance de EntityManagerFactory définit dans un persistence-unit du fichier META-INF/persistence.xml. Aucune configuration n’est possible avec cette factory Spring (ex : le nom du fichier persistence.xml ne peut pas être configuré).
- JNDI qui permet de récupérer un EntityManagerFactory via JNDI. Je ne parlerais pas de cette déclaration.
- LocalContainerEntityManagerFactoryBean qui permet entre autre de configurer les informations provider et properties du fichier persitence.xml via des bean Spring. Nous verrons l’intêret d’utiliser cette factory dans le prochain billet.
Dans ce billet nous allons mettre en place JPA avec Spring en utilisant LocalEntityManagerFactoryBean avec l’implémentation JPA/Eclipselink et montrerons l’intérêt d’utiliser cette déclaration de l’EntityManagerFactory. En effet Spring jouera le rôle d’un conteneur JPA qui permettra de :
- gérer les ouvertures/fermetures des EntityManager.
- gérer les ouvertures/fermetures des EntityTransaction (commit/rollback).
REMARQUE : Ces apports sont aussi valable pour les 2 autres solutions JNDI et LocalContainerEntityManagerFactoryBean.
Vous pouvez télécharger le zip org.dynaresume_step17.zip qui contient les projets expliqués ci dessous:
- org.dynaresume.test.dao.find.mock : bouchon DAO où les Service/DAO seront instanciés en Java classique.
- org.dynaresume.test.dao.find.mock.spring : bouchon DAO où les Service/DAO seront déclarés en tant que bean XML Spring puis instanciés à l’aide de Spring.
- org.dynaresume.test.dao.find.mock.spring.annotations : bouchon DAO où les Service/DAO seront déclarés via des annotations Spring puis instanciés à l’aide de Spring.
- org.dynaresume.test.dao.find.jpa : implémentation JPA DAO où les Service/DAO seront instanciés en Java classique. JPA en mode “standalone” sera ici utilisé.
- org.dynaresume.test.dao.find.jpa.spring : implémentation JPA DAO où les Service/DAO seront instanciés à l’aide de Spring. Spring ORM sera aussi utilisé pour utiliser JPA dans un conteneur.
- org.dynaresume.test.dao.find.jpa.spring_PersistenceUnit utilisation de l’annotation JPA @PersistenceUnit pour injecter l’EntityManagerFactory à la DAO gràce au conteneur Spring.
- org.dynaresume.test.dao.find.jpa.spring_PersistenceContext utilisation de l’annotation JPA @PersistenceContext pour injecter l’EntityManager à la DAO gràce au conteneur Spring.
- org.dynaresume.test.dao.create.jpa implémentation JPA DAO avec des Transactions (EntityTransaction) où les Service/DAO seront instanciés en Java classique. JPA en mode “standalone” sera ici utilisé.
- org.dynaresume.test.dao.create.jpa.spring implémentation JPA DAO avec des Transactions (EntityTransaction) où les Service/DAO seront instanciés à l’aide de Spring. Spring ORM sera aussi utilisé pour utiliser JPA dans un conteneur.

