Dynamischer Cache-Provider für den L2-Cache von JPA 2.0

In diesem Artikel wird beschrieben, wie Sie den dynamischen Cache-Service von WebSphere Application Server als JPA-L2-Cache-Provider verwenden. JPA 2.0 besitzt eine standardisierte L2-Cacheschnittstelle. WebSphere Application Server unterstützt den Standard JPA. Der dynamische Cache-Service wird als L2-Cache-Provider für JPA verwendet. Der L2-Cache steigert die Leistung Ihrer JPA-Anwendung und Sie können den dynamischen Cache-Service für Ihre JPA-Anwendung in der WebSphere Application Server-Umgebung konfigurieren und überwachen.

Ein JPA-L2-Cache-Provider für JPA 2.0 für den dynamischen Cache verwendet Entitätsstatus für mehrere Persistenzkontexte, Transaktionen und Benutzer. Wenn Entitäten bei aktiviertem Caching nicht im Persistenzkontext gefunden werden, werden sie aus dem L2-Cache geladen. Durch das L2-Caching wird für zurzeit geladene Entitäten der Datenbankzugriff vermieden. Weitere Details zum L2-Caching finden Sie in der Spezifikation JPA 2.0.

Achtung: Das L2-Caching erhöht den Speicherverbrauch der Anwendung, sodass es wichtig ist, die Größe des L2-Cache zu begrenzen. In einer Clusterumgebung kann es für aktualisierte Objekte veraltete Daten geben. Konfigurieren Sie das L2-Caching für Entitäten, die selten modifiziert und im Wesentlichen nur gelesen werden. Für häufig und simultan aktualisierte Entitäten werden L2-Caches nicht empfohlen.

JPA nutzt mehrere konfigurierbare L2-Caches, um die Leistung zu maximieren. Der JPA-Datencache ist ein Cache mit persistenten Objektdaten, der auf der Ebene der EntityManagerFactory arbeitet. Wenn der Datencache aktiviert ist, wird er vor Interaktionen mit dem Datenspeicher überprüft. Daten werden im Cache gespeichert, wenn Objekte festgeschrieben werden und wenn persistente Objekte aus dem Datenspeicher geladen werden. Zusätzlich zum Datencache definiert JPA Service-Provider-Schnittstellen für einen Abfragecache.

Der Abfragecache speichert Objekt-IDs, die von den ausgeführten Abfragen zurückgegeben werden. Wenn Sie eine Abfrage ausführen, assembliert JPA einen Schlüssel, der auf den Abfrageeigenschaften und den Parametern basiert, die zur Startzeit verwendet werden, und sucht nach einem zwischengespeicherten Abfrageergebnis. Wenn er ein Ergebnis im Cache findet, werden dessen Objekt-IDs geprüft und die entsprechenden persistenzfähigen Objekte zurückgegeben. Andernfalls wird die Abfrage für die Datenbank gestartet, und die Objekt-IDs werden von der Abfrage geladen und im Cache gespeichert. Die Liste der Objekt-IDs wird erst im Cache gespeichert, wenn die zur Startzeit der Abfrage zurückgegebene Liste vollständig durchgegangen wurde.

Der WebSphere-Cache-Provider für dynamischen Cache ist aufgrund seiner Mehrwertfeatures eine ausgezeichnete Alternative zu den Standardcache-Providern für parallele Datencaches und Abfragecaches von WebSphere Application Server. Er stellt unter anderem eigene Features und von WebSphere Application Server übernommene Funktionen bereit. Der dynamische Cache bietet Ihnen folgende Vorteile:
  • Synchronisation und Replikation verteilter Caches im Cluster durch den Datenreplikationsservice und die HA-Services von WebSphere Application Server
  • Zukunftsweisende und professionelle DataCache- und QueryCache-Überwachung, -Optimierung und -Verwaltung des Cache. Der L2-Cache übernimmt das gesamte direkte Geschäftsumfeld der Anbieter von Tools für dynamischen Cache.
  • z/OS-Unterstützung für native Servantregion
  • Mindestens die gleiche Leistung wie der Standardcache-Provider

Der Standard JPA unterstützt Aliase als Mechanismus für eine einfache Konfiguration von JPA-Plug-ins. Der L2-Cache-Provider für JPA 2.0 für den dynamischen Cache wird gewöhnlich mit dem Alias dynacache konfiguriert. Sie können den Alias dynacache für die Definition der Eigenschaften "DataCache" und "QueryCache" von JAP verwenden. Wenn die Eigenschaft "QueryCache" für die Verwendung von dynacache definiert ist, verwendet die Eigenschaft "DataCache" ebenfalls den Alias dynacache. Sie können die Eigenschaften "QueryCache" und "DataCache" für die Verwendung verschiedener Cache-Providertypen konfigurieren. Die Eigenschaft "QueryCache" können Sie beispielsweise auf "default" setzen und die Eigenschaft "DataCache" für den dynamischen Cache konfigurieren und umgekehrt. Im Idealfall verwenden Sie für DataCache, QueryCache und DataCacheManager den dynamischen Cache-Service von WebSphere Application Server. Wenn "DataCache" auf dynacache gesetzt ist, führt "RemoteCommitProvider" keine Aktion aus, weil DRS und HAM für die Cachesynchronisation genutzt werden. Sie können die Eigenschaft "QueryCache" nicht gesondert von "DataCache" aktivieren. Die Eigenschaft "QueryCache" profitiert von der Verfügbarkeit der Eigenschaft "DataCache", in der die Entitätsdaten zwischengespeichert werden.

JPA-L2-Provider für dynamischen Cache konfigurieren (Basismethode)

Aktivieren Sie den dynamischen Cache-Service als L2-Cache-Provider für JPA 2.0, indem Sie einige oder alle der folgenden Eigenschaften auf dynacache setzen: OpenJPA openjpa.QueryCache, openjpa.DataCache und openjpa.DataCacheManager. Diese Standardkonfiguration ist für die meisten Umgebungen geeignet.
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/> 
<property name="openjpa.DataCacheManager" value="dynacache"/>
Tabelle 1. Namen und Aliasnamen von Eigenschaften. Dies sind die vollständig qualifizierten Namen und Aliasnamen von Eigenschaften für den dynamischen Cache.
Name des dynamischen Cache Eigenschaftsname Alias
DataCache-Cache-Provider com.ibm.ws.cache.openjpa. DynacacheDataCache dynacache
QueryCache-Cache-Provider com.ibm.ws.cache.openjpa. DynacacheQueryCache dynacache
RemoteCommitProvider com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider Ohne
DataCacheManager com.ibm.ws.cache.openjpa. DynacacheDataCacheManager dynacache

JPA-L2-Provider für dynamischen Cache konfigurieren (erweiterte Methode)

Konfigurieren Sie die dynamische Cacheinstanz für den L2-Daten- oder Abfragecache (JPA 2.0) mit zusätzlichen oder erweiterten Konfigurationseigenschaften in der Persistenzeinheit (erweiterte Methode). Aktivieren Sie den dynamischen Cache-Service als L2-Cache-Provider für JPA 2.0, indem Sie einige oder alle der folgenden Eigenschaften auf dynacache setzen: OpenJPA openjpa.QueryCache, openjpa.DataCache und openjpa.DataCacheManager.
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache", 
                                                    CacheSize=1000, 
                                                    EnableDiskOffload=true, 
                                                    DiskCacheSizeInGB=4, 
                                                    DiskOffloadLocation=c:\temp, 
                                                    EnableCacheReplication=true)"/> 
Tabelle 2. Eigenschaftsnamen und -werte für dynamischen Cache. Dies sind Eigenschaften der dynamischen Cacheinstanz, die in der persistenten Einheit konfiguriert werden können.
Angepasste Eigenschaften für den dynamischen Cache Standardwerte
CacheName default
CacheSize 2000
EnableDiskOffload false
EnableCacheReplication false
DiskCacheSizeInGB Nicht zutreffend
DiskOffloadLocation Nicht zutreffend
ReplicationType 1 , 2 oder 4. Der Wert 1 steht für NOT_SHARED, 2 für PUSH und 4 für PUSH_PULL.
Wichtig: Die Eigenschaften in der Tabelle sind nicht obligatorisch. Wenn sie nicht angegeben sind, verwendet der dynamische Cache-Service die Standardwerte, die für die Mehrzahl der Benutzer geeignet sind.
Das folgende Beispiel demonstriert aktive Operationen der MBean für dynamischen Cache zur Überwachung des L2-Cache:
wsadmin>set mbean [$AdminControl queryNames type=DynaCache,*]

wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
66
71
10
A5614-67

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
Sie können auch den Extended Cache Monitor verwenden, um den Inhalt der Cache-ID und Schlüsselwerte anzuzeigen, die von der JPA-Laufzeit in den Cache gestellt werden.

L2-Cache-Provider für dynamischen Cache in einer Clusterumgebung verwenden

Kunden können auf die herkömmliche Weise eine Cacheinstanz in WebSphere Application Server definieren und den Namen dann in der Eigenschaft "CacheName" des JPA-DataCache-Eigenschaftswerts referenzieren. Sie können die Datei cacheinstances.properties, die DistributedMapFactory oder die Administrationskonsole verwenden, um eine Objektcacheinstanz zu definieren.

Alle Eigenschaften sind optional. Wenn sie nicht angegeben sind, werden Standardeigenschaften verwendet. Falls die Cacheinstanz nicht vorhanden ist, wird sie vom dynamischen Cache-Service erstellt. Die erweiterte Konfiguration für eine QueryCache-Dynacache-Instanz erfolgt auf ähnliche Weise.

Der JPA-Datencache funktioniert in Umgebungen mit einer einzigen JVM und in Umgebungen mit mehreren JVMs. Bei mehreren JVMs wird für das Caching der Datenreplikationsservice (DRS) in einer Clusterumgebung mit WebSphere Application Server Network Deployment verwendet.

Konfigurieren Sie für Entitäten und Abfragen in den dynamischen DataCache- und QueryCache-Cacheinstanzen, die mit dem Datenreplikationsservice auf Servern in einer Umgebung mit WebSphere Application Server Network Deployment repliziert werden, eine Replikationsdomäne. Ordnen Sie diese Replikationsdomäne dann der Cacheinstanz zu. In der persistenten Einheit muss die openJPA-Eigenschaft "openjpa.RemoteCommitProvider" ebenfalls auf none gesetzt sein.

Gehen Sie wie folgt vor, um eine dynamische OpenJPA-L2-Cacheinstanz zu replizieren:
  1. Erstellen Sie in der Administrationskonsole eine Replikationsdomäne. Verwenden Sie die Anzeige des dynamischen Cache-Service, um diese Replikationsdomäne für alle Anwendungsserver, die den verteilten Cache gemeinsam nutzen müssen, der baseCache-Cacheinstanz zuzuordnen. Der dynamische Cache-Service repliziert Daten der Server in der Replikationsdomäne.
  2. Konfigurieren Sie die Cacheinstanz, indem Sie die Eigenschaft "enableCacheReplication" auf "true" setzen. Wenn Sie die Eigenschaft "replicationType" nicht angeben, wird die Cacheinstanz standardmäßig im Freigabemodus NOT_SHARED konfiguriert, in dem nur Invalidierungen repliziert werden. Sie können die Cacheinstanz mit den Freigabetypen NOT_SHARED, PUSH und PUSH_PULL konfigurieren. Weitere Informationen zu diesem Thema finden Sie im Artikel zur Cachereplikation.
  3. Setzen Sie die angepasste JVM-Eigenschaft com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup in allen Anwendungsservern der Replikationsdomäne auf true. Diese angepasste Eigenschaft ermöglicht ein früheres und schnelleres Bootstrapping von JPA-Cacheinstanzen in Servern.
  4. Erstellen Sie eine gemeinsam genutzte Bibliothek, um die Entitätsklassen im Klassenpfad des Anwendungsservers bereitzustellen. Ordnen Sie die definierte gemeinsam genutzte Bibliothek dem Klassenladeprogramm des Servers zu. Dieser Schritt ist notwendig, damit der dynamische Cache-Service und der DRS die replizierten Entitätsobjekte entserialisieren kann. Weitere Informationen zu gemeinsam genutzten Bibliotheken finden Sie in den Artikeln "Gemeinsam genutzte Bibliotheken, "Gemeinsam genutzte Bibliotheken verwalten" und "Gemeinsam genutzte Bibliotheken Servern zuordnen".
  5. Setzen Sie "openjpa.RemoteCommitProvider" auf none.
Sie können auch andere RemoteCommitProvider-Implementierungen verwenden, die mit JPA 2.0 mit dynamischem Cache bereitgestellt werden, insbesondere die folgenden:
  • org.apache.openjpa.event.SingleJVMRemoteCommitProvider (mit dem Aliasnamen "sjvm" konfiguriert)
  • org.apache.openjpa.event.TCPRemoteCommitProvider
  • org.apache.openjpa.event.JMSRemoteCommitProvider
Weitere Informationen zum Fern- und Offlinebetrieb finden Sie in der JPA-Dokumentation.
Achtung: Konfigurieren Sie den dynamischen Cache mit DRS für die Replikation von JPA-Daten und QueryCache-Objekten und unter Verwendung der RemoteCommitProvider-Eigenschaft "NoOp" in einer verteilten Umgebung oder Clusterumgebung.

Fehlerbehebung für den JPA-L2-Cache

Suchen Sie in der Protokolldatei nach den folgenden Nachrichten, wenn Sie den dynamischen Cache-Service als JPA-Cache-Provider verwenden:
# Signifikante Nachrichten für den dynamischen OpenJPA-Cache in der Datei SystemOut.log
DYNA1081I: Die OpenJPA-L2-DataCache-Dynacache-Instanz \"{0}\" für die persistente Einheit \"{1}\" wurde erfolgreich erstellt bzw. abgerufen.

# Nur anwendbar, wenn QueryCache aktiviert ist.
DYNA1080I: Die OpenJPA-L2-QueryCache-Dynacache-Instanz \"{0}\" für die persistente Einheit \"{1}\" wurde erfolgreich erstellt bzw. abgerufen.
Anmerkung: Dieser Artikel referenziert eine oder mehrere Protokolldateien des Anwendungsservers. Alternativ dazu wird empfohlen, den Server so zu konfigurieren, dass er die HPEL-Protokoll- und -Traceinfrastruktur (High Performance Extensible Logging) verwendet und nicht die Dateien SystemOut.log , SystemErr.log, trace.log und activity.log auf verteilten oder IBM® i-Systemen. Sie können HPEL auch in Verbindung mit Ihren nativen z/OS-Protokolleinrichtungen verwenden. Wenn Sie HPEL verwenden, können Sie mit dem Befehlszeilentool LogViewer im Verzeichnis "bin" des Serverprofils auf alle Ihre Protokoll- und Tracedaten zugreifen. Weitere Informationen zur Verwendung von HPEL finden Sie in der Dokumentation zum Einsatz von HPEL für die Fehlerbehebung in Anwendungen.

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



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