Configuring dynamic maps

You can dynamically create maps that are based on a set of map templates. You can create your own map templates.

About this task

WebSphere® eXtreme Scale uses Java regular expression pattern matching. For more information about the regular expression engine in Java™, see the API documentation for the java.util.regex package and classes.

Limitations:

  • The QuerySchema element does not support the template for mapName.
  • You cannot use entities with dynamic maps.
  • An entity BackingMap is implicitly defined, mapped to the entity through the class name.
Considerations:
  • Many plug-ins have no way of determining the map with which each plug-in is associated.
  • Other plug-ins differentiate themselves by using a map name or BackingMap name as an argument.

Procedure

Define a template map in your ObjectGrid XML file.
To define a template map in the ObjectGrid XML file, set the template attribute on the backingMap element to true. As a result, the name of the backingMap is interpreted as a regular expression.
Attention: When you are defining template maps, verify that the map names are unique enough so that the application can match to only one of the template maps with the Session.getMap(String mapName) method. If the getMap() method matches more than one template map pattern, an IllegalArgumentException exception results. With dynamic maps, every name that matches the regular expression for a template map results in map creation. Be sure to note the number of maps that your application creates, particularly if your regular expression is generic.
An example of an ObjectGrid XML file with a template map defined follows. This XML file defines one template map and one non-template map. The name of the template map is the following regular expression: templateMap.*. When the Session.getMap(String) method is called with a map name that matches this regular expression, the application creates a map.
<?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>
Note: A template is not an actual BackingMap. That is, the "accounting" ObjectGrid does not contain an actual “templateMap.*” map. The template is only used as a basis for dynamic map creation. However, you must include the dynamic map in the mapRef element of the deployment policy XML file that is named exactly as in the ObjectGrid XML. This element identifies which mapSet in which the dynamic maps are defined.

Example

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>

What to do next

Create a dynamic map with your defined templates:
Note: The ObjectGridPermission.DYNAMIC_MAP is required for dynamic map creation when eXtreme Scale security is enabled. This permission is checked when the Session.getMap(String) method is called. For more information, see Authorizing application clients.