Para habilitar Liberty para dar
soporte a una aplicación que utiliza JPA
(Java™ Persistence API), añada la
característica jpa-2.0, jpa-2.1 o
jpaContainer-2.1 en el archivo server.xml, dependiendo del nivel de especificación que necesite. También debe definir contextos de persistencia y unidades de
persistencia, y configurar el acceso al gestor de entidades y a la fábrica
de gestor de entidad.
Acerca de esta tarea
Las siguientes características JPA están disponibles en
Liberty:
- La característica jpa-2.0 permite que las aplicaciones utilicen JPA gestionados por aplicación y gestionados por contenedor escritos según la especificación JPA 2.0. El soporte se crea sobre Apache OpenJPA con extensiones para dar soporte al modelo de programación gestionado por contenedor.
- La característica jpa-2.1 permite que las aplicaciones utilicen JPA gestionados por aplicación y gestionados por contenedor escritos según la especificación JPA 2.1. El soporte se basa en EclipseLink. Si el proveedor JPA EclipseLink incorporado no se está utilizando, es posible que desee utilizar la característica jpaContainer-2.1 en su lugar para minimizar la imagen del tiempo de ejecución del servidor.
La característica jpaContainer-2.1 permite que las aplicaciones utilicen JPA gestionados por aplicación y gestionados por contenedor escritos según la especificación JPA 2.1. Esta característica no incluye un proveedor JPA incorporado. El usuario debe proporcionar un proveedor JPA a través de una biblioteca compartida, la biblioteca global o incorporada en la aplicación.
Para obtener información sobre el desarrollo de aplicaciones JPA mediante WebSphere Developer Tools, consulte Desarrollo de aplicaciones JPA.
Procedimiento
Añada la característica jpa-2.0, jpa-2.1 o jpaContainer-2.1 al archivo
server.xml.
- Añada definiciones de contextos de persistencia y
unidades de persistencia en el archivo
web.xml.
Por ejemplo:
<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>
- Configure el acceso al gestor de entidad.
Por ejemplo:
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();
- Configure el acceso a la fábrica de gestor de entidad.
Por ejemplo:
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 utiliza la característica jpaContainer-2.1, haga que los archivos JAR del proveedor JPA estén disponibles. Elija una de las opciones siguientes:
- Coloque los archivos JAR del proveedor JPA en la ubicación de la biblioteca global para que estén disponibles para todas las aplicaciones.
- Actualice la configuración del servidor para proporcionar los archivos JAR de proveedor JPA como una biblioteca compartida a la aplicación.
Por ejemplo, realice los pasos siguientes:
En el archivo de configuración del servidor, configure una biblioteca compartida para el proveedor de persistencia JPA necesario. Haga que la biblioteca esté disponible para las aplicaciones que la utilicen. El ejemplo siguiente ilustra el conjunto mínimo necesario de archivos jar para utilizar EclipseLink como proveedor JPA 2.1, sin ninguna extensión. Los jars siguientes también se pueden incluir para sacar partido de las extensiones de 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>
Para utilizar la hibernación como un proveedor JPA, incluya el conjunto de archivos jar siguientes en la configuración de <library> en su lugar.
<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>
- Elija una de las maneras siguientes para identificar la clase de proveedor JPA:
- Configure el proveedor de persistencia predeterminado en el elemento JPA en la configuración del servidor. Esta configuración altera temporalmente cualquier servicio PersistenceProvider descubierto por elementos <bell>.
<jpa defaultPersistenceProvider="org.eclipse.persistence.jpa.PersistenceProvider"/>
Para Hibernate, utilice:
<jpa defaultPersistenceProvider="org.hibernate.jpa.HibernatePersistenceProvider"/>
- Si la característica jpaContainer-2.1 se está utilizando, configure la característica bells-1.0 en la configuración del servido r y añada una alerta para la biblioteca compartida.
La biblioteca compartida localiza la clase de proveedor JPA automáticamente y la convierte en el proveedor de persistencia JPA predeterminado. Esta configuración altera temporalmente el atributo defaultPersistenceProvider configurado en el elemento JPA.
<featureManager>
<feature>jpaContainer-2.1</feature>
<feature>bells-1.0</feature>
...
</featureManager>
<bell libraryRef="eclipselink"/>
- Especifique la clase de proveedor de persistencia JPA en el archivo persistence.xml.
Esta clase tiene prioridad sobre la configuración server.xml (ya sea el elemento <jpa> o los elementos <bell>) para la unidad de persistencia.
<persistence-unit name="MY_PERSISTENCE_UNIT">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
...
</persistence-unit>