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
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.
- 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.
- 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
- 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".
- 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: 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".
- 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: 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:
- 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.
- Wenn Sie DB2 Universal Database for iSeries V6R1
oder V5R3 verwenden, rufen Sie die Website mit den Fixes für das entsprechende Release auf.
- 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.
- 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.
- 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>