Los contenedores del servidor de aplicaciones puede proporcionar muchas de las
funciones necesarias para la JPA (Java™ Persistence API) en un entorno Java
EE (Java Enterprise Edition). El servidor de aplicaciones también
proporciona herramientas de mandatos JPA para ayudarle a desarrollar aplicaciones en un entorno
Java EE.
Acerca de esta tarea
Atención: Cuando utilice estas herramientas de mandatos
JPA, ejecútelas desde el directorio <
raíz_perfil>/bin, en
lugar de desde el directorio
raíz_servidor_aplicaciones/bin para asegurarse de que
tiene la versión más reciente de los mandatos para su nivel de release.
Para esta tarea, debe especificar el archivo autónomo
com.ibm.ws.jpa-2.1.thinclient_9.0.jar de
archivado Java (JAR) en la
classpath para la compilación en interfaces JPA 2.1. Para compilar en
interfaces JPA 2.0, especifique el
com.ibm.ws.jpa-2.0.thinclient_9.0.jar. Este archivo JAR autónomo está disponible en las imágenes de instalación. La
ubicación de estos archivos en la imagen de instalaciónd el
servidor está en el directorio ${raíz_servidor_apl}/runtimes.
Importante: Las aplicaciones JPA requieren técnicas de configuración distintas de las de las aplicaciones que
utilizan la persistencia gestionada por contenedor (CMP) o la persistencia gestionada por beans (BMP). No siguen las técnicas de despliegue típicas asociadas a las aplicaciones que
implementan CMP o BMP. En las aplicaciones JPA, debe definir una unidad de persistencia y
configurar las propiedades adecuadas para asegurarse de que las aplicaciones puedan
ejecutarse en un entorno Java EE.
El contenedor da soporte a todas las
inclusiones necesarias para garantizar que las aplicaciones se ejecutan en el entorno Java
EE. Por ejemplo, el contenedor puede incluir @PersistenceUnit y @PersistenceContext para las aplicaciones.
- Genere las clases de entidades. Están son entidades POJO (Plain Old Java Object). Según el modelo
de desarrollo, puede utilizar algunas o todas las herramientas JPA:
- Correlación descendente: con las definiciones de entidades y las correlaciones
relacionales de objetos comienza a partir de cero y luego deriva los esquemas de base de
datos a partir de los datos. Si utiliza este método, con toda probabilidad, su objetivo
será crear la arquitectura del modelo de objeto y luego escribir las clases de entidades. Estas
clases de entidades le llevarán finalmente a crear el modelo de base de datos. Si
está utilizando una correlación descendente del
modelo de objeto con el modelo relacional, desarrolle las clases de
entidad y, después, utilice las funciones del proveedor JPA
para generar las tablas de base de datos que se basan en las
clases de entidad. La herramienta wsmapping ayuda
con este enfoque cuando se utiliza OpenJPA como el proveedor de
persistencia.
- Correlación ascendente: comienza por el modelo de datos, que son los esquemas
de bases de datos y luego asciende hasta las clases de entidades. La
herramienta wsreversemapping ayuda con este
enfoque cuando se utiliza OpenJPA como el proveedor de persistencia.
- Correlación de encuentro a medio camino: es probablemente el modelo de
desarrollo más común. Tiene una combinación del modelo de datos y del modelo de objeto
parcialmente completa. Dependiendo de los objetivos y de los requisitos, tendrá que
negociar las relaciones y resolver las diferencias. Ambas
herramientas, wsmapping y
wsreversemapping, ayudan con este enfoque cuando
se utiliza OpenJPA como el proveedor de persistencia.
La solución JPA para el servidor de aplicaciones proporciona varias herramientas que
le ayudarán a desarrollar aplicaciones JPA. Al combinar estas herramientas con IBM®
Rational Application Developer se proporciona un sólido entorno de desarrollo para las aplicaciones Java EE o Java SE. Rational Application Developer incluye herramientas de la GUI para
insertar anotaciones, un editor de archivos persistence.xml personalizado, un explorador de bases de
datos y otras funciones. Otra alternativa es el proyecto Eclipse Dali. Para obtener más información sobre
Rational Application Developer o el plug-in de Eclipse Dali,
visite sus respectivos sitios web.
- Compile las clases de entidad.
Compile las entidades como lo haría con cualquier clase Java, a menos que esté utilizando la API
Criteria. Si está utilizando la API Criteria, también debe generar
las clases del metamodelo de la API Criteria.
Los siguientes son ejemplos de cómo utilizar esta opción.
Mediante EclipseLink, proporcione los argumentos siguientes con el
mandato
javac:
-processor
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
-Aeclipselink.persistencexml= persistence.xml_location
raíz_servidor_apl/java/bin/javac
-classpath
raíz_servidor_apl/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.0.jar
-processor
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
-Aeclipselink.persistencexml=app_location/src/META-INF/persistence.xml
mypackage\MyEntity.java
Mediante OpenJPA o WSJPA, proporcione los argumentos siguientes
con el mandato
javac:
-Aopenjpa.metamodel=true
raíz_servidor_apl/java/bin/javac
-Aopenjpa.metamodel=true
-classpath
raíz_servidor_apl/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar
mypackage/MyEntity.java
- Amplíe las clases de entidad utilizando la herramienta de
ampliador de JPA, eclenhancer para EclipseLink y
wsenhancer para OpenJPA. Un ampliador es una herramienta que añade código de bytes de
integración específico de proveedor a las clases persistentes después
de haberlas escrito. La herramienta de ampliación realiza un
proceso posterior en el código de bytes que genera el compilador Java y añade los campos
y métodos necesarios para implementar las características de persistencia. Aunque
el proveedor de persistencia del servidor de aplicaciones puede
ampliar automáticamente las entidades durante el tiempo de ejecución,
obtiene un mejor rendimiento si puede ampliar las entidades cuando se
crea la aplicación. La
aplicación no intentará ampliar las entidades que ya se han ampliado.
Si desea ejemplos sobre cómo utilizar la herramienta
eclenhancer, consulte el tema del mandato
eclenhancer. Si desea ejemplos sobre cómo utilizar la herramienta
wsenhancer, consulte el tema del mandato
wsenhancer.
- Opcional: Si no está utilizando el modelo de desarrollo para la
correlación ascendente, genere o actualice las
tablas de base de datos automáticamente o utilizando la herramienta
eclenhancer o wsmapping.
- De forma predeterminada, la correlación de objetos y
relacional no se produce automáticamente, pero puede configurar el
servidor de aplicaciones para que proporcione dicha correlación con
la propiedad eclipselink.ddl-generation para EclipseLink, o la
propiedad openjpa.jdbc.SynchronizeMappings para OpenJPA. Estas
propiedades pueden acelerar el desarrollo garantizando
automáticamente que las tablas de base de datos coinciden con el
modelo de objeto. Para habilitar la correlación automática,
incluya la línea siguiente en el archivo persistence.xml:
Para EclipseLink:
<property name="eclipselink.ddl-generation" value =“create-tables”/>
Para OpenJPA:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Estándar JPA 2.1:
<property name="javax.persistence.schema-generation.database.action" value="create"/>
Avoid trouble: Para habilitar la correlación relacional de objetos automática
en tiempo de ejecución, todas las clases persistentes deben enumerarse en el archivo .class
de Java, en el archivo de correlación y en los elementos del archivo
JAR (Java Archive) en formato XML.
gotcha
- Para actualizar o generar manualmente las tablas de base de datos, ejecute la
herramienta de correlación JPA para el servidor de aplicaciones desde la línea de
mandatos para crear las tablas en la base de datos. Para ver ejemplos
sobre cómo ejecutar la herramienta eclenhancer,
consulte el tema del mandato eclenhancer. Si desea ejemplos sobre
cómo utilizar la herramienta wsmapping, consulte
el tema del mandato wsmapping.
- Opcional: Si está utilizando OpenJPA
y DB2 y desea utilizar el lenguaje de consulta estructurado
(SQL) estático, ejecute el mandato wsdbgen. Para utilizar el mandato wsdbgen, debe tener instalado IBM
Optim pureQuery Run time. El mandato wsdbgen crea el archivo persistence_unit_name.pdqxml en el mismo directorio META-INF donde se encuentra el archivo persistence.xml. Si tiene varias unidades de persistencia, el mandato wsdbgen debe ejecutarse para cada unidad de persistencia.
Cuando una aplicación hace referencia a varios archivos pdqxml, utilice la utilidad Merge para combinarlos en un único archivo pdqxml. Especifique
el archivo pdqxml combinado como la propiedad
pureQueryXml de pdqProperties. Consulte la documentación sobre el programa de utilidad de fusión en el Information Center de
IBM Integrated Data
Management.
Avoid trouble: Las aplicaciones que implementan la JPA y que están configuradas para ejecutar SQL estático pueden generar
varias excepciones. Estas excepciones podrían producirse
con el mandato
wsdbgen, que se puede utilizar para preparar la aplicación, o
cuando ésta se ejecuta y llama a un método JPA.
Para solucionar este problema, siga estos pasos:
- Instale los arreglos temporales del programa, PTF, para el controlador JDBC de
iSeries V5R4. Instale los números de PTF SI32561 y SI32562. Para
buscar los PTF, vaya al sitio web de IBM
System i Support: PTF Cover Letters.
- Si utiliza DB2
Universal Database for iSeries V6R1
o V5R3, visite el sitio web de arreglos para el release adecuado.
- Instale el nivel necesario de pureQuery, que es la versión 1.3.100 o
posterior.
Para obtener más información, consulte el sitio web de IBM Optim
pureQuery Runtime. Instale los controladores JCC más recientes, que es la versión 3.52.95 o
posterior, con el arreglo APAR PK65069. Los controladores JCC más recientes forman parte del paquete de
software IBM
DB2.
- Para DB2 en un servidor
z/OS, instale el PTF UK39204 para el controlador alternativo de la
versión 8 o el PTF UK39205 para la versión 9 e instale el arreglo para APAR PK67706.
gotcha
Para obtener ejemplos de cómo ejecutar este mandato, consulte el tema sobre el mandato wsdbgen .
- Opcional: Si está utilizando OpenJPA y la identidad gestionda por
aplicación, genere una clase de identidad gestionada por aplicación
con la herramienta wsappid. Cuando utiliza una identidad gestionada por la aplicación, uno o varios campos
deben ser un campo de identidad. Utilice una clase de identidad si su identidad tiene
varios campos de identidad y al menos uno de los campos está relacionado con otra
entidad.
La herramienta de identidad gestionada por la aplicación genera código Java
que utiliza la clase de identidad para cualquier tipo persistente que implemente la
identidad gestionada por la aplicación.
Para obtener ejemplos de cómo utilizar la herramienta wsappid,
consulte el tema sobre el mandato wsappid.
Ejemplo
El siguiente es un archivo
persistence.xml de ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.1"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd” ">
<persistence-unit name="TheWildZooPU" transaction-type="JTA">
<jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
<!-- archivo de correlación adicional a orm.xml>
<mapping-file>META-INF/JPAorm.xml</mapping-file>
<class>com.company.bean.jpa.PersistebleObjectImpl</class>
<class>com.company.bean.jpa.Animal</class>
<class>com.company.bean.jpa.Dog</class>
<class>com.company.bean.jpa.Cat</class>
<properties>
<property name=”eclipselink.ddl-generation”
value=”create-tables”/>
</properties>
</persistence-unit>
</persistence>