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.
- Número de ocorrências: Uma
- Elemento-filho: Elemento objectGrids e elemento backingMapPluginCollections
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.
- Número de ocorrências: Uma ou mais
- Elemento-filho: Elemento 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.
- Número de ocorrências: Uma para muitas
- Elemento filho: Elemento bean, elemento backingMap, e elemento querySchema
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.
- Número de ocorrências: Zero para muitas
- Elemento-filho: Elemento timeBasedDBUpdate
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.
- Número de ocorrências no elemento objectGrid: Zero para muitas
- Número de ocorrências no elemento backingMapPluginCollection:
Zero para muitas
- Elemento-filho: Elemento property
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.
- Número de ocorrências: Zero para muitas
- Elemento-filho: Nenhum
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.
- Número de ocorrências: Zero para uma
- Elemento-filho: Elemento backingMapPluginCollection
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.
- Número de ocorrências: Zero para muitas
- Elemento-filho: Elemento bean
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.- Número de ocorrências: Zero para uma
- Elemento-filho: Elemento mapSchemas, elemento relationships
Elemento mapSchemas
Cada elemento querySchema tem um elemento mapSchemas que contém um ou mais elementos mapSchema.
- Número de ocorrências: Uma
- Elemento-filho: Elemento mapSchema
Elemento mapSchema
Um elemento mapSchema define o tipo de objeto que é armazenado em um BackingMap e instruções sobre como acessar os dados.
- Número de ocorrências: Uma ou mais
- Elemento-filho: Nenhum
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.
- Número de ocorrências: Zero ou uma
- Elemento-filho: Elemento relationship
Elemento relationship
Um elemento relationship define o relacionamento entre dois BackingMaps e os atributos no atributo valueClass que liga o relacionamento.
- Número de ocorrências: Uma ou mais
- Elemento-filho: Nenhum
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.
- Número de ocorrências: Uma para muitas
- Elemento-filho: Elemento basic
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.
- Número de ocorrências: Uma para muitas
- Elemento-filho: Elemento basic, elemento ID
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.
- Número de ocorrências: Zero para muitas
- Elemento-filho: Nenhum
<basic
(1) name="attributeName"
(2) column="columnName"
/>
Elemento ID
O elemento id é usado para um mapeamento de atributo-chave.
- Número de ocorrências: Zero para muitas
- Elemento-filho: Nenhum
<id
(1) name="idName"
(2) column="columnName"
/>