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
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.
- 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
- With Java APIs: See Creating dynamic maps with Java APIs for an example of calling the Session.getMap(String) method to define your dynamic map.
- With .NET APIs: See Creating dynamic maps with .NET APIs for more information.
- With the REST gateway: See REST gateway example: Creating dynamic maps for more information.
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.