Con las correlaciones dinámicas, puede crear correlaciones una vez que la cuadrícula de datos ya se haya in icializado.
En versiones anteriores, para WebSphere eXtreme Scale es necesario que defina correlaciones antes de inicializar ObjectGrid. Como resultado, ha tenido que crear todas las correlaciones que se utilizarán antes de ejecutar transacciones respecto a cualquier de las correlaciones.
La introducción de correlaciones dinámicas reduce la restricción de tener que definir todas las cuadrículas antes de la inicialización. Mediante la utilización de correlaciones de plantilla, puede crear correlaciones una vez que se haya inicializado el ObjectGrid.
Las correlaciones de plantilla se definen en el archivo XML ObjectGrid. Las comparaciones de plantilla se ejecutan cuando una Sesión solicita una correlación que no se ha definido previamente. Si el nuevo nombre de correlación coincide con la expresión regular de una correlación de plantilla, la correlación se crea dinámicamente y se le asigna el nombre de la correlación solicitada. Esta correlación creada recientemente hereda todos los valores de la correlación de plantilla tal como los ha definido el archivo XML de ObjectGrid.
La creación de correlaciones dinámicas está vinculada al método Session.getMap(String). Las llamadas a este método devuelven un ObjectMap basado en la BackingMap que configuró el archivo XML de ObjectGrid.
Si se pasa una serie que coincide con la expresión regular de una correlación de plantilla produce la creación de una ObjectMap y una BackingMap asociada.
Consulte la documentación de la API si desea más información sobre el método Session.getMap(String cacheName).
La definición de una correlación de plantilla en XML es tan simple como establecer un atributo booleano de plantilla en el elemento backingMap. Cuando la plantilla está establecida en true, el nombre de backingMap se interpreta como una expresión regular.
WebSphere eXtreme Scale utiliza la coincidencia de patrón de la expresión regular de Java. Si desea más información sobre el motor de expresiones regulares en Java, consulte la documentación de la API para ver el paquete y las clases java.util.regex.
A continuación, aparece un archivo XML de ObjectGrid de ejemplo con una correlación de plantilla definida.
<?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>
El archivo XML anterior define una correlación de plantilla y una correlación sin plantilla. El nombre de la correlación de plantilla es una expresión regular: templateMap.*. Cuando se llama al método Session.getMap(String) con un nombre de correlación que coincide con esta expresión regular, la aplicación crea una correlación.
La configuración de una correlación de plantilla es necesaria para poder crear una correlación dinámica. Añada la plantilla booleana a una backingMap en el objeto XML de ObjectGrid.
<backingMap name="templateMap.*" template="true" />
El nombre de la correlación de plantilla se trata como una expresión regular.
Llamar al método Session.getMap(String cacheName) con un cacheName que es una coincidencia para la expresión regular genera la creación de la correlación dinámica. Se devuelve un objeto ObjectMap de la llamada de este método y se crea un objeto BackingMap asociado.
Session session = og.getSession();
ObjectMap map = session.getMap("templateMap1");
La correlación creada recientemente se configura con todos los atributos y plug-ins que se definieron en la definición de la correlación de plantilla. Vuelva a considerar el archivo XML de ObjectGrid anterior.
Una correlación dinámica creada basándose en la correlación de plantilla de este archivo XML tendría un desalojador configurado y su estrategia de bloqueo sería pesimista.
Tenga en cuenta el cambio en comportamiento del método Session.getMap(String cacheName) al utilizar correlaciones de plantilla. Antes de WebSphere eXtreme Scale versión 7.0, todas las llamadas al método Session.getMap(String cacheName) generaron una excepción UndefinedMapException, si no existía la correlación solicitada. Con las correlaciones dinámicas, todos los nombres que coinciden con la expresión regular para una correlación de plantilla generan una creación de correlación. Asegúrese de anotar el número de correlaciones que crea la aplicación, sobre todo, si la expresión regular es genérica.
Además, ObjectGridPermission.DYNAMIC_MAP es necesario para la creación de correlaciones dinámicas cuando la seguridad de eXtreme Scale está habilitada. Este permiso se comprueba cuando se llama al método Session.getMap(String). Para obtener más información, consulte Autorización de cliente de aplicaciones.
<?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>