Mapas Dinâmicos

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.

Vantagens dos mapas dinâmicos

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.

Criando Mapas Dinâmicos

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.

Nota: Quando estiver definindo mapas de modelo, verifique se os nomes dos mapas são exclusivos o suficiente para que o aplicativo possa corresponder a apenas um dos mapas de modelo com o método Session.getMap(String mapName). Se o método getMap() corresponder a mais de um padrão de mapa de modelo, uma exceção IllegalArgumentException resultará.

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.

Exemplo

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.

Nota: Um modelo não é um BackingMap real. Isto é, o ObjectGrid “contabilidade” não contém um mapa “templateMap.*” real. O modelo é usado apenas como uma base para a criação de mapa dinâmico. Entretanto, você deve incluir o mapa dinâmico no elemento mapRef no arquivo XML da política de implementação nomeado exatamente como no XML do ObjectGrid. Este elemento identifica quais mapas dinâmicos são definidos e em quais mapSet.

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.

Exemplos Adicionais

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>

Limitações e Considerações

Limitações: Considerações: