Mit dynamischen Maps können Sie Maps erstellen, nachdem das Datengrid bereits initialisiert wurde.
In früheren Versionen von WebSphere eXtreme Scale mussten Sie Maps vor der Initialisierung des ObjectGrids definieren. Deshalb mussten Sie alle zu verwendenden Maps erstellen, bevor Sie Transaktionen für die Maps ausgeführt haben.
Die Einführung dynamischer Maps lockert die Einschränkung, dass alle Maps vor der Initialisierung des Grids erstellt werden müssen. Durch die Verwendung von Schablonen-Maps haben Sie die Möglichkeit, Maps nach der Initialisierung des ObjectGrids zu erstellen.
Schablonen-Maps werden in der ObjectGrid-XML-Datei definiert. Es werden Schablonenvergleiche durchgeführt, wenn ein Session-Objekt eine Map anfordert, die noch nicht definiert wurde. Wenn der neue Map-Name dem regulären Ausdruck einer Schablonen-Map entspricht, wird die Map dynamisch mit dem Namen der angeforderten Map erstellt. Diese neu erstellte Map übernimmt alle Einstellungen der Schablonen-Map, die in der ObjectGrid-XML-Datei definiert sind.
Die Erstellung dynamischer Maps ist an die Methode "Session.getMap(String)" gebunden. Beim Aufruf dieser Methode wird eine ObjectMap zurückgegeben, die auf der BackingMap basiert, die in der ObjectGrid-XML-Datei konfiguriert wurde.
Die Übergabe einer Zeichenfolge, die dem regulären Ausdruck einer Schablonen-Map entspricht, führt zur Erstellung einer ObjectMap und einer zugehörigen BackingMap.
Weitere Informationen zur Methode "Session.getMap(String cacheName)" finden Sie in der API-Dokumentation.
Zur Definition einer Schablonen-Map in XML muss einfach ein boolesches Attribut "template" im Element "backingMap" festgelegt werden. Wenn Sie "template" auf "true" setzen, wird der Name der BackingMap als regulärer Ausdruck interpretiert.
WebSphere eXtreme Scale verwendet die Mustererkennung für reguläre Java-Ausdrücke. Weitere Informationen zur Steuerkomponente für reguläre Ausdrücke in Java finden Sie in der API-Dokumentation zu dem Paket "java.util.regex" und den zugehörigen Klassen.
Im Folgenden finden Sie eine ObjectGrid-XML-Beispieldatei mit einer Schablonen-Map-Definition:
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="accounting">
<backingMap name="payroll" readOnly="false" />
<backingMap name="templateMap.*" template="true"
pluginCollectionRef="templatePlugins" lockStrategy="PESSIMISTIC" />
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="templatePlugins">
<bean id="Evictor"
className="com.ibm.websphere.objectgrid.plugins.builtins.LFUEvictor" />
</backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>
In der vorherigen XML-Datei werden eine Schablonen-Map und eine Map definiert, die keine Schablone ist. Der Name der Schablonen-Map ist ein regulärer Ausdruck: templateMap.*. Wenn die Methode Session.getMap(String) mit einem Map-Namen aufgerufen wird, der diesem regulären Ausdruck entspricht, erstellt die Anwendung eine Map.
Die Konfiguration einer Schablonen-Map ist die Voraussetzung für die Erstellung einer dynamischen Map. Fügen Sie das boolesche Attribut "template" einem Element "backingMap" in der ObjectGrid-XML-Datei hinzu.
<backingMap name="templateMap.*" template="true" />
Der Name der Schablonen-Map wird als regulärer Ausdruck behandelt.
Der Aufruf der Methode "Session.getMap(String cacheName)" mit einem cacheName-Wert, der diesem regulären Ausdruck entspricht, führt zur Erstellung der dynamischen Map. Der Methodenaufruf gibt ein ObjectMap-Objekt zurück, und das zugehörige BackingMap-Objekt wird erstellt.
Session session = og.getSession();
ObjectMap map = session.getMap("templateMap1");
Die neu erstellte Map ist mit allen Attributen und Plug-ins konfiguriert, die in der Definition der Schablonen-Map festgelegt wurden. Verwenden Sie wieder die vorherige ObjectGrid-XML-Datei.
Für eine auf der Basis der Schablonen-Map in dieser XML-Datei erstellte dynamische Map wird ein Evictor (Bereinigungsprogramm) und die pessimistische Sperrstrategie konfiguriert.
Berücksichtigen Sie das geänderte Verhalten der Methode Session.getMap(String cacheName), wenn Schablonen-Maps verwendet werden. Vor WebSphere eXtreme Scale Version 7.0 wird bei allen Aufrufen der Methode Session.getMap(String cacheName) eine Ausnahme vom Typ UndefinedMapException ausgelöst, wenn die angeforderte Map nicht vorhanden ist. Mit dynamischen Maps wird für jeden Namen, der dem regulären Ausdruck für eine Schablonen-Map entspricht, eine Map erstellt. Notieren Sie sich die Anzahl der Maps, die Ihre Anwendung erstellt, insbesondere, wenn der verwendete reguläre Ausdruck generisch ist.
Außerdem ist ObjectGridPermission.DYNAMIC_MAP für die Erstellung dynamischer Maps erforderlich, wenn die Sicherheit von eXtreme Scale aktiviert ist. Diese Berechtigung wird geprüft, wenn die Methode Session.getMap(String) aufgerufen wird. Weitere Einzelheiten finden Sie in Anwendungsclientberechtigung.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="session">
<backingMap name="objectgrid.session.metadata.dynamicmap.*" template="true"
lockStrategy="PESSIMISTIC" ttlEvictorType="LAST_ACCESS_TIME">
<backingMap name="objectgrid.session.attribute.dynamicmap.*"
template="true" lockStrategy="OPTIMISTIC"/>
<backingMap name="datagrid.session.global.ids.dynamicmap.*"
lockStrategy="PESSIMISTIC"/>
</objectGrid>
</objectGrids>
</objectGridConfig>
<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
../deploymentPolicy.xsd"
xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="session">
<mapSet name="mapSet2" numberOfPartitions="5" minSyncReplicas="0"
maxSyncReplicas="0" maxAsyncReplicas="1" developmentMode="false"
placementStrategy="PER_CONTAINER">
<map ref="logical.name"/>
<map ref="objectgrid.session.metadata.dynamicmap.*"/>
<map ref="objectgrid.session.attribute.dynamicmap.*"/>
<map ref="datagrid.session.global.ids"/>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>