Desarrollo de aplicaciones JPA 2.x para un entorno Java SE

Prepare las aplicaciones de persistencia para probarlas fuera del contenedor del servidor de aplicaciones en un entorno Java™ SE.

Acerca de esta tarea

Atención: Al utilizar estas herramientas de mandato JPA, ejecútelas desde el directorioraíz_perfil/bin, en lugar del directorio raíz_servidor_aplic/bin para asegurarse de que tiene la última versión de los mandatos para el 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 su compilación con interfaces JPA 2.1. Para compilar con interfaces JPA 2.0, especifique el com.ibm.ws.jpa-2.0.thinclient_9.0.jar en la vía de acceso de clase. 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ón del servidor está en el directorio ${raíz_servidor_apl}/runtimes/.

Importante: Las aplicaciones JPA (Java Persistence API) requieren diferentes técnicas de configuración de las aplicaciones que utilizan la persistencia gestionada por contenedor (CMP) o la persistencia gestionada por bean (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 en el archivo persistence.xml para asegurarse de que las aplicaciones puedan ejecutarse en un entorno Java SE.
Existen algunas consideraciones para ejecutar las aplicaciones JPA en un entorno Java SE:
  • La inserción de recursos no está disponible. Debe configurar estos servicios de forma específica o programada.
  • El ciclo de vida de EntityManagerFactory y EntityManager lo gestiona la aplicación. Las aplicaciones controlan la creación, manipulación y supresión de estas construcciones de forma programada.

Procedimiento

  1. 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 de persistencia para generar las tablas de base de datos que se basan en las clases de entidad. La herramienta wsmapping ayudará con este enfoque cuando se utiliza OpenJPA como el proveedor de persistencia.
    Correlación ascendente
    Comience por el modelo de datos, que son los esquemas de bases de datos y luego asciende hasta las clases de entidades. La herramienta wsreversemapping ayudarará con este enfoque cuando se utiliza OpenJPA como el proveedor de persistencia.
    Correlación de encuentro a medio camino
    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, ayudararán con este enfoque cuando se utilice OpenJPA como 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.

  2. 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
  3. Amplíe las clases de entidades con la herramienta de ampliación JPA o especifique el agente Java para realizar la ampliación de forma dinámica durante la ejecución.
    • Utilice la herramienta eclenhancer para EclipseLink o utilice la herramienta wsenhancer para OpenJPA.

      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. 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.

    • Puede especificar el mecanismo del agente Java para realizar la ampliación dinámica durante la ejecución. Por ejemplo, escriba lo siguiente en el indicador de mandatos:
      Para EclipseLink:
      java
      -javaagent:${raíz_cliente_apl}/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.jar
      com.xyz.Main  
      Para OpenJPA:
      java
      -javaagent:${raíz_cliente_apl}/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.jar
      com.xyz.Main  
      Atención: Puede ejecutar una herramienta de ampliador o especificar el mandato javaagent. No es necesario hacer ambas cosas.
  4. 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 la herramienta wsmapping.
    • De forma predeterminada, la correlación de objetos y relacional no se produce automáticamente, pero puede configurar el servidor de aplicaciones para proporcionar 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 Open JPA:
      <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 Avoid trouble: Para habilitar la correlación automática de objetos y relacional durante el tiempo de ejecución, todas las clases persistentes se deben listar en los elementos de archivo de Java .class, el archivo de correlación y de archivo de archivado Java (JAR) 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.
  5. 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, IBM Optim PureQuery Runtime debe estar instalado. 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 Avoid trouble: Las aplicaciones que utilizan 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 resolver este problema, siga estos pasos:
    1. 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.
    2. Si utiliza DB2 Universal Database para iSeries V6R1 o V5R3, vaya al sitio Web de arreglos correspondiente al release.
    3. Instale el nivel necesario de IBM Optim PureQuery Runtime, que es la Versión 1.3.100 o posterior. Para obtener más información, consulte el sitio web IBM Data Studio 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.
    4. 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 .

  6. 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

A continuación se detalla un archivo persistence.xml de ejemplo para el entorno Java SE:

Para EclipseLink:

<?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="RESOURCE_LOCAL">
          <!-- 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="javax.persistence.jdbc.driver"
                        value="org.apache.derby.jdbc.EmbeddedDriver" />
             <property name="javax.persistence.jdbc.url" 
                       value="jdbc:derby:target/database/jpa-test-database;create=true" />
             <property name="javax.persistence.schema-generation.database.action"
                        value="create" />
             <property name="javax.persistence.jdbc.user"
                        value="user" />
             <property name="javax.persistence.jdbc.password"
                        value="password"/>
          </properties>
     </persistence-unit>
</persistence>
      
Para OpenJPA:
<?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.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                       http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
            <persistence-unit name="TheWildZooPU" transaction-type="RESOURCE_LOCAL">
              <!-- 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="openjpa.ConnectionDriverName" 
                                value="org.apache.derby.jdbc.EmbeddedDriver" />
                        <property name="openjpa.ConnectionURL"
                                value="jdbc:derby:target/database/jpa-test-database;create=true" />
                        <property name="openjpa.Log"
                                value="DefaultLevel=INFO,SQL=TRACE,File=./dist/jpaEnhancerLog.log,Runtime=INFO,Tool=INFO"
/>
                        <property name="openjpa.ConnectionFactoryProperties" 
                                value="PrettyPrint=true, PrettyPrintLineLength=72" />
                        <property name="openjpa.jdbc.SynchronizeMappings" 
                                value="buildSchema(ForeignKeys=true)" />
                        <property name="openjpa.ConnectionUserName" 
                                value="user" />
                        <property name="openjpa.ConnectionPassword" 
                                value="password"/>
                        </properties>
            </persistence-unit>
</persistence>
    

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadevsefepplus
File name: tejb_jpadevsefepplus.html