JPA-2.x-Anwendungen für eine Java EE-Umgebung entwickeln

Die Container im Anwendungsserver können viele der Funktionen bereitstellen, die für JPA (Java™ Persistence API) in einer Java EE-Umgebung (Java Enterprise Edition) erforderlich sind. Der Anwendungsserver stellt außerdem JPA-Befehlstools bereit, die die Entwicklung von Anwendungen in einer Java EE-Umgebung unterstützen.

Informationen zu diesem Vorgang

Achtung: Führen Sie die JPA-Befehlstools im Verzeichnis "<Profilstammverzeichnis>/bin" und nicht im Verzeichnis "Stammverzeichnis_des_Anwendungsservers/bin" aus, um sicherzustellen, dass Sie die neueste Version der Befehle für Ihren Release-Level haben.

Für diese Task müssen Sie die eigenständige JAR-Datei (Java Archive) com.ibm.ws.jpa-2.1.thinclient_9.0.jar in Ihrem Klassenpfad angeben, um die Kompilierung für die JPA 2.1-Schnittstellen durchführen zu können. Geben Sie für das Durchführen der Kompilierung für die JPA 2.0-Schnittstellen, die Datei "com.ibm.ws.jpa-2.0.thinclient_9.0.jar" an. Diese eigenständige JAR-Datei ist in den Installationsimages verfügbar. Diese Dateien befinden sich im Serverinstallationsimage im Verzeichnis "${Stammverzeichnis_des_Anwendungsservers}/runtimes".

Wichtig: Für JPA-Anwendungen sind andere Konfigurationsverfahren erforderlich als für Anwendungen, die CMP (Container-Managed Persistence, über Container realisierte Transaktionspersistenz) oder BMP (Bean-Managed Persistence, über JavaBeans realisierte Transaktionspersistenz) verwenden. Sie folgen nicht den üblichen Implementierungsverfahren, die für Anwendungen angewendet werden, die CMP oder BMP implementieren. In JPA-Anwendungen müssen eine Persistenzeinheit definiert und die geeigneten Eigenschaften konfiguriert werden, um sicherzustellen, dass die Anwendungen in einer Java EE-Umgebung ausgeführt werden können.

Der Container unterstützt alle erforderlichen Injektionen, um sicherzustellen, dass die Anwendungen in der Java EE-Umgebung ausgeführt werden können. Beispielsweise kann der Container die Annotationen @PersistenceUnit und @PersistenceContext für Ihre Anwendungen einfügen.

Vorgehensweise

  1. Generieren Sie Ihre Entitätsklassen. Dies sind POJO-Entitäten (Plain Old Java Object). Abhängig von Ihrem Entwicklungsmodell müssen Sie entweder einige der folgenden JPA-Tools oder alle verwenden:
    • Top-down-Zuordnung: Sie beginnen damit, dass Sie die Eintitätsdefinitionen und die objektbezogenen Zuordnungen neu erstellen, und anschließend leiten Sie die Datenbankschemas von diesen Daten ab. Wenn Sie diese Vorgehensweise verwenden, befassen Sie sich vermutlich mit der Erstellung der Architektur Ihres Objektmodells und anschließend mit dem Schreiben Ihrer Entitätsklassen. Diese Entitätsklassen würden schließlich für die Erstellung Ihres Datenbankmodells verwendet werden. Wenn Sie eine Top-down-Zuordnung vom Objektmodell zum relationalen Modell verwenden, entwickeln Sie die Entitätsklassen und verwenden anschließend die Funktionalität Ihres JPA-Providers, um die auf den Entitätsklassen basierenden Datenbanktabellen zu generieren. Das Tool wsmapping unterstützt diese Vorgehensweise, wenn Sie OpenJPA als Ihren Persistenzprovider verwenden.
    • Bottom-up-Zuordnung: Sie beginnen mit Ihrem Datenmodell, das aus den Datenbankschemas besteht, und arbeiten sich zu den Entitätsklassen nach oben. Das Tool wsreversemapping unterstützt diese Vorgehensweise, wenn Sie OpenJPA als Ihren Persistenzprovider verwenden.
    • Meet-in-the-middle-Zuordnung: Dies ist vermutlich das am häufigsten verwendete Entwicklungsmodell. Sie verwenden eine Kombination aus dem Datenmodell und dem teilweise erstellten Objektmodell. Abhängig von den Zielen und Anforderungen müssen die Beziehungen zwischen den Modellen ausgehandelt werden, um Abweichungen zu beheben. Die Tools wsmapping und wsreversemapping unterstützen diese Vorgehensweise, wenn Sie OpenJPA als Ihren Persistenzprovider verwenden.
    Die JPA-Lösung für den Anwendungsserver stellt mehrere Tools bereit, die Sie bei der Entwicklung von JPA-Anwendungen unterstützen. In Kombination mit IBM® Rational Application Developer bilden diese Tools eine solide Entwicklungsumgebung für Java EE- und Java SE-Anwendungen. Rational Application Developer enthält GUI-Tools für das Einfügen von Annotationen, einen Editor zum Anpassen der Datei persistence.xml, einen Datenbank-Explorer und weitere Features. Eine andere Alternative ist das Eclipse-Dali-Projekt. Weitere Informationen zu Rational Application Developer und zum Eclipse-Dali-Plug-in finden Sie auf den entsprechenden Websites.
  2. Kompilieren Sie die Entitätsklassen.

    Kompilieren Sie die Entitäten so, wie Sie Java-Klassen kompilieren würden, es sei denn, Sie verwenden die API "Criteria". Wenn Sie die API "Criteria" verwenden, müssen Sie auch die Metamodellklassen für die API "Criteria" generieren.

    Im Folgenden finden Sie einige Beispiele für die Verwendung dieser Option.

    Geben Sie über EclipseLink die folgenden Argumente mit dem Befehl javac an:
    -processor 
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml= persistence.xml_location 
    Stammverzeichnis_des_Anwendungsservers/java/bin/javac
    -classpath Stammverzeichnis_des_Anwendungsservers/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 
    Geben Sie über OpenJPA oder WSJPA die folgenden Argumente mit dem Befehl javac an:
    -Aopenjpa.metamodel=true
    Stammverzeichnis_des_Anwendungsservers/java/bin/javac
    -Aopenjpa.metamodel=true
    -classpath Stammverzeichnis_des_Anwendungsservers/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar
    mypackage/MyEntity.java
  3. Erweitern Sie die Entitätsklassen mit dem JPA-Enhancer-Tool eclenhancer für EclipseLink bzw. wsenhancer für OpenJPA. Ein Enhancer (Erweiterungstool) ist ein Tool, das den persistenten Klassen, die Sie schreiben, providerspezifischen Integrationsbytecode hinzufügt. Der Enhancer führt eine Nachbearbeitung für den vom Java-Compiler generierten Code durch und fügt die Felder und Methoden hinzu, die für die Implementierung der Persistenzfeatures erforderlich sind. Obwohl der Persistenzprovider des Anwendungsservers die Entitäten während der Ausführung automatisch erweitern kann, erzielen Sie eine bessere Leistung, wenn Sie Ihre Entitäten beim Erstellen der Anwendung erweitern. Die Anwendung versucht nicht, Entitäten zu erweitern, die bereits erweitert sind.

    Beispiele zur Verwendung des Tools eclenhancer finden Sie im Artikel zum Befehl "eclenhancer". Beispiele zur Verwendung des Tools wsenhancer finden Sie im Artikel zum Befehl "wsenhancer".

  4. Optional: Falls Sie nicht das Entwicklungsmodell für die Bottom-up-Zuordnung verwenden, generieren oder aktualisieren Sie die Datenbanktabellen automatisch oder mit dem Tool eclenhancer bzw. wsmapping.
    • Standardmäßig wird die objektbezogene Zuordnung nicht automatisch ausgeführt, Sie können den Anwendungsserver jedoch so konfigurieren, dass er diese Zuordnung mit der Eigenschaft "eclipselink.ddl-generation" für EclipseLink bzw. der Eigenschaft "openjpa.jdbc.SynchronizeMappings" für OpenJPA bereitstellt. Diese Eigenschaften können die Entwicklung beschleunigen, indem es automatisch sicherstellt, dass die Datenbanktabellen mit dem Objektmodell übereinstimmen. Um die automatische Zuordnung zu aktivieren, nehmen Sie folgende Zeile in die Datei persistence.xml auf:
      Für EclipseLink:
      <property name="eclipselink.ddl-generation" value =“create-tables”/> 
      Für OpenJPA:
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>  
      JPA 2.1-Standard:
      <property name="javax.persistence.schema-generation.database.action" value="create"/>  
      Fehler vermeiden Fehler vermeiden: Damit die automatische objektbezogene Zuordnung zur Ausführungszeit aktiviert wird, müssen alle persistenten Klassen in der Java-Datei .class, der Zuordnungsdatei und den JAR-Dateielementen (Java Archive) im XML-Format aufgelistet sein.gotcha
    • Damit die Datenbanktabellen manuell aktualisiert oder generiert werden, führen Sie das JPA-Zuordnungstool für den Anwendungsserver in der Befehlszeile aus, um die Tabellen in der Datenbank zu erstellen. Beispiele zum Ausführen Verwendung des Tools eclenhancer finden Sie im Artikel zum Befehl "eclenhancer". Beispiele zur Verwendung des Tools wsmapping finden Sie im Artikel zum Befehl "wsmapping".
  5. Optional: Wenn Sie mit OpenJPA und DB2 arbeiten und statische SQL verwenden möchten, führen Sie den Befehl wsdbgen aus. Zur Verwendung des Tools wsdbgen muss IBM Optim pureQuery Run time installiert sein. Der Befehl wsdbgen erstellt die Datei Name_der_Persistenzeinheit.pdqxml in demselben Verzeichnis META-INF, in dem sich auch die Datei persistence.xml befindet. Wenn Sie mehrere Persistenzeinheiten haben, muss der Befehl wsdbgen für jede Persistenzeinheit ausgeführt werden.

    Wenn eine Anwendung mehrere Dateien pdqxml referenziert, verwenden Sie das Dienstprogramm Merge, um diese Dateien zu einer einzigen Datei pdqxml zusammenzuführen. Geben Sie die kombinierte Datei pdqxml als pureQueryXml-Eigenschaft von "pdqProperties" an. Lesen Sie die Dokumentation zum Dienstprogramm Merge im Information Center von IBM Integrated Data Management.

    Fehler vermeiden Fehler vermeiden: In Anwendungen, die JPA implementieren und für die Ausführung der statischen SQL konfiguriert sind, können verschiedene Ausnahmen eintreten. Diese Ausnahmen können bei der Ausführung des Befehls wsdbgen eintreten, mit dem Sie die Anwendung vorbereiten, oder beim Aufruf einer JPA-Methode durch die aktive Anwendung. Sie können das Problem wie folgt beheben:
    1. Installieren Sie die vorläufigen Programmkorrekturen (PTF, Program Temporary Fix) für iSeries JDBC Driver V5R4. Installieren Sie die PTFs mit den Nummern SI32561 und SI32562. Sie finden die PTFs über die Website "Support: PTF Cover Letters" der Unterstützungsfunktion von IBM System i.
    2. Wenn Sie DB2 Universal Database for iSeries V6R1 oder V5R3 verwenden, rufen Sie die Website mit den Fixes für das entsprechende Release auf.
    3. Installieren Sie die erforderliche Version von pureQuery (Version 1.3.100 oder höher). Weitere Informationen finden Sie auf der Website von IBM Optim pureQuery Runtime. Installieren Sie die neuesten JCC-Treiber (Version 3.52.95 oder höher) mit dem Fix für APAR PK65069. Die neuesten JCC-Treiber sind im Softwarepaket von IBM DB2 enthalten.
    4. Installieren Sie für DB2 auf einem z/OS-Server PTF UK39204 für den alternativen Treiber der Version 8 bzw. PTF UK39205 für Version 9 und installieren Sie den Fix für APAR PK67706.
    gotcha

    Beispiele für die Ausführung dieses Befehls finden Sie im Artikel zum Befehl wsdbgen.

  6. Optional: Wenn Sie OpenJPA und anwendungsverwaltete Identitäten verwenden, generieren Sie mit dem Tool wsappid eine Klasse für anwendungsverwaltete Identitäten. Wenn Sie eine anwendungsverwaltete Identität verwenden, muss mindestens ein Feld ein Identitätsfeld sein. Verwenden Sie eine Identitätsklasse, wenn Ihre Entität mehrere Identitätsfelder enthält und mindestens eines der Felder mit einer anderen Entität verknüpft ist. Das anwendungsverwaltete Identitätstool generiert Java-Code, der die Identitätsklasse für alle persistenten Typen verwendet, die die anwendungsverwaltete Identität implementieren.

    Beispiele zur Verwendung des Tools wsappid finden Sie im Artikel zum Befehl "wsappid".

Beispiel

Im Folgenden sehen Sie ein Beispiel für eine Datei 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>
        <!-- weitere Zuordnungsdatei neben "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>

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadeveefepplus
Dateiname:tejb_jpadeveefepplus.html