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.
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.
- 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)
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/>
<property name="openjpa.DataCacheManager" value="dynacache"/>
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)
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache",
CacheSize=1000,
EnableDiskOffload=true,
DiskCacheSizeInGB=4,
DiskOffloadLocation=c:\temp,
EnableCacheReplication=true)"/>
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. |
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.
- 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.
- 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.
- 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.
- 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".
- Setzen Sie "openjpa.RemoteCommitProvider" auf none.
- org.apache.openjpa.event.SingleJVMRemoteCommitProvider (mit dem Aliasnamen "sjvm" konfiguriert)
- org.apache.openjpa.event.TCPRemoteCommitProvider
- org.apache.openjpa.event.JMSRemoteCommitProvider
Fehlerbehebung für den JPA-L2-Cache
# 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.