Comment on en est arrivé là...
JPA quoi ?! Java Persistence Architecture API ? Un super nouveau méga système révolutionnaire du mapping objet ?!
En écoutant cet étrange personnage nous présenter son système de persistance, on comprend qu'il très vite s'agit d'une spécification et non d'une implémentation, et qu'il faudrait quand même continuer nos devs avec Hibernate mais avec des contraintes différentes...
Alors à quoi bon changer de système si ça fait la même chose ? Eh bien, pour participer enfin à la standardisation des interfaces dans les ORM Java !
Mais à ma connaissance Hibernate est sorti au début du siècle (en 2001...). Sur quoi donc se basait-il à l'époque ? En fouillant sur le site officiel d'Hibernate, on découvre que Gavin King avait développé son propre système de persistance afin de proposer les mêmes fonctionnalités que le système d'EJB2 mais avec une complexité moindre.
Quelques années plus tard, au vu de la floraison d'implémentations d'ORM, il semblait urgent de définir un socle unifié, d'où la sortie de JPA1.0 en 2006, mis à jour en 2009 avec JPA2.0.
Voila pour la petite histoire de JPA...
JPA en quelques mots
Par exemple JPA définie les interfaces :
public interface JPA { public void insert(Object obj); public void update(Object obj); public void delete(Object obj); public Object select(); }
mais ne définit les implémentations, c'est à dire le code qui implémente les méthodes de ces interfaces.
Depuis sa version 3.2, Hibernate fournit une implémentation de JPA
En réalité il existe de nombreuses implémentations de JPA. Parmi celles-ci Hibernate, Toplink Essentials, Openjpa, Eclipselink, etc. Mais Hibernate est de loin la plus utilisée dans le monde java.
Il est possible d'utiliser les librairies d'Hibernate sans JPA. Le choix d'utiliser JPA force les développeurs à suivre les spécifications JPA. Par exemple les imports du type
org.hibernate.xxxsont supprimés et sont remplacés par les imports de l'API JPA
javax.persistence.xxx
Les objets de type hibernateTemplate sont supprimés et sont remplacés par des EntityManager de JPA.
etc...
Bref, tout est standardisé !
Au runtime, il suffit d'inclure le jar de l'implémentation désirée, et c'est parti ! (pratique...)
Pour terminer, JPA n'est pas la seul spécification qui existe pour définir les concepts de persistence.
Une autre célèbre spécification en java se prénomme JDO pour Java Data Objects. A la différence de JPA, elle définit des solutions pour de la persistence vers des systèmes non-RDBMS (ex : LDAP, XML, ODF, Excel etc)
En pratique
On va donc chercher les dépendances de JPA pour les coller dans notre projet Java.Pour les mavenistes, on colle la dépendance suivante dans notre pom.xml
<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency>
On met à jour nos imports, nos annotations, nos appels dans nos DAO, nos HQL (le language HQL est remplacé par du JPQL, plus strictes). Et hop le code compile !
Au runtime, on ajoute notre implémentation d'hibernate dans notre projet a déployer.
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.5.1-Final</version> </dependency>
Eh voila, vous êtes devenus JPA compliant !
Aucun commentaire:
Enregistrer un commentaire
Un avis ? Une question ?
N'hésitez pas à laissez des commentaires !