Durch Verwendung der Schnittstelle "DistributedMap" bzw. "DistributedObjectCache" können Java™ EE-Anwendungen (Java Platform, Enterprise Edition) und Systemkomponenten Java-Objekte zwischenspeichern und gemeinsam nutzen, indem sie eine
Referenz auf das Objekt in den Cache stellen.
Informationen zu diesem Vorgang
Die Schnittstellen "DistributedMap" und "DistributedObjectCache" sind einfache
Schnittstellen für den dynamischen Cache. Mit diesen Schnittstellen können Java EE-Anwendungen und Systemkomponenten Java-Objekte zwischenspeichern und gemeinsam nutzen, indem sie eine Referenz auf das Objekt in den
Cache stellen. Die Standardinstanz des dynamischen Caches wird erstellt, wenn
der dynamische Cache-Service in der Administrationskonsole aktiviert wird.
Diese Standardinstanz wird mit dem Namen "services/cache/distributedmap" an den globalen JNDI-Namespace gebunden.
Bei Verwendung mehrerer Instanzen der Schnittstellen "DistributedMap" und "DistributedObjectCache" in einer JVM (Java Virtual Machine) können Anwendungen nach Bedarf gesonderte Cacheinstanzen
konfigurieren. Jede Instanz der Schnittstelle "DistributedMap" hat eigene Eigenschaften.
Tipp: Weitere Informationen zu den Schnittstellen "DistributedMap" und "DistributedObjectCache" finden
Sie in der API-Dokumentation zum Paket "com.ibm.websphere.cache". Weitere Informationen finden Sie im Artikel
Zusätzliche Anwendungsprogrammierschnittstellen.
Wichtig: Wenn Sie angepasste
Objektschlüssel verwenden, müssen Sie Ihre Klassen in eine gemeinsam genutzte Bibliothek stellen. Sie können
die gemeinsam genutzte Bibliothek auf Zellen-, Knoten- oder Serverebene definieren.
Erstellen Sie anschließend in jedem Server einen Klassenlader, und ordnen Sie ihn der gemeinsam genutzten Bibliothek zu, die Sie definiert haben.
Weitere Informationen finden Sie in den Artikeln
Gemeinsam genutzte Bibliotheken verwalten und
Einstellungen des Klassenladers.
Stellen
Sie die JAR-Dateien in eine gemeinsam genutzte Bibliothek, wenn Sie die Anwendung in einem Cluster implementieren und die Replikation aktiviert ist.
Das Aktivieren der Replikation allein erfordert noch keine gemeinsam genutzte Bibliothek. Wenn Sie jedoch anwendungsspezifische Java-Objekte verwenden, wie z. B. Cacheschlüssel oder Cachewerte, müssen diese Java-Klassen in die gemeinsam genutzte
Bibliothek gestellt werden.
Wenn diese Werte nicht in einer gemeinsam genutzten Bibliothek enthalten sind,
werden Ausnahmen vom Typ "ClassNotFound" ausgelöst, wenn der Datenreplikationsservice versucht, dieses Objekt auf
Empfängerseite zu entserialisieren.
In einer Clusterumgebung kann der Inhalt des Cache von mehreren Servern des Clusters gemeinsam benutzt werden. Der Cacheienhalt kann aber
auch auf einen Datenträger ausgelagert werden. Wenn zwischengespeicherte Objekte gemeinsam benutzt oder
auf einen Datenträger ausgelagert werden sollen, müssen
diese Objekte serialisierbar sein. Werden nicht serialisierbare Objekte in den Cache gestellt, müssen Sie
als Richtlinie für gemeinsame Benutzung "Nicht gemeinsam benutzt" angeben. Die Beschreibung im Artikel
Schnittstelle DistributedMap
enthält Informationen zur Angabe der Richtlinie zur gemeinsamen Verwendung eines zwischengespeicherten
Objekts.
Wenn Sie für nicht serialisierbare Objekte eine andere Richtlinie als "Nicht gemeinsam benutzt" angeben,
kann die Systemleistung stark abfallen.
Es gibt vier Methoden für das Konfigurieren und Verwenden von Cacheinstanzen:
- Standardobjektcache konfigurieren (Methode 1 in der Vorgehensweise)
- Angepassten Objektcache erstellen und konfigurieren (Methode 3 in der Vorgehensweise)
- Angepassten Objektcache über die Datei "cacheinstances.properties" erstellen und konfigurieren
(Methode 4 in der Vorgehensweise)
- Ressourcenreferenz verwenden (Methode 5 in der Vorgehensweise)
- Methode 1 - Standardcacheinstanzen konfigurieren
Die
standardmäßig verwendete Servlet-Cache-Instanz (JNDI-Name services/cache/basecache) wird erstellt, wenn der
Server gestartet wird und das Servlet-Caching aktiviert ist.
Die Standardobjektcacheinstanz (JNDI-Name services/cache/distributedmap)
wird immer beim Serverstart erstellt.
- Wählen Sie in der Administrationskonsole
Server >
Servertypen > WebSphere-Anwendungsserver > Servername >
Containerservices > Dynamischer Cache-Service aus.
- Konfigurieren Sie weitere Cacheeinstellungen. Weitere Informationen finden Sie im Artikel zu den Einstellungen
für den dynamischen Cache-Service.
- Klicken Sie auf Anwenden oder OK.
- Starten Sie WebSphere Application
Server erneut.
Mit dem folgenden Code können Sie Cacheinstanzen suchen:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/Instanz_eins");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/Instanz_zwei");
// oder
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Methode 2 - Servlet-Cache-Instanzen konfigurieren
Eine Servlet-Cache-Instanz ist eine Position, die zusätzlich zum Standard-Servlet-Cache
bereitgestellt wird und die der dynamische Cache zur Speicherung, Verteilung
und gemeinsamen Nutzung der Daten verwenden kann.
Die Verwendung von Servlet-Cache-Instanzen
gibt Ihren Anwendungen eine größere Flexibilität
und die Möglichkeit, die Cacheressourcen optimieren zu können.
Der für die Cacheinstanz angegebene JNDI-Name (Java™ Naming and Directory Interface) wird dem Namensattribut im Tag <cache instance> der Konfigurationsdatei cachespec.xml zugeordnet.
Fehler vermeiden: Servlet-Caches können nicht gesucht
werden. Versuche, einen Servlet-Cache zu suchen, schlagen fehl, und es wird null zurückgegeben.
gotcha
- Klicken Sie in der Administrationskonsole auf
Ressourcen > Cacheinstanzen > Servlet-Cache-Instanzen.
- Geben Sie den Geltungsbereich wie folgt ein:
- Geben Sie Zelle an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die für alle Server in der Zelle
verfügbar sind.
- Geben Sie Knoten an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die für alle Server
auf dem Knoten verfügbar sind.
- Geben Sie Server an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die nur für den bestimmten
Server verfügbar sind.
- Geben Sie den gewünschten Anzeigenamen für die Ressource im Feld "Name" ein.
- Geben Sie den JNDI-Namen für die Ressource an. Geben Sie diesen Namen im Attributfeld
des Tags <cache-instance> in der Konfigurationsdatei cachespec.xml an.
Dieses Tag wird verwendet, um die Cacheinstanz zu finden, in der Cacheeinträge gespeichert werden können.
- Konfigurieren Sie weitere Cacheeinstellungen. Weitere Informationen finden Sie im Artikel zu den Einstellungen
für den dynamischen Cache-Service.
- Klicken Sie auf Anwenden oder OK.
- Optional: Wenn Sie weitere angepasste Eigenschaften für diese Instanz konfigurieren möchten,
klicken Sie auf Ressourcen >
Cacheinstanzen > Servlet-Cache-Instanzen > Name_der_Servlet-Cache-Instanz >
Angepasste Eigenschaften > Neu .
- Optional: Geben Sie im Feld "Name" den Namen der angepassten Eigenschaft ein. Weitere Informationen finden Sie im Artikel zu den angepassten Eigenschaften
für den dynamischen Cache-Service.
Wichtig: Verwenden Sie die angepasste Eigenschaft
nur für den Geltungsbereich "Pro Cacheinstanz".
Geben Sie beispielsweise createCacheAtServerStartup im Feld "Name" ein.
- Geben Sie einen gültigen Wert für die Eigenschaft im Feld "Wert" ein.
- Speichern Sie die Eigenschaft, und starten Sie WebSphere Application Server erneut.
- Methode 3 - Objektcacheinstanz konfigurieren
Eine Objektcacheinstanz ist neben dem Standardobjektcache eine Position, an der der dynamische Cache Daten für (Java™ EE-Anwendungen speichern, verteilen und freigeben kann.
Cacheinstanzen geben Anwendungen mehr Flexibilität und Möglichkeiten für die Optimierung der Cacheressourcen.
Verwenden Sie die Programmierschnittstelle "DistributedObjectCache", um auf die Cacheinstanzen
zuzugreifen. Nähere Informationen zu API "DistributedObjectCache" finden Sie in der API-Dokumentation.
Achtung: Die Methode 3 stellt eine Erweiterung der am Anfang des Abschnitts "Vorgehensweise" beschriebenen Methoden 1 und 2
dar. Gehen Sie zunächst nach Methode 1 oder 2 vor.
Gehen Sie zum Erstellen
der Objektcacheinstanz wie folgt vor:
- Klicken Sie in der Administrationskonsole auf Ressourcen > Cacheinstanzen
> Objektcacheinstanzen.
- Geben Sie den Geltungsbereich ein:
- Geben Sie Zelle an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die für alle Server in der Zelle
verfügbar sind.
- Geben Sie Knoten an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die für alle Server
auf dem Knoten verfügbar sind.
- Geben Sie Server an, um die Cacheinstanzen anzuzeigen und zu konfigurieren, die nur für den bestimmten
Server verfügbar sind.
- Geben Sie den gewünschten Anzeigenamen für die Ressource im Feld "Name" ein.
- Geben Sie den JNDI-Namen für die Ressource an. Verwenden Sie diesen Namen, wenn Sie eine Referenz auf diese Cacheinstanz suchen.
Es wird ein DistributedMap-Objekt zurückgegeben.
- Konfigurieren Sie weitere Cacheeinstellungen. Weitere Informationen finden Sie im Artikel
zu den Einstellungen für den dynamischen Cache-Service.
- Klicken Sie auf Anwenden oder OK.
- Optional: Wenn Sie weitere angepasste Eigenschaften für diese Instanz konfigurieren möchten,
klicken Sie auf Ressourcen >
Cacheinstanzen > Objektcacheinstanzen > Name_der_Servlet-Cache-Instanz >
Angepasste Eigenschaften > Neu .
- Optional: Geben Sie im Feld "Name" den Namen der angepassten Eigenschaft ein.
Wichtig: Verwenden Sie die angepasste Eigenschaft
nur für den Geltungsbereich "Pro Cacheinstanz".
Geben Sie beispielsweise createCacheAtServerStartup im Feld "Name" ein.
- Geben Sie einen gültigen Wert für die Eigenschaft im Feld "Wert" ein.
- Speichern Sie die Eigenschaft, und starten Sie WebSphere Application Server erneut.
Wenn Sie in der Administrationskonsole zwei Objektcacheinstanzen mit den
JNDI-Namen
services/cache/Instanz_eins und services/cache/Instanz_zwei erstellt haben,
können Sie zum Suchen nach den Cacheinstanzen den folgenden Code verwenden:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/Instanz_eins");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/Instanz_zwei");
// oder
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Methode 4 - Cacheinstanzen über die Datei "cacheinstances.properties" konfigurieren
Sie können Cacheinstanzen über die Datei
"cacheinstances.properties" erstellen und in die EAR-Datei packen. Verwenden Sie die
im Artikel zur Datei "cacheinstances.properties" in der Tabelle angegebenen Informationen als Referenz für Namen, Werte und Erläuterungen.
Die erste Zeile definiert den Namen der Cacheinstanz.
Die nachfolgenden Zeilen definieren angepasste Eigenschaften. Das Format ist wie folgt:
cache.instance.x=Instanzname
cache.instance.x.Name_der_angepassten_Eigenschaft=Wert_der_angepassten_Eigenschaft
Für diese Angaben gilt Folgendes:
Im Folgenden sehen Sie ein Beispiel für die Erstellung
weitere Cacheinstanzen über die Datei "cacheinstances.properties":
cache.instance.0=/services/cache/instance_one
cache.instance.0.cacheSize=1000
cache.instance.0.enableDiskOffload=true
cache.instance.0.diskOffloadLocation=${app_server_root}/diskOffload
cache.instance.0.flushToDiskOnStop=true
cache.instance.0.useListenerContext=true
cache.instance.0.enableCacheReplication=false
cache.instance.0.disableDependencyId=false
cache.instance.0.htodCleanupFrequency=60
cache.instance.1=/services/cache/instance_two
cache.instance.1.cacheSize=1500
cache.instance.1.enableDiskOffload=false
cache.instance.1.flushToDiskOnStop=false
cache.instance.1.useListenerContext=false
cache.instance.1.enableCacheReplication=true
cache.instance.1.replicationDomain=DynaCacheCluster
cache.instance.1.disableDependencyId=true
Im vorherigen Beispiel werden
zwei Cacheinstanzen erstellt: instance_one und instance_two. Die Cacheinstanz "instance_one"
hat eine Cacheeintragsgröße von 1,000 und die Cacheinstanz "instance_two" eine Cacheeintragsgröße von 1,500. Die Auslagerung auf die Platte
ist für "instance_one" aktiviert, und für "instance_two" inaktiviert. Die Verwendung des Listenerkontextes
ist für "instance_one" aktiviert, und für "instance_two" inaktiviert. Das Löschen und Speichern auf Platte bei einem
Stopp ist für "instance_one" aktiviert und für "instance_two" inaktiviert. Die
Cachereplikation ist für "instance_two" aktiviert und für
"instance_one" inaktiviert.
Der Name der Datenreplikationsdomäne für "instance_two" ist "DynaCacheCluster".
Die Unterstützung der Abhängigkeits-IDs ist für "instance_two" inaktiviert.
Kopieren Sie die Datei
"cacheinstances.properties" in den Klassenpfad des Anwendungsservers oder der Anwendung.
Sie können beispielsweise die WAR-Datei Ihrer Anwendung, das Verzeichnis "WEB-INF\classes" oder das
Verzeichnis "Serverstammverzeichnis\classes" verwenden.
Der erste Eintrag in der Eigenschaftendatei
((cache.instance.0) gibt den JNDI-Namen für die Cacheinstanz im globalen Namespace an.
Mit dem folgenden Code
können Sie nach der Cacheinstanz suchen:
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
// oder
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Methode 5: Ressourcenreferenz
Wichtig: Diese Methode ist eine Erweiterung
der am Anfang des Abschnitts "Vorgehensweise" beschriebenen Methoden 3 und 4. Gehen Sie zunächst nach Methode 3 oder 4 vor.
Definieren Sie im
Implementierungsdeskriptor Ihres Moduls
(Dateien "web.xml" und "ibm-web-bnd.xmi") ein Element
"resource-ref", und suchen Sie mit dem Namespace "java:comp" nach dem Cache.Im folgenden
resource-ref-Beispiel wird die Datei "web.xml" verwendet:
<resource-ref id="ResourceRef_1">
<res-ref-name>dmap/LayoutCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_2">
<res-ref-name>dmap/UserCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Im folgenden
resource-ref-Beispiel wird die Datei "ibm-web-bnd.xmi" verwendet:
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:webappbnd="webappbnd.xmi"
xmlns:webapplication="webapplication.xmi" xmlns:commonbnd="commonbnd.xmi" xmlns:common="common.xmi"
xmi:id="WebApp_ID_Bnd" virtualHostName="default_host">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1"
jndiName="services/cache/instance_one">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>
</resRefBindings>
<resRefBindings xmi:id="ResourceRefBinding_2"
jndiName="services/cache/instance_two">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_2"/>
</resRefBindings>
</webappbnd:WebAppBinding>
Unterstützte Konfigurationen: Bei IBM® Erweiterungs- und Bindungsdateien weicht der Name
der XMI- oder XML-Datei ab, je nachdem, ob Sie eine Java EE-Anwendung bzw. ein Java EE-Modul vor oder nach Version 5 verwenden.
Eine IBM Erweiterungs- bzw. Bindungsdatei heißt "ibm-*-ext.xmi" bzw. "ibm-*-bnd.xmi". Das Platzhalterzeichen "*" steht für
den Typ der Erweiterungs- oder Bindungsdatei, z. B. "app", "application", "ejb-jar" oder "web". Es gelten die folgenden Bedingungen:
- Für eine Anwendung oder ein Modul, die bzw. das Java EE vor Version 5 verwendet,
muss die Dateierweiterung ".xmi" sein.
- Für eine Anwendung oder ein Modul, die bzw. das Java EE ab Version 5 verwendet,
muss die Dateierweiterung ".xml" sein. Wenn Dateien mit der Erweiterung ".xmi"
in der Anwendung oder im Modul enthalten sind, werden diese vom Produkt ignoriert.
Ein Modul von Java EE Version 5 oder einer höheren Version kann jedoch in einer Anwendung,
die Dateien einer älteren Java EE-Version als Version 5 enthält, koexistieren.
Die Dateien
ibm-webservices-ext.xmi,
ibm-webservices-bnd.xmi,
ibm-webservicesclient-bnd.xmi,
ibm-webservicesclient-ext.xmi und
ibm-portlet-ext.xmi können die Dateierweiterung ".xmi" weiterhin verwenden.
sptcfg
Das folgende Beispiel veranschaulicht die Suche nach
resource-ref:
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");// oder
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
In
diesem Beispiel ordnet resource-ref java:comp/env/dmap/LayoutCache der /services/cache/Instanz_eins und
java:comp/env/dmap/UserCache der /services/cache/Instanz_zwei zu. In
den Beispielen sind "DistributedMap dm1" und "dm1a" dasselbe Objekt. "DistributedMap
dm2" und "dm2a" sind dasselbe Objekt.
- Methode 6: Einstellungen des JVM-Caches.
Sie können die angepassten Eigenschaften global definieren, damit sie für alle Cacheinstanzen gelten.
Damit werden die Einstellungen in den Methoden 1, 2 und 3, aber nicht in der Methode
4 (cacheinstances.properties) überschrieben. Gehen Sie wie folgt vor, um die Cacheinstanz global zu konfigurieren:
- Klicken Sie in der Administrationskonsole auf
Server > Servertypen > WebSphere-Anwendungsserver > Servername >
Java- und Prozessverwaltung > Prozessdefinition > Java Virtual
Machine > Angepasste Eigenschaften > Neu.
- Geben Sie im Feld "Name" den Namen der angepassten Eigenschaft ein. Weitere Informationen finden Sie im Artikel zu den angepassten Eigenschaften
für den dynamischen Cache-Service.
Nachdem Sie den Namen der angepassten Eigenschaft gefunden haben, stellen Sie ihm das Präfix com.ibm.ws.cache.CacheConfig voran.
Lautet der Name der angepassten Eigenschaft beispielsweise
createCacheAtServerStartup, geben Sie com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup
im Feld "Name" ein.
- Geben Sie einen gültigen Wert für die Eigenschaft im Feld "Wert" ein.
- Speichern Sie die Eigenschaft, und starten Sie WebSphere Application Server erneut.