Com mapas dinâmicos, é possível criar mapas depois que grade de dados já tiver sido inicializada.
Nas versões anteriores, o WebSphere eXtreme Scale precisava que você definisse mapas antes de inicializar o ObjectGrid. Como resultado, você precisava criar todos os mapas a serem usados antes de executar transações em relação a qualquer um dos mapas.
A introdução de mapas dinâmicos reduz a necessidade de definir todos os mapas antes da inicialização. Por meio do uso de mapas modelos, os mapas podem agora ser criados após o ObjectGrid ter sido inicializado.
Mapas modelos são definidos no arquivo XML do ObjectGrid. As comparações de modelo são executadas quando uma Sessão requer um mapa que não foi previamente definido. Se o nome do novo mapa corresponder à expressão regular de um mapa modelo, o mapa é criado dinamicamente e recebe o nome do mapa solicitado. Este mapa recentemente criado herda todas as configurações do mapa modelo como definido pelo arquivo XML ObjectGrid.
A criação de mapa dinâmico está ligada ao método Session.getMap(String). Chamadas para este mapa retornam um ObjectMap baseado no BackingMap que foi configurado pelo arquivo XML ObjectGrid.
Passar uma Sequência que corresponde à expressão regular de um mapa modelo resulta na criação de um ObjectMap e em um BackingMap associado.
Consulte a documentação da API para obter mais informações sobre o método Session.getMap(String cacheName).
Definir uma mapa modelo em XML é tão simples quanto configurar um atributo booleano modelo no elemento backingMap. Quando o modelo é configurado para true, o nome do backingMap é interpretado como uma expressão regular.
O WebSphere eXtreme Scale usa a correspondência padrão de expressão regular Java. Para obter mais informações sobre o mecanismo de expressão regular em Java, consulte a documentação da API para o pacote e as classes java.util.regex.
Um arquivo XML do ObjectGrid XML de amostra com um mapa modelo definido está a seguir.
<?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>
O arquivo XML anterior define um mapa modelo em uma mapa não-modelo. O nome do mapa modelo é uma expressão regular: templateMap.*. Quando o método Session.getMap(String) é chamado com um nome de mapa correspondente a esta expressão regular, o aplicativo cria um mapa.
A configuração de um mapa modelo é necessária para criar um mapa dinâmico. Inclua um booleano modelo em um backingMap no arquivo XML do ObjectGrid.
<backingMap name="templateMap.*" template="true" />
O nome do mapa modelo é tratado como uma expressão regular.
Chamar o método Session.getMap(String cacheName) com um cacheName que seja uma correspondência para a expressão regular resulta na criação do mapa dinâmico. Um objeto ObjectMap é retornado a partir desta chamada de método e um objeto BackingMap associado é criado.
Session session = og.getSession();
ObjectMap map = session.getMap("templateMap1");
O mapa criado mais recentemente é configurado com todos os atributos e plug-ins que foram definidos na definição do mapa modelo. Considere novamente o arquivo XML do ObjectGrid anterior.
Um mapa dinâmico criado com base no mapa modelo neste arquivo XML teria um evictor configurado e sua estratégia de bloqueio seria pessimista.
Considere a mudança no comportamento do método Session.getMap(String cacheName) ao usar mapas modelos. Antes do WebSphere eXtreme Scale Versão 7.0, todas as chamadas ao método Session.getMap(String cacheName) resultavam em uma exceção UndefinedMapException se o mapa solicitado não existisse. Com mapas dinâmicos, cada nome que corresponde à expressão regular para um mapa modelo resulta na criação do mapa. Certifique-se de anotar o número de mapas que o seu aplicativo cria, particularmente se a sua expressão regular for genérica.
Também, ObjectGridPermission.DYNAMIC_MAP é necessário para a criação de mapa dinâmico quando a segurança doeXtreme Scale está ativada. Esta permissão é verificada quando o método Session.getMap(String) é chamado. Para obter mais informações, consulte o Autorização do Aplicativo Cliente.
<?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>