Développement d'applications JPA 2.x pour un environnement Java EE

Les conteneurs du serveur d'applications peuvent fournir plusieurs des fonctions utiles pour l'API de persistance Java™ (JPA) dans un environnementJava Enterprise Edition (Java EE). Le serveur d'applications propose également des outils de commande JPA destinés à vous aider à développer des applications dans un environnement Java EE.

Pourquoi et quand exécuter cette tâche

Avertissement : Lorsque vous exécutez ces outils de commande JPA, exécutez-les à partir du répertoire <racine_profil>/bin et non à partir du répertoire racine_serveur_app/bin. Ainsi, vous êtes certain de disposer de la dernière version des commandes pour votre niveau de version.

Pour cette tâche, vous devez spécifier le fichier JAR (Java archive) autonome com.ibm.ws.jpa-2.1.thinclient_9.0.jar dans le chemin d'accès aux classes destiné à la compilation par rapport aux interfaces JPA 2.1. Pour effectuer la compilation par rapport aux interfaces JPA 2.0, spécifiez le fichier com.ibm.ws.jpa-2.0.thinclient_9.0.jar. Ce fichier JAR autonome est accessible via les images d'installation. L'emplacement de ces fichiers sur l'image d'installation du serveur est le répertoire ${app_server_root}/runtimes/.

Important : Les applications utilisant l'API JPA requièrent différentes techniques de configuration provenant d'applications utilisant la persistance gérée par conteneur (CMP) ou la persistance gérée par le bean (BMP). Elles ne sont pas déployées via les techniques de déploiement par défaut des applications implémentant CMP ou BMP. Dans les applications JPA, vous devez définir une unité de persistance et configurer les propriétés appropriées afin de garantir que les applications peuvent être exécutées dans un environnement Java EE.

Le conteneur prend en charge l'ensemble des injections nécessaires afin de garantir que les applications fonctionnent dans l'environnement Java EE. Par exemple, le conteneur peut injecter @PersistenceUnit et @PersistenceContext pour les applications.

Procédure

  1. Générez les classes entités. Il s'agit d'entités POJO (Plain Old Java Object). En fonction de votre modèle de développement, vous pouvez être amené à utiliser certains ou tous les outils JPA :
    • Mappage descendant : commencer par définir les entités et effectuer des mappages au niveau des objets ; générer ensuite les schémas de base de données à partir de ces données. Si vous utilisez cette approche, vous faites partie des utilisateurs qui doivent créer l'architecture du modèle d'objet avant de procéder à l'écriture des classes entités. Ces dernières peuvent éventuellement servir de modèle lors de la création du modèle de base de données. Si vous utilisez un mappage descendant du modèle d'objet avec le modèle relationnel, vous devez développer les classes d'entités, puis utiliser la fonctionnalité Votre fournisseur JPA pour générer les tables de base de données qui sont basées sur les classes d'entités. L'outil wsmapping s'avère utile pour cette approche lorsque vous utilisez OpenJPA comme fournisseur de persistance.
    • Mappage ascendant : partir du modèle de données, qui correspond aux schémas de base de données, puis remonter vers les classes entités. L'outil wsreversemapping s'avère utile pour cette approche lorsque vous utilisez OpenJPA comme fournisseur de persistance.
    • Mappage intermédiaire : il s'agit du modèle de développement le plus couramment utilisé. La combinaison du modèle de données avec le modèle d'objet est partiellement terminée. Selon vos objectifs et vos exigences, vous devez négocier les relations afin de résoudre les divergences éventuelles. Dans cette approche, les outils wsmapping et wsreversemapping peuvent s'avérer utiles lorsque vous utilisez OpenJPA comme fournisseur de persistance.
    La solution JPA du serveur d'applications fournit plusieurs outils qui facilitent le développement d'applications utilisant JPA. La combinaison de ces outils avec IBM® Rational Application Developer garantit un environnement de développement solide pour les applications Java EE ou Java SE. Rational Application Developer comprend des outils d'interface graphique permettant d'insérer des annotations, un éditeur de fichier persistence.xml personnalisé, un explorateur de bases de données ainsi que d'autres fonctionnalités. Le projet Eclipse Dali représente une autre alternative. Pour plus d'informations sur Rational Application Developer ou le plug-in Eclipse Dali, consultez leurs sites Web respectifs.
  2. Compilez les classes d'entité.

    Compilez les entités comme vous le feriez avec toute classe Java, sauf si vous utilisez l'API Criteria. Si vous utilisez l'API Criteria, vous devez également générer les classes de métamodèle de cette API.

    Vous trouverez ci-dessous des exemples d'utilisation de cette option.

    Si vous utilisez EclipseLink, indiquez les arguments suivants à l'aide de la commande javac :
    -processor 
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml= persistence.xml_location 
    app_server_root/java/bin/javac 
    -classpath app_server_root/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 
    Si vous utilisez OpenJPA ou WSJPA, indiquez les arguments suivants à l'aide de la commande javac :
    -Aopenjpa.metamodel=true 
    app_server_root/java/bin/javac 
    -Aopenjpa.metamodel=true 
    -classpath app_server_root/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar  
    mypackage/MyEntity.java 
  3. Etendez les classes d'entités à l'aide de l'outil d'extension JPA eclenhancer pour EclipseLink et wsenhancer pour OpenJPA. Un outil d'extension ajoute automatiquement un code intermédiaire d'intégration spécifique du fournisseur dans les classes persistantes une fois que ces dernières ont été écrites. L'outil d'extension effectue un post-traitement du code intermédiaire généré par le compilateur Java et ajoute les zones et les méthodes nécessaires à l'implémentation des fonctions de persistance. Bien que le fournisseur de persistance du serveur d'applications puisse étendre automatiquement les entités lors de l'exécution, vous obtenez de meilleures performances si vous effectuez l'extension de vos entités lors de la génération de l'application. L'application ne tente pas d'améliorer les entités déjà améliorées.

    Pour obtenir des exemples d'utilisation de l'outil eclenhancer, voir la rubrique sur la commande eclenhancer. Pour obtenir des exemples d'utilisation de l'outil wsenhancer, voir la rubrique sur la commande wsenhancer.

  4. Facultatif : Si vous n'utilisez pas le modèle de développement de mappage scendant, activez la génération ou la mise à jour automatique des tables de la base de données ou générez et mettez ces dernières à jour à l'aide de l'outil wsmapping.
    • Par défaut, le mappage objet-relationnel ne s'enclenche pas automatiquement ; toutefois, vous pouvez configurer le serveur d'applications de sorte qu'il fournisse le mappage avec la propriété eclipselink.ddl-generation pour EclipseLink ou la propriété openjpa.jdbc.SynchronizeMappings pour OpenJPA. Ces dernières accélèrent le développement en s'assurant automatiquement que les tables de base de données sont conformes au modèle d'objet. Pour activer le mappage automatique, insérez la ligne suivante dans le fichier persistence.xml :
      Pour EclipseLink :
      <property name="eclipselink.ddl-generation" value =“create-tables”/> 
      Pour OpenJPA :
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>  
      Norme JPA 2.1 :
      <property name="javax.persistence.schema-generation.database.action" value="create"/>  
      Eviter les incidents Eviter les incidents: Pour activer le mappage objet-relationnel automatique pendant la phase d'exécution, vous devez répertorier toutes vos classes persistantes dans le fichier Java .class, le fichier de mappage et les éléments du fichier JAR (Java archive) au format XML.gotcha
    • Pour mettre à jour et générer manuellement les tables de la base données, démarrez l'outil de mappage de l'API JPA du serveur d'applications à partir de la ligne de commande afin de créer les tables dans la base de données. Pour obtenir des exemples d'exécution de l'outil eclenhancer, voir la rubrique sur la commande eclenhancer. Pour obtenir des exemples d'utilisation de l'outil wsmapping, voir la rubrique sur la commande wsmapping.
  5. Facultatif : Si vous utilisez OpenJPA et DB2 et souhaitez utiliser un SQL statique, exécutez la commande wsdbgen. L'utilisation de la commande wsdbgen n'est possible que si l'environnement d'exécution IBM Optim pureQuery est installé. La commande wsdbgen crée le fichier persistence_unit_name.pdqxml dans le même répertoire META-INF que celui dans lequel se trouve le fichier persistence.xml. Si vous avez plusieurs unités de persistance, la commande wsdbgen doit être exécutée pour chaque unité de persistance.

    Lorsque plusieurs fichiers pdqxml sont référencés par une application, servez-vous de l'utilitaire Merge pour les regrouper dans un seul fichier pdqxml. Indiquez le fichier pdqxml en tant que propriété pureQueryXml de pdqProperties. Consultez les informations relatives à l'utilitaire de fusion dans le centre de documentation d'IBM Integrated Data Management.

    Eviter les incidents Eviter les incidents: Les applications qui implémentent l'API JPA et qui sont configurées pour exécuter le langage SQL statique peuvent rencontrer des exceptions variées. Ces exceptions peuvent se produire avec la commande wsdbgen, que vous pouvez utiliser pour préparer l'application ou lorsque l'application est en cours d'exécution et appelle une méthode JPA. Pour résoudre ce problème, procédez comme suit :
    1. Installez les correctifs PTF pour le pilote JDBC iSeries V5R4. Installez les correctifs PTF numéro SI32561 et SI32562. Vous pouvez trouver les correctifs PTF via le support IBM System i : site Web PTF Cover Letters.
    2. Si vous utilisez une base de données DB2 Universal Database for iSeries V6R1 ou V5R3, accédez au site Web des correctifs pour trouver l'édition appropriée.
    3. Installez le niveau requis de pureQuery, qui est la version 1.3.100 ou une version ultérieure. Pour plus d'informations, voir le site Web IBM Optim pureQuery Runtime. Installez le pilote JCC le plus récent, celui de la version 3.52.95 ou une version ultérieure, avec le correctif pour APAR PK65069. Les pilotes JCC les plus récents sont disponibles dans le progiciel IBM DB2.
    4. Pour DB2 sur un serveur z/OS, installez le PTF UK39204 pour le pilote V8 ou le PTF UK39205 pour V9 et installez le correctif pour l'APAR PK67706.
    gotcha

    Pour obtenir des exemples d'exécution de cette commande, voir la rubrique sur la commande wsdbgen.

  6. Facultatif : Si vous utilisez OpenJPA et une identité gérée par une application, générez une classe identity gérée par une application à l'aide de l'outil wsappid. Dans ce cas, une ou plusieurs zones doivent être des zones identité. Utilisez une classe identity si votre entité contient plusieurs zones identité et que l'une d'elle, au moins, est reliée à une autre entité. L'outil d'identité géré par les applications génère un code Java qui utilise la classe d'identité pour tous les types de persistance implémentant l'identité gérée par l'application.

    Pour obtenir des exemples d'utilisation de l'outil wsappid, voir la rubrique sur la commande wsappid.

Exemple

Voici un exemple de fichier persistence.xml :
<?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>
        <!-- additional Mapping file, in addition to 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>

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadeveefepplus
Nom du fichier : tejb_jpadeveefepplus.html