Arquivo XML descritor do ObjectGrid

Para configurar o WebSphere eXtreme Scale, utilize um arquivo XML descritor do ObjectGrid e a API do ObjectGrid.

Nas seções a seguir, os arquivos XML de amostra são fornecidos para ilustrar diversas configurações. Cada elemento e atributo do arquivo XML está definido. Use o esquema de descritor XML do ObjectGrid para criar o arquivo descritor XML. Consulte o Arquivo objectGrid.xsd para obter um exemplo do esquema XML do descritor do ObjectGrid.

Uma versão modificada do arquivo companyGrid.xml original é utilizada. O arquivo companyGridSingleMap.xml a seguir é como o arquivo companyGrid.xml. O arquivo companyGridSingleMap.xml tem um mapa e o arquivo companyGrid.xml tem quatro mapas. Os elementos e os atributos do arquivo são descritos em detalhes no exemplo 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="CompanyGrid">
						<backingMap name="Customer"/>
				</objectGrid>
		</objectGrids>
</objectGridConfig>

Elemento objectGridConfig

O elemento objectGridConfig é o elemento de nível superior do arquivo XML. Grave este elemento em seu documento XML do eXtreme Scale, conforme mostrado no exemplo anterior. Este elemento configura o espaço de nomes do arquivo e o local do esquema. O esquema está definido no arquivo objectGrid.xsd.

Elemento objectGrids

O elemento objectGrids é um contêiner para todos os elementos objectGrid. No arquivo companyGridSingleMap.xml, o elemento objectGrids contém um objectGrid, o CompanyGrid objectGrid.

Elemento objectGrid

Utilize o elemento objectGrid para definir um ObjectGrid. Cada um dos atributos no elemento objectGrid corresponde a um método na interface ObjectGrid.
Atributos
name
Especifica o nome que é designado ao ObjectGrid. A validação de XML falhará se esse atributo estiver faltando. (Obrigatório)
securityEnabled
Ativa a segurança no nível do ObjectGrid, o que possibilita as autorizações de acesso aos dados no mapa, quando você configura o atributo como true. O padrão é true. (Opcional)
authorizationMechanism
Configura o mecanismo de autorização para o elemento. É possível configurar o atributo com um dos dois valores: AUTHORIZATION_MECHANISM_JAAS ou AUTHORIZATION_MECHANISM_CUSTOM. O padrão é AUTHORIZATION_MECHANISM_JAAS. É necessário configurar o atributo securityEnabled como true para que o atributo authorizationMechanism entre em vigor. (Opcional)
permissionCheckPeriod
Especifica um valor de número inteiro em segundos que indica com que frequência verificar a permissão que é utilizada para permitir um acesso do cliente. O padrão é 0. Ao configurar o valor de atributo 0, cada chamada de método get, put, update, remove ou evict solicita que o mecanismo de autorização, seja a autorização Java Authentication and Authorization Service (JAAS) ou a autorização customizada, verifique se o usuário atual possui permissão. Um valor maior do que 0 indica o número de segundos para armazenar em cache um conjunto de permissões antes de retornar ao mecanismo de autorização para atualizar. É necessário configurar o atributo securityEnabled como true para o atributo permissionCheckPeriod tomar efeito. (Opcional)
txTimeout
Especifica a quantidade de tempo em segundos permitida para que uma transação seja concluída. Se uma transação não for concluída nesse período de tempo, ela será marcada para rollback, resultando em uma exceção TransactionTimeoutException. Se você configurar o valor para 0, a configuração padrão de 10 minutos será usada como o tempo limite da transação. (Opcional)
entityMetadataXMLFile
Especifica o caminho para o arquivo XML descritor da entidade que define o esquema de entidade. Defina as entidades antes de iniciar o servidor de catálogo de forma que cada entidade possa vincular-se a um mapa de apoio.
  • Para um relatório relativo: Especifique o local relativo com o local do arquivo objectgrid.xml.
  • Para um caminho absoluto: Especifique o local com um formato de URL, como file:// ou http://.
(Opcional)
<objectGrid
(1)			name="objectGridName"
(2)			securityEnabled="true" | "false"
(3)			authorizationMechanism="AUTHORIZATION_MECHANISM_JASS" | "AUTHORIZATION_MECHANISM_CUSTOM"
(4) 			permissionCheckPeriod="permission_check_period"
(5)			txTimeout="seconds"
(6)			entityMetadataXMLFile="URL"
/>
No exemplo a seguir, o arquivo companyGridObjectGridAttr.xml demonstra uma maneira de configurar os atributos de um elemento objectGrid. A segurança é ativada, o mecanismo de autorização é configurado como JAAS e o período de verificação da permissão é configurado para 45 segundos. O arquivo também registra entidades especificando um atributo entityMetadataXMLFile.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlnc: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="CompanyGrid" securityEnabled="true"
			authorizationMechanism="AUTHORIZATION_MECHANISM_JASS"
			permissionCheckPeriod="45"
			entityMetadataXMLFile="companyGridEntities.xml">
			<backingMap name="Customer"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração que o arquivo companyGridObjectGridAttr.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

companyGrid.setSecurityEnabled();
companyGrid.setAuthorizationMechanism(SecurityConstants.AUTHORIZATION_MECHANISM_JAAS);
companyGrid.setPermissionCheckPeriod(45);
companyGrid.registerEntities(new URL("file:companyGridEntities.xml"));

Elemento backingMap

O elemento backingMap é utilizado para definir uma instância BackingMap em um ObjectGrid. Cada um dos atributos no elemento backingMap corresponde a um método na interface BackingMap. Para obter detalhes, consulte o Interface BackingMap.
Atributos
name
Especifica o nome que é designado à instância do backingMap. Se este atributo estiver ausente, a validação de XML falhará. (Obrigatório)
readOnly
Configura uma instância do BackingMap como leitura-gravação quando o atributo for especificado como false. Quando você especifica o atributo como true, a instância do BackingMap é somente leitura. (Opcional)
template
Especifica se os mapas dinâmicos podem ser usados. Configure esse valor para true se o mapa BackingMap for um mapa de modelo. Os mapas de modelo podem ser utilizados para criar dinamicamente os mapas após ObjectGrid ser iniciado. As chamadas de Session.getMap(String) resultarão na criação de mapas dinâmicos se o nome transmitido para o método corresponder à expressão regular especificada no atributo de nome desse backingMap. O valor padrão é false. (Opcional)
pluginCollectionRef
Especifica uma referência para um plug-in do backingMapPluginCollection. O valor desse atributo deve corresponder ao atributo ID de um plug-in backingMapCollection. A validação falhará se não existir nenhum ID correspondente. Configure o atributo para reutilizar plug-ins do BackingMap. (Opcional)
numberOfBuckets
Especifica o número de depósitos para a instância do BackingMap utilizar. A instância do BackingMap utiliza um mapa hash para implementação. Se existirem muitas entradas no BackingMap, mais depósitos resultarão em melhor desempenho, porque o risco de colisões é menor à medida que o número de depósitos aumenta. Mais depósitos também resultam em maior simultaneidade. Especifique um valor de 0 para desativar o cache local em um cliente ao comunicar-se remotamente com o eXtreme Scale. Ao configurar o valor como 0 para um cliente, configure o valor apenas no arquivo descritor XML do ObjectGrid da substituição do cliente. (Opcional)
preloadMode
Configura o modo preload se um plug-in do utilitário de carga for configurado para esta instância do BackingMap. O valor padrão é false. Se o atributo estiver configurado como true, o método Loader.preloadMap(Session, BackingMap) será chamado de maneira assíncrona. Caso contrário, a execução do método é bloqueada ao carregar dados de forma que o cache fique indisponível até que o pré-carregamento seja concluído. O pré-carregamento ocorre durante a inicialização. (Opcional)
lockStrategy
Especifica se o gerenciador de bloqueio interno é utilizado sempre que uma entrada de mapa é acessada por uma transação. Configure esse atributo com um dos três valores: OPTIMISTIC, PESSIMISTIC ou NONE. O valor padrão é OPTIMISTIC. (Opcional)

A estratégia de bloqueio otimista é normalmente utilizada quando um mapa que não possui um plug-in do utilitário de carga for mais lido do que gravado ou atualizado e quando o bloqueio não for fornecido pelo gerenciador de persistência usando o eXtreme Scale como um cache secundário ou pelo aplicativo. Um bloqueio exclusivo é obtido em uma entrada do mapa que é inserido, atualizado ou removido no momento do commit. O bloqueio assegura que as informações de versão não poderão ser alteradas por outra transação enquanto a transação que está sendo confirmada estiver executando uma verificação de versão otimista.

A estratégia de bloqueio pessimista é normalmente utilizada para um mapa que não possui um plug-in do utilitário de carga, e o bloqueio não é fornecido pelo gerenciador de persistência utilizando o eXtreme Scale como um cache secundário ou pelo aplicativo. A estratégia de bloqueio pessimista é utilizada quando a estratégia de bloqueio otimista falha com muita frequência porque as transações de atualização frequentemente colidem na mesma entrada do mapa.

A estratégia de ausência de bloqueio indica que o LockManager interno não é necessário. O controle de simultaneidade é fornecido fora do 3eXtreme Scale, seja pelo gerenciador de persistência usando o eXtreme Scale como um cache ou aplicativo secundário ou pelo plug-in do utilitário de carga que usa os bloqueios do banco de dados para controlar a simultaneidade.

Para obter mais informações, consulte Gerenciador de Bloqueio.

numberOfLockBuckets
Configura o número de depósitos de bloquei que são utilizados pelo gerenciador de bloqueios para a instância do BackingMap. Configure o atributo lockStrategy como OPTIMISTIC ou PESSIMISTIC para criar um gerenciador de bloqueios para a instância do BackingMap. O gerenciador de bloqueios utiliza um mapa hash para controlar entradas bloqueadas por uma ou mais transações. Se existirem muitas entradas, mais depósitos resultarão em melhor desempenho, porque o risco de colisões é menor à medida que o número de depósitos aumenta. Mais depósitos de bloqueios também resultam em maior simultaneidade. Configure o atributo lockStrategy como NONE para especificar que a instância do BackingMap não utilize nenhum gerenciador de bloqueios. (Opcional)
lockTimeout
Configura o tempo limite do bloqueio que é utilizado pelo gerenciador de bloqueios para a instância do BackingMap. Configure o atributo lockStrategy como OPTIMISTIC ou PESSIMISTIC para criar um gerenciador de bloqueios para a instância do BackingMap. Para evitar a ocorrência de conflitos, o gerenciador de bloqueios possui um valor de tempo limite de 15 segundos. Se o tempo limite for excedido, ocorre uma exceção LockTimeoutException. O valor padrão de 15 segundos é suficiente para a maioria dos aplicativos, mas em um sistema com grande extremamente carregado, um tempo limite pode ocorrer quando não existir nenhum conflito. Utilize o atributo lockTimeout para aumentar o valor do padrão para evitar a ocorrência de falsas exceções de tempo limite. Configure o atributo lockStrategy como NONE para especificar que a instância do BackingMap não utilize nenhum gerenciador de bloqueios. (Opcional)
CopyMode
Especifica se uma operação get de uma entrada na instância BackingMap retorna o valor real, uma cópia do valor ou um proxy para o valor. Configure o atributo CopyMode para um dos cinco valores:
COPY_ON_READ_AND_COMMIT
O valor padrão é COPY_ON_READ_AND_COMMIT. Configure o valor como COPY_ON_READ_AND_COMMIT para garantir que um aplicativo nunca faça uma referência ao objeto de valor que está na instância BackingMap. Em vez disso, o aplicativo trabalha sempre com uma cópia do valor que está na instância de BackingMap. (Opcional)
COPY_ON_READ
Configure o valor como COPY_ON_READ para melhorar o desempenho sobre o valor COPY_ON_READ_AND_COMMIT eliminando a cópia que ocorre quando uma transação é confirmada. Para preservar a integridade dos dados do BackingMap, o aplicativo é confirmado para excluir cada referência para uma entrada após a transação ser confirmada. A configuração deste valor resulta em um método ObjectMap.get retornando uma cópia do valor ao invés de uma referência ao valor, o que garante que as alterações que são feitas pelo aplicativo no valor não afetem o elemento BackingMap até que a transação seja confirmada.
COPY_ON_WRITE
Configure o valor como COPY_ON_WRITE para melhorar o desempenho sobre o valor COPY_ON_READ_AND_COMMIT eliminando a cópia que ocorre quando o método ObjectMap.get é chamado pela primeira vez por uma transação para uma determinada chave. Em vez disso, o método ObjectMap.get retorna um proxy para o valor em vez de uma referência direta ao objeto de valor. O proxy assegura que não seja feita uma cópia do valor, a menos que o aplicativo chame um método set na interface do valor.
NO_COPY
Configure o valor como NO_COPY para permitir que um aplicativo nunca modifique um objeto de valor que é obtido utilizando um método ObjectMap.get na troca de aprimoramentos de desempenho. Configure o valor como NO_COPY para mapas associados com as entidades da API do EntityManager.
COPY_TO_BYTES
Configure o valor para COPY_TO_BYTES para melhorar a área de cobertura da memória para tipos complexos do Object e para melhorar o desempenho quando a cópia de um Object depender da serialização para ser feita. Se um Object não for Clonável ou um ObjectTransformer com um método copyValue eficiente não for fornecido, o mecanismo de cópia padrão deverá serializar e aumentar o objeto para fazer uma cópia. Com a configuração COPY_TO_BYTES, o aumento é executado apenas durante a leitura e a serialização é executada apenas durante a confirmação.
Para obter mais informações sobre essas configurações, consulte o Ajustando o Modo de Cópia.
valueInterfaceClassName
Especifica uma classe que é necessária ao configurar o atributo CopyMode como COPY_ON_WRITE. Esse atributo é ignorado para todos os outros modos. O valor COPY_ON_WRITE utiliza um proxy quando são feitas chamadas do método ObjectMap.get. O proxy assegura que não seja feita uma cópia do valor, a menos que o aplicativo chame um método set na classe especificada como o atributo valueInterfaceClassName. (Opcional)
copyKey
Especifica se uma cópia da chave é necessária quando uma entrada de mapa é criada. A cópia do objeto de chave permite que o aplicativo utilize o mesmo objeto de chave para cada operação de ObjectMap. Configure o valor como true para copiar o objeto de chave quando uma entrada de mapa é criada. O valor padrão é false. (Opcional)
nullValuesSupported
Configure o valor como true para suportar valores nulos no ObjectMap. Quando valores nulos são suportados, uma operação get que retorna null pode significar que o valor é nulo ou que o mapa não contém a chave que é passada para o método. O valor-padrão é true. (Opcional)
ttlEvictorType
Especifica como o prazo de expiração de uma entrada do BackingMap é computado. Configure este atributo para um desses valores: CREATION_TIME, LAST_ACCESS_TIME, LAST_UPDATE_TIME ou NONE. O valor CREATION_TIME indica que um prazo de expiração de entrada é a soma do hora da criação da entrada mais o valor de atributo timeToLive. O valor LAST_ACCESS_TIME indica que um prazo de expiração de entrada é a soma do horário do último acesso da entrada (se a entrada foi atualizada ou simplesmente lida) mais o valor do atributo timeToLive. O valor LAST_UPDATE_TIME indica que um prazo de expiração de entrada é a soma do horário da última atualização da entrada mais o valor do atributo timeToLive. O valor NONE, que é o padrão, indica que uma entrada não possui prazo de expiração e está presente na instância do BackingMap até que o aplicativo explicitamente remova ou invalide a entrada. (Opcional)
timeToLive
Especifica, em segundos, quanto tempo cada entrada do mapa fica presente. O valor padrão de 0 significa que a entrada do mapa está presente para sempre, ou até que o aplicativo explicitamente remova ou invalide a entrada. Caso contrário, o evictor TTL despeja a entrada de mapa com base nesse valor. (Opcional)
viewRef
Especifica que o backingMap é um mapa de visualização. (Opcional)
writeBehind
Especifica que o suporte write-behind está ativado com parâmetros write-behind (Opcional). Os parâmetros write-behind consistem em uma duração da atualização máxima e uma contagem de atualização de chaves. O formato do parâmetro write-behind é "[T(time)][;][C(count)]". O banco de dados é atualizado quando um dos seguintes eventos ocorre:
  • A duração da atualização máxima, especificada em segundos, passou desde a última atualização.
  • O número de atualizações disponíveis no mapa de fila alcançou a contagem de atualização máxima.

Para obter informações adicionais, consulte Armazenamento em Cache Write-behind.

O suporte Write-behind é uma extensão do plug-in do Carregador, que você usa para integrar o eXtreme Scale ao banco de dados. Por exemplo, consulte as informações do Configurando Utilitários de Carga do JPA sobre como configurar um carregador JPA.

evictionTriggers
Configura os tipos de acionadores de despejo adicionais a utilizar. Todos os evictors para o mapa de apoio utilizam esta lista de acionadores adicionais. Para evitar uma IllegalStateException, esse atributo deve ser chamado antes do método ObjectGrid.initialize(). Além disso, observe que o método ObjectGrid.getSession() chama implicitamente o método ObjectGrid.initialize() se o método já foi chamado pelo aplicativo. As entradas na lista de acionadores são separadas por ponto-e-vírgulas. Os Current Eviction Triggers incluem MEMORY_USAGE_THRESHOLD. (Opcional)
<backingMap
(1)			name="objectGridName"
(2)			readOnly="true" | "false"
(3)      template="true" | "false"
(4)			pluginCollectionRef="reference to backingMapPluginCollection"
(5)			numberOfBuckets="number of buckets"
(6)			preloadMode="true" | "false"
(7)			lockStrategy="OPTIMISTIC" | "PESSIMISTIC" | "NONE"
(8)			numberOfLockBuckets="number of lock buckets"
(9)			lockTimeout="lock timeout"
(10)			copyMode="COPY_ON_READ_AND_COMMIT" | "COPY_ON_READ" | "COPY_ON_WRITE"
							| "NO_COPY" | "COPY_TO_BYTES"
(11)			valueInterfaceClassName="value interface class name"
(12)			copyKey="true" | "false"
(13)			nullValuesSupported="true" | "false"
(14)			ttlEvictorType="CREATION_TIME" | "LAST_ACCESS_TIME" | "LAST_UPDATE_TIME" | NONE"
(15)			timeToLive="time to live"
(16)			streamRef="reference to a stream"
(17)			viewRef="reference to a view"
(18)			writeBehind="write-behind parameters"
(19)			evictionTriggers="MEMORY_USAGE_THRESHOLD"
/>		
No exemplo a seguir, o arquivo companyGridBackingMapAttr.xml é utilizado para demonstrar uma configuração do backingMap de amostra.
<?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="CompanyGrid">
			 <backingMap name="Customer" readOnly="true"
					numberOfBuckets="641" preloadMode="false"
					lockStrategy="OPTIMISTIC" numberOfLockBuckets="409"
					lockTimeout="30" copyMode="COPY_ON_WRITE"
					valueInterfaceClassName="com.ibm.websphere.samples.objectgrid.CounterValueInterface"
					copyKey="true" nullValuesSupported="false"
					ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3000"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
O código de amostra a seguir demonstra a abordagem programática para a obtenção da mesma configuração que o arquivo companyGridBackingMapAttr.xml no exemplo anterior:
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");
customerMap.setReadOnly(true);
customerMap.setNumberOfBuckets(641);
customerMap.setPreloadMode(false);
customerMap.setLockStrategy(LockStrategy.OPTIMISTIC);
customerMap.setNumberOfLockBuckets(409);
customerMap.setLockTimeout(30);

// ao configurar o modo de cópia como COPY_ON_WRITE, é requerida uma classe valueInterface
customerMap.setCopyMode(CopyMode.COPY_ON_WRITE, 
	com.ibm.websphere.samples.objectgrid.CounterValueInterface.class);
customerMap.setCopyKey(true);
customerMap.setNullValuesSupported(false);
customerMap.setTtlEvictorType(TTLType.LAST_ACCESS_TIME);
customerMap.setTimeToLive(3000); // set time to live to 50 minutes

Elemento bean

Utilize o elemento bean para definir plug-ins. É possível conectar plug-ins aos elementos objectGrid e BackingMap.
Atributos
id
Especifica o tipo de plug-in a criar. (Obrigatório)
Os plug-ins para um bean que é um elemento-filho do elemento objectGrid são incluídos na lista a seguir:
  • Plug-in TransactionCallback
  • Plug-in ObjectGridEventListener
  • Plug-in SubjectSource
  • Plug-in SubjectValidation
Os plug-ins válidos para um bean que é um elemento-filho do elemento backingMapPluginCollection são incluídos na lista a seguir:
  • Plug-in do Utilitário de Carga
  • Plug-in ObjectTransformer
  • Plug-in OptimisticCallback
  • Plug-in Evictor
  • Plug-in MapEventListener
  • Plug-in MapIndex
className
Especifica o nome da classe ou o Spring bean para instanciar para criar o plug-in. A classe deve implementar a interface do tipo de plug-in. Por exemplo, se você especificar ObjectGridEventListener como o valor para o atributo do id, o valor de atributo className deverá referir-se a uma classe que implementa a interface ObjectGridEventListener. O className ou osgiService é necessário.
osgiService
Especifica o nome do serviço OSGi a ser consultado no gerenciador de serviços OSGi. Ao executar na estrutura do Eclipse Equinox OSGi com o contêiner Eclipse Gemini ou Apache Aries Blueprint, os plug-ins podem ser definidos com o uso de um arquivo XML OSGi Blueprint. As outras propriedades do bean geralmente não são usadas ao usar um nome osgiService, pois as propriedades do bean são configuradas no arquivo de configuração Blueprint. Consulte o Configurando Plug-ins Ativados pelo OSGi Usando o Arquivo Descritor XML do ObjectGrid para obter informações adicionais. O className ou osgiService é necessário.
<bean
(1)			id="TransactionCallback" | "ObjectGridEventListener" |"SubjectSource" |
     "SubjectValidation" | "Loader" | "ObjectTransformer" |
    "OptimisticCallback" | "Evictor" | "MapEventListener" | "MapIndexPlugin"
(2)			className="class name" | "(spring)bean name"
/>

No exemplo a seguir, o arquivo companyGridBean.xml é utilizado para demonstrar como configurar plug-ins utilizando o elemento bean. Um plug-in do ObjectGridEventListener é incluído no CompanyGrid ObjectGrid. O atributo className para este bean é a classe com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener. Esta classe implementa a interface com.ibm.websphere.objectgrid.plugins.ObjectGridEventListener conforme necessário.

Um plug-in BackingMap também está definido no arquivo companyGridBean.xml. Um plug-in evictor está incluído na instância Customer BackingMap. Como o ID do bean é Evictor, o atributo className deve especificar uma classe que implemente a interface com.ibm.websphere.objectgrid.plugins.Evictor. A classe com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor implementa esta interface. O backingMap faz referência aos seus plug-ins utilizando o atributo pluginCollectionRef.
<?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="CompanyGrid">
			bean id="ObjectGridEventListener"
				className="com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener"/>
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração que o arquivo companyGridBean.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
TranPropListener tranPropListener = new TranPropListener();
companyGrid.addEventListener(tranPropListener);

BackingMap customerMap = companyGrid.defineMap("Customer");
Evictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
customerMap.setEvictor(lruEvictor);

Para obter mais detalhes sobre como usar os plug-ins, consulte o Visão Geral de Plug-ins.

Elemento property

Utilize o elemento property para incluir propriedades nos plug-ins. O nome da propriedade deve corresponder a um método configurado na classe referenciada pelo bean de conteúdo.
Atributos
name
Especifica o nome da propriedade. O valor atribuído a esse atributo deve corresponder a um método set na classe que é fornecida como atributo className no bean que contém o atributo. Por exemplo, se você configurar o atributo className do bean como com.ibm.MyPlugin e o nome da propriedade que é fornecido for size, a classe com.ibm.MyPlugin deve ter um método setSize. (Obrigatório)
type
Especifica o tipo da propriedade. O tipo é passado para o método configurado que é identificado pelo atributo name. Os valores válidos são os primitivos Java, os correspondentes java.lang e o java.lang.String. Os atributos name e type devem corresponder a uma assinatura de método no atributo className do bean. Por exemplo, se você configurar o nome como size e o tipo como int, um método setSize(int) deve existir na classe que é especificada como o atributo className para o bean. (Obrigatório)
value
Especifica o valor da propriedade. Este valor é convertido no tipo especificado pelo atributo type e, em seguida, é utilizado como um parâmetro na chamada para o método set identificado pelos atributos name e type. O valor deste atributo não é validado de nenhuma maneira. (Obrigatório)
description
Descreve a propriedade. (Opcional)
<bean
(1)			name="name"
(2)			type="java.lang.String" | "boolean" | "java.lang.Boolean" | "int" |
			 "java.lang.Integer" | "double" | "java.lang.Double" | "byte" |
			 "java.lang.Byte" | "short" | "java.lang.Short" | "long" | 
			 "java.lang.Long" | "float" | "java.lang.Float" | "char" | 
			 "java.lang.Character"
(3)			value="value"
(4)			description="description"
/>
No exemplo a seguir, o arquivo companyGridProperty.xml é utilizado para demonstrar como incluir um elemento property em um bean. Neste exemplo, uma propriedade com o nome maxSize e o tipo int são incluídos em um evictor. A classe com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor tem uma assinatura de método que corresponde ao método setMaxSize(int). Um valor de número inteiro de 499 é passado para o método setMaxSize(int) na classe com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor.
<?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="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor>
					<property name="maxSize" type="int" value="449"
							description="The maximum size of the LRU Evictor"/>
			</bean>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração do arquivo companyGridProperty.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");

LRUEvictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
// if the XML file is used instead,
// the property that was added would cause the following call to occur
lruEvictor.setMaxSize(449);
customerMap.setEvictor(lruEvictor);

Elemento backingMapPluginsCollections

O elemento backingMapPluginsCollections é um contêiner para todos os elementos backingMapPluginCollection. No arquivo companyGridProperty.xml na seção anterior, o elemento backingMapPluginCollections contém um elemento backingMapPluginCollection com o ID customerPlugins.

Elemento backingMapPluginCollection

O elemento backingMapPluginCollection define os plug-ins do BackingMap e é identificado pelo atributo id. Especifique o atributo pluginCollectionRef para referenciar os plug-ins. Ao configurar vários plug-ins do BackingMaps de maneira semelhante, cada BackingMap pode referenciar o mesmo elemento backingMapPluginCollection.
Atributos
id
Identifica a backingMapPluginCollection e é referenciado pelo atributo pluginCollectionRef do elemento backingMap. Cada ID deve ser exclusivo. Se o valor de um atributo pluginCollectionRef não corresponder ao ID de um elemento backingMapPluginCollection, a validação XML falha. Qualquer número de elementos backingMap pode fazer referência a um único elemento backingMapPluginCollection. (Obrigatório)
<backingMapPluginCollection
(1)			id="id"
/>
No exemplo a seguir, o arquivo companyGridCollection.xml é utilizado para demonstrar como utilizar o elemento backingMapPluginCollection. Neste arquivo, o BackingMap do Cliente utilizar o customerPlugins backingMapPluginCollection para configurar o BackingMap do Cliente com um LRUEvictor. O Item e OrderLine BackingMaps referenciam o collection2 backingMapPluginCollection. Cada um destes BackingMaps possuem um conjunto de LFUEvictor.
<?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="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
			<backingMap name="Item" pluginCollectionRef="collection2"/>
			<backingMap name="OrderLine"
				pluginCollectionRef="collection2"/>
			<backingMap name="Order"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
		<backingMapPluginCollection id="collection2">
			<bean id="Evictor"
					className="com.ibm.websphere.objectgrid.plugins.builtins.LFUEvictor/>
			<bean id="OptimisticCallback"
					className="com.ibm.websphere.samples.objectgrid.EmployeeOptimisticCallBackImpl"/>
		</backingMapPluginCollection>
		</backingMapPluginCollections>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração que o arquivo companyGridCollection.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();

ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
BackingMap customerMap = companyGrid.defineMap("Customer");
LRUEvictor customerEvictor = new LRUEvictor();
customerMap.setEvictor(customerEvictor);

BackingMap itemMap = companyGrid.defineMap("Item");
LFUEvictor itemEvictor = new LFUEvictor();
itemMap.setEvictor(itemEvictor);

BackingMap orderLineMap = companyGrid.defineMap("OrderLine");
LFUEvictor orderLineEvictor = new LFUEvictor();
orderLineMap.setEvictor(orderLineEvictor);

BackingMap orderMap = companyGrid.defineMap("Order");

Elemento querySchema

O elemento querySchema define relacionamentos entre BackingMaps e identifica o tipo de objeto em cada mapa. Estas informações são utilizadas pelo ObjectQuery para converter cadeias de linguagem de consulta em chamadas de acesso de mapa. Para obter mais informações, consulte o Configurando um Esquema ObjectQuery.

Elemento mapSchemas

Cada elemento querySchema tem um elemento mapSchemas que contém um ou mais elementos mapSchema.

Elemento mapSchema

Um elemento mapSchema define o tipo de objeto que é armazenado em um BackingMap e instruções sobre como acessar os dados.
Atributos
mapName
Especifica o nome do BackingMap a incluir no esquema. (Obrigatório)
valueClass
Especifica o tipo de objeto que é armazenado na parte do valor do BackingMap. (Obrigatório)
primaryKeyField
Especifica o nome do atributo-chave principal no atributo valueClass. A chave primária também deve ser armazenada na parte da chave do BackingMap. (Opcional)
accessType
Identifica como o mecanismo de consulta examina e acessa os dados persistentes nas instâncias do objeto valueClass. Se você configurar o valor como FIELD, os campos de classe são examinados e incluídos no esquema. Se o valor for PROPERTY, os atributos que estão associados com os métodos get e is são utilizados. O valor padrão é PROPERTY. (Opcional)
<mapSchema
(1)			mapName="backingMapName"
(2)			valueClass="com.mycompany.OrderBean"
(3)			primaryKeyField="orderId"
(4)			accessType="PROPERTY" | "FIELD"
/>
No exemplo a seguir, o arquivo companyGridQuerySchemaAttr.xml é utilizado para demonstrar uma configuração do mapSchema de amostra.
<?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="CompanyGrid">
			<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração do arquivo companyGridQuerySchemaAttr.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Definir o esquema
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
companyGrid.setQueryConfig(queryCfg);

Elemento relationships

Cada elemento querySchema tem zero ou um elemento relationships que contém um ou mais elementos relationship.

Elemento relationship

Um elemento relationship define o relacionamento entre dois BackingMaps e os atributos no atributo valueClass que liga o relacionamento.
Atributos
source
Especifica o nome da valueClass do lado da origem de um relacionamento. (Obrigatório)
target
Especifica o nome da valueClass do lado do destino de um relacionamento. (Obrigatório)
relationField
Especifica o nome do atributo na valueClass de origem que faz referência ao destino. (Obrigatório)
invRelationField
Especifica o nome do atributo na valueClass de destino que faz referência à origem. Se este atributo não for especificado, o relacionamento é unidirecional. (Opcional)
<mapSchema
(1)			source="com.mycompany.OrderBean"
(2)			target="com.mycompany.CustomerBean"
(3)			relationField="customer"
(4)			invRelationField="orders"
/>
No exemplo a seguir, o arquivo companyGridQuerySchemaWithRelationshipAttr.xml é usado para demonstrar uma configuração de mapSchema de amostra que inclui um relacionamento bidirecional.
<?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="CompanyGrid">
			<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
				<relationships>
					<relationship
						source="com.mycompany.OrderBean"
						target="com.mycompany.CustomerBean"
						relationField="customer"/>
						invRelationField="orders"/>
				</relationships>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
A amostra de código a seguir demonstra a abordagem programática para obter a mesma configuração que o arquivo companyGridQuerySchemaWithRelationshipAttr.xml no exemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Definir o esquema
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryRelationship(new QueryRelationship(
     OrderBean.class.getName(), CustomerBean.class.getName(), "customer", "orders"));
companyGrid.setQueryConfig(queryCfg);

Elemento stream

O elemento stream representa um fluxo para o mecanismo de consulta do fluxo. Cada atributo do elemento stream corresponde a um método da interface StreamMetadata.
Atributos
name
Especifica o nome do fluxo. A validação falha se este atributo não for especificado. (Obrigatório)
valueClass
Especifica o tipo de classe do valor que é armazenado no ObjectMap do fluxo. O tipo de classe é utilizado para converter o objeto para os eventos de fluxo e para gerar uma instrução SQL se a instrução não for fornecida. (Obrigatório)
sql
Especifica a instrução SQL do fluxo. Se essa propriedade não for fornecida, um SQL de fluxo será gerado refletindo os atributos ou métodos do acessador no atributo valueClass ou usando os atributos de tupla dos metadados da entidade. (Opcional)
access
Especifica o tipo para acessar os atributos da classe de valor. Se você configurar o valor para FIELD, os atributos serão recuperados diretamente a partir dos campos usando o reflexo Java. Caso contrário, os métodos do acessador serão utilizados para ler os atributos. O valor padrão é PROPERTY. (Opcional)
<stream
(1)			name="streamName"
(2)			valueClass="streamMapClassType"
(3)			sql="streamSQL create stream stockQuote
				 keyed by t ( transactionvolume INTEGER, price DECIMAL (9,2), issue VARCHAR(100) );"
(4)			access="PROPERTY" | "FIELD"
/>

Elemento view

O elemento view representa uma visualização de consulta de fluxo. Cada elemento stream corresponde a um método na interface ViewMetadata.
Atributos
name
Especifica o nome da visualização. A validação falha se este atributo não for especificado. (Obrigatório)
sql
Especifica o SQL do fluxo, que define a transformação da visualização. A validação falha se este atributo não for especificado. (Obrigatório)
valueClass
Especifica o tipo de classe do valor que é armazenado nesta visualização do ObjectMap. O tipo de classe é utilizado para converter eventos de visualização no formato de tupla correto que é compatível com este tipo de classe. Se o tipo de classe não for fornecido, um formato padrão após as definições da coluna em SPTSQL (Stream Processing Technology Structured Query Language) será utilizado. Se os metadados de uma entidade forem definidos para esse mapa de visualização, não utilize o atributo valueClass. (Opcional)
access
Especifica o tipo para acessar os atributos da classe de valor. Se você configurar o tipo de acesso para FIELD, os valores de coluna serão configurados diretamente para os campos usando o reflexo Java. Caso contrário, os métodos do acessador são utilizados para configurar os atributos. O valor padrão é PROPERTY. (Opcional)
<view
(1)			name="viewName"
(2)			valueClass="viewMapValueClass"
(3)			sql="viewSQL CREATE VIEW last5MinuteAvgPrice AS
						SELECT issue, avg(price) as totalVolume
 					  FROM (SELECT * FROM stockQuote FETCH LATEST 5 MINUTES) group by issue;"/>
(4)			access="PROPERTY" | "FIELD"
/>

Elemento basic

O elemento basic é utilizado para definir um mapeamento a partir do nome do atributo na classe de valor ou metadados da entidade para a coluna que é definida no SPTSQL.
<basic
(1)			name="attributeName"
(2)			column="columnName"
/>

Elemento ID

O elemento id é usado para um mapeamento de atributo-chave.
<id
(1)			name="idName"
(2)			column="columnName"
/>