Pour que Liberty prenne en charge une application utilisant l'API JPA
(Java™ Persistence API), vous
devez ajouter la fonction jpa-2.0, jpa-2.1 ou
jpaContainer-2.1 au fichier server.xml, en
fonction du niveau de spécification dont vous avez besoin. Vous devez également définir les contextes de persistance et les unités de persistance et
configurer l'accès au gestionnaire d'entité et à la fabrique de gestionnaire d'entité.
Pourquoi et quand exécuter cette tâche
Les fonctions JPA suivantes sont disponibles dans
Liberty :
- La fonction jpa-2.0 permet aux applications d'utiliser tout mécanisme de persistance Java gérée par l'application ou
le conteneur, écrit selon la spécification JPA 2.0. Le support repose sur Apache OpenJPA avec des extensions pour la prise en charge du modèle de programmation avec gestion par conteneur.
- La fonction jpa-2.1 permet aux
applications
d'utiliser tout mécanisme de persistance Java gérée par l'application
ou le conteneur, écrit selon la spécification JPA 2.1. Le support repose sur EclipseLink. Si le fournisseur de persistance EclipseLink JPA intégré n'est pas utilisé, vous pouvez utiliser la
fonction jpaContainer-2.1 à la place pour minimiser l'image de l'environnement d'exécution du serveur.
La fonction jpaContainer-2.1 permet aux
applications
d'utiliser tout mécanisme de persistance Java gérée par l'application
ou le conteneur, écrit selon la spécification JPA 2.1. Cette fonction n'inclut pas de fournisseur JPA intégré. L'utilisateur doit fournir un fournisseur JPA via une bibliothèque partagée,
la bibliothèque globale, ou intégrée dans l'application.
Pour des informations sur le développement d'applications JPA à l'aide des outils de développement WebSphere, consultez
Développement
d'applications JPA.
Procédure
Ajoutez la fonction
jpa-2.0, jpa-2.1 ou jpaContainer-2.1 dans le
fichier server.xml.
- Ajoutez des définitions de contextes de persistance et d'unités de persistance
au fichier web.xml.
Exemple :
<persistence-context-ref>
<persistence-context-ref-name>example/em</persistence-context-ref-name>
<persistence-unit-name>ExamplePersistenceUnit</persistence-unit-name>
</persistence-context-ref>
<persistence-unit-ref>
<persistence-unit-ref-name>example/emf</persistence-unit-ref-name>
<persistence-unit-name>ExamplePersistenceUnit</persistence-unit-name>
</persistence-unit-ref>
- Configurez l'accès au gestionnaire d'entité.
Exemple :
Context ctx = new InitialContext();
UserTransaction tran = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
tran.begin();
EntityManager em = (EntityManager) ctx.lookup("java:comp/env/example/em");
Thing thing = new Thing();
em.persist(thing);
tran.commit();
- Configurez l'accès à la fabrique de gestionnaire d'entité.
Exemple :
Context ctx = new InitialContext();
EntityManagerFactory emf = (EntityManagerFactory) ctx.lookup("java:comp/env/example/emf");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Thing thing = new Thing();
em.persist(thing);
tx.commit();
int id = thing.getId();
em.close();
Si vous utilisez la fonction
jpaContainer-2.1, rendez les fichiers JAR du fournisseur JPA disponibles. Choisissez l'une des options suivantes :
- Placez les fichiers JAR du fournisseur JPA à l'emplacement
des bibliothèques globales pour les rendre accessibles à toutes les
applications.
- Modifiez la configuration du serveur de sorte que les fichiers JAR du fournisseur JPA
soient fournis à l'application en tant que bibliothèque partagée.
Par exemple, procédez comme suit :
Dans votre fichier de configuration de serveur, définissez une bibliothèque partagée pour le
fournisseur de persistance JPA nécessaire. Rendez la bibliothèque accessible aux applications qui l'utilisent. L'exemple suivant illustre l'ensemble de fichiers JAR minimum requis pour utiliser
EclipseLink en tant que fournisseur JPA 2.1, sans extension. Les fichiers JAR suivants peuvent également être inclus pour tirer parti des extensions EclipseLink :- org.eclipse.persistence.dbws.jar
- org.eclipse.persistence.moxy.jar
<library id="eclipselink">
<file name="${server.config.dir}/jpa/org.eclipse.persistence.asm.jar/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.core.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.antlr.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jpql.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.modelgen.jar"/>
</library>
<application location="myApp.war">
<classloader commonLibraryRef="eclipselink"/>
</application>
Pour utiliser Hibernate comme fournisseur JPA, incluez l'ensemble de fichiers JAR suivant dans la configuration <library> à la
place.
<library id="hibernate">
<file name="${server.config.dir}/hibernate/antlr-2.7.7.jar"/>
<file name="${server.config.dir}/hibernate/classmate-1.3.0.jar"/>
<file name="${server.config.dir}/hibernate/dom4j-1.6.1.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-commons-annotations-5.0.1.Final.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-core-5.2.6.Final.jar"/>
<file name="${server.config.dir}/hibernate/javassist-3.20.0-GA.jar"/>
<file name="${server.config.dir}/hibernate/jboss-logging-3.3.0.Final.jar"/>
</library>
- Choisissez l'un des moyens suivants pour identifier la classe du fournisseur JPA :
- Configurez le fournisseur de persistance par défaut sur l'élément JPA dans la configuration du serveur. Cette configuration remplace tout service PersistenceProvider détecté par les
éléments <bell> :
<jpa defaultPersistenceProvider="org.eclipse.persistence.jpa.PersistenceProvider"/>
Pour Hibernate, utilisez :
<jpa defaultPersistenceProvider="org.hibernate.jpa.HibernatePersistenceProvider"/>
- Si la fonction jpaContainer-2.1 est utilisée, configurez la fonction bells-1.0 dans la configuration du serveur et ajoutez un caractère d'appel pour la bibliothèque partagée.
La bibliothèque partagée localise automatiquement la classe
du fournisseur JPA et en fait le fournisseur de persistance JPA par défaut. Cette configuration remplace l'attribut defaultPersistenceProvider configuré
dans l'élément JPA.
<featureManager>
<feature>jpaContainer-2.1</feature>
<feature>bells-1.0</feature>
...
</featureManager>
<bell libraryRef="eclipselink"/>
- Spécifiez la classe du fournisseur de persistance JPA dans le fichier persistence.xml.
Cette classe est prioritaire sur la configuration du fichier server.xml (élément <jpa> ou éléments <bell>) pour l'unité de
persistance.
<persistence-unit name="MY_PERSISTENCE_UNIT">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
...
</persistence-unit>