Dynamische Maps

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.

Vorteile dynamischer Maps

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.

Dynamische Maps erstellen

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.

Anmerkung: Wenn Sie Schablonen-Maps definieren, müssen Sie sicherstellen, dass die Map-Namen so eindeutig sind, dass die Anwendung eine Map mit der Methode Session.getMap(String mapName) nur einer einzigen Schablonen-Map zuordnen kann. Wenn die Methode getMap() mehrere Schablonen-Map-Muster zuordnet, tritt eine Ausnahme des Typs IllegalArgumentException auf.

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.

Beispiel

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.

Anmerkung: Eine Schablone ist keine echte BackingMap, d. h. für dieses Beispiel, dass das ObjectGrid "accounting" keine echte Map "templateMap.*" enthält. Die Schablone wird nur als Basis für die Erstellung dynamischer Maps verwendet. Sie müssen die dynamische Map jedoch in das Element "mapRef" der XML-Deskriptordatei für Implementierungsrichtlinien einfügen, die denselben Namen erhält wie in der ObjectGrid-XML. Dieses Element identifiziert das MapSet, in dem die dynamischen Maps definiert werden.

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.

Weitere Beispiele

objectGrid.xml
<?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>
objectGridDeployment.xml
<?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>

Einschränkungen und Hinweise

Einschränkungen: Hinweise: