JPA-Loader

Java Persistence API (JPA) ist eine Spezifikation, die die Zuordnung von Java-Objekten zu relationalen Datenbank ermöglicht. JPA enthält eine vollständige ORM-Spezifikation (Object-Relational Mapping, objektrelationale Abbildung) mit Metadatenannotationen für die Sprache Java und XML-Deskriptoren für die Definition der Zuordnung von Java-Objekten zu einer relationalen Datenbank und umgekehrt. Es gibt eine Reihe von Open-Source- und kostenpflichtigen Implementierungen.

Sie können eine JPA-Loader-Plug-in-Implementierung mit eXtreme Scale verwenden, um mit jeder vom ausgewählten Loader unterstützten Datenbank zu interagieren. Zur Verwendung von JPA müssen Sie einen unterstützten JPA-Provider wie OpenJPA oder Hibernate, JAR-Dateien und eine Datei META-INF/persistence.xml in Ihrem Klassenpfad haben.

Das JPALoader-Plug-in "com.ibm.websphere.objectgrid.jpa.JPALoader" und das JPAEntityLoader-Plug-in "com.ibm.websphere.objectgrid.jpa.JPAEntityLoader" sind zwei integrierte JPA-Loader-Plug-ins, die verwendet werden, um die ObjectGrid-Maps mit einer Datenbank zu synchronisieren. Sie müssen eine JPA-Implementierung wie Hibernate oder OpenJPA haben, um dieses Feature verwenden zu können. Als Datenbank kann jedes Back-End verwendet werden, das vom ausgewählten JPA-Provider unterstützt wird.

Sie können das JPALoader-Plug-in verwenden, wenn Sie Daten über die API "ObjectMap" speichern. Verwenden Sie das JPAEntityLoader-Plug-in, wenn Sie Daten über die API "EntityManager" speichern.

Architektur der JPA-Loader

Der JPA-Loader wird für eXtreme-Scale-Maps verwendet, in denen POJOs (Plain Old Java Objects) gespeichert werden.

Abbildung 1. Architektur der JPA-Loader
Architektur der JPA-Loader

Wenn eine Methode ObjectMap.get(Object key) aufgerufen wird, prüft die Laufzeitumgebung von eXtreme Scale zunächst, ob der Eintrag auf ObjectMap-Ebene vorhanden ist. Wenn nicht, delegiert die Laufzeitumgebung die Anforderung an den JPA-Loader. Auf die Anforderung hin, den Schlüssel zu laden, ruft der JPALoader die JPA-Methode EntityManager.find(Object key) auf, um die Daten auf JPA-Ebene zu suchen. Sind die Daten im JPA-EntityManager vorhanden, werden sie zurückgegeben, wenn nicht, interagiert der JPA-Provider mit der Datenbank, um den Wert abzurufen.

Bei einer Aktualisierung der ObjectMap, z. B. über die Methode "ObjectMap.update(Object key, Object value)", erstellt die Laufzeitumgebung von eXtreme Scale ein LogElement-Objekt für diese Aktualisierung und sendet es an den JPALoader. Der JPALoader ruft die JPA-Methode "EntityManager.merge(Object value)" auf, um den Wert in der Datenbank zu aktualisieren.

Beim JPAEntityLoader sind dieselben vier Ebenen beteiligt. Da das JPAEntityLoader-Plug-in jedoch für Maps verwendet wird, in denen eXtreme-Scale-Entitäten gespeichert werden, können Relationen zwischen den einzelnen Entitäten das Einsatzszenario komplizierter machen. Eine eXtreme-Scale-Entität unterscheidet sich von einer JPA-Entität. Weitere Einzelheiten finden Sie im Abschnitt JPAEntityLoader-Plug-in.Weitere Einzelheiten finden Sie im Abschnitt JPAEntityLoader-Plug-in.Weitere Einzelheiten finden Sie in den Informationen zum JPAEntityLoader-Plug-in in der Veröffentlichung Programmierung.

Methoden

Loader (Ladeprogramme) stellen drei Hauptmethoden bereit:
  1. get: Gibt eine Liste mit Werten zurück, die der Liste der Schlüssel entspricht, die durch Abruf der Daten über JPA übergeben werden. Die Methode verwendet JPA, um die Entitäten in der Datenbank zu suchen. Für das JPALoader-Plug-in enthält die zurückgegebene Liste eine Liste der JPA-Entitäten, die direkt von der Suchoperation zurückgegeben werden. Für das JPAEntityLoader-Plug-in enthält die zurückgegebene Liste Tupel für die eXtreme-Scale-Entitätswerte, die aus den JPA-Entitäten konvertiert wurden.
  2. batchUpdate: Schreibt die Daten aus den ObjectGrid-Maps in die Datenbank. Ja nach Operationstyp (Einfügen, Aktualisieren oder Löschen) verwendet der Loader die JPA-Operationen "persist", "merge" und "remove", um die Daten in der Datenbank zu aktualisieren. Für JPALoader werden die Objekte in der Map direkt als JPA-Entitäten verwendet. Für JPAEntityLoader werden die Entitätstupel in der Map in Objekte konvertiert, die als JPA-Entitäten verwendet werden.
  3. preloadMap: Lädt die Daten über die Methode "ClientLoader.load" des Clientladeprogramms vorab in die Map. Für partitionierte Maps wird die Methode "preloadMap" nur in einer einzigen Partition aufgerufen. Die Partition wird mit der Eigenschaft "preloadPartition" der Klasse "JPALoader" bzw. "JPAEntityLoader" angegeben. Wenn die Eigenschaft "preloadPartition" auf einen Wert kleiner als null oder größer als (Gesamtanzahl_der_Partitionen - 1) gesetzt wird, wird das vorherige Laden inaktiviert.

JPALoader- und JPAEntityLoader-Plug-ins arbeiten mit JPATxCallback, um die eXtreme-Scale-Transaktionen und JPA-Transaktionen zu koordinieren. JPATxCallback muss in der ObjectGrid-Instanz für die Verwendung dieser beiden Loader konfiguriert werden.

Konfiguration und Programmierung

Wenn Sie JPA-Loader in einer Multimasterumgebung verwenden, lesen Sie den Abschnitt Hinweise zu Ladeprogrammen in einer Multimastertopologie. Weitere Einzelheiten zum Konfigurieren von JPA-Loadern finden Sie in JPA-Loader konfigurieren. Weitere Informationen zur Programmierung von JPA-Loadern finden Sie im Abschnitt Hinweise zur Programmierung von JPA-Loadern.