Cada instância do ObjectGrid contém uma coleta de objetos de BackingMap. Use o método defineMap ou o método createMap da interface ObjectGrid para nomear e incluir cada BackingMap em uma instância do ObjectGrid. Estes métodos retornam
uma instância do BackingMap que é então utilizada para definir o comportamento de um Mapa individual. Um BackingMap pode ser considerado como
um cache de memória de dados com commit para um mapa individual.
Interface Session
A interface Session é usada para iniciar uma transação e obter o ObjectMap ou JavaMap que é necessário para execução de interação transacional entre um aplicativo e um objeto BackingMap. No entanto, as
alterações na transação não serão aplicadas ao objeto de BackingMap até
que a transação seja confirmada. Um BackingMap pode ser considerado como
um cache de memória de dados com commit para um mapa individual. Para obter mais informações, consulte o Uso de Sessões para Acessar Dados na Grade.
A interface BackingMap oferece métodos para configuração de atributos do BackingMap. Alguns dos métodos set
permitem a extensibilidade de um BackingMap por meio de vários plug-ins projetados
customizados. Consulte a lista dos métodos de configuração a seguir para configurar atributos e fornece suporte a plug-ins desenvolvidos de forma customizada:
// For setting BackingMap attributes.
public void setReadOnly(boolean readOnlyEnabled);
public void setNullValuesSupported(boolean nullValuesSupported);
public void setLockStrategy( LockStrategy lockStrategy );
public void setCopyMode(CopyMode mode, Class valueInterface);
public void setCopyKey(boolean b);
public void setNumberOfBuckets(int numBuckets);
public void setNumberOfLockBuckets(int numBuckets);
public void setLockTimeout(int seconds);
public void setTimeToLive(int seconds);
public void setTtlEvictorType(TTLType type);
public void setEvictionTriggers(String evictionTriggers);
// For setting an optional custom plug-in provided by application.
public abstract void setObjectTransformer(ObjectTransformer t);
public abstract void setOptimisticCallback(OptimisticCallback checker);
public abstract void setLoader(Loader loader);
public abstract void setPreloadMode(boolean async);
public abstract void setEvictor(Evictor e);
public void setMapEventListeners( List /*MapEventListener*/ eventListenerList );
public void addMapEventListener(MapEventListener eventListener );
public void removeMapEventListener(MapEventListener eventListener );
public void addMapIndexPlugin(MapIndexPlugin index);
public void setMapIndexPlugins(List /\* MapIndexPlugin \*/ indexList );
public void createDynamicIndex(String name, boolean isRangeIndex,
String attributeName, DynamicIndexCallback cb);
public void createDynamicIndex(MapIndexPlugin index, DynamicIndexCallback cb);
public void removeDynamicIndex(String name);
Existe um método get correspondente
para cada um dos métodos set listados.
Atributos de BackingMap
Cada BackingMap
possui os seguintes atributos que podem ser configurados para modificar ou controlar o comportamento
de BackingMap:
- ReadOnly: Este atributo indica se o Mapa é um Mapa somente leitura ou um Mapa de
leitura e gravação. Se este atributo nunca for configurado para o Mapa, o Mapa será
padronizado para ser um Mapa de leitura e gravação. Quando um BackingMap é configurado
para ser de leitura, o ObjectGrid otimiza o desempenho para de leitura quando possível.
- NullValuesSupported: Este atributo indica se um valor nulo pode ser colocado no
Mapa. Se este atributo nunca for configurado, o Mapa não suportará valores nulos. Se
o Mapa suportar valores nulos, uma operação get que retorna nulo poderá significar
que o valor é nulo ou o mapa não contém a chave especificada pela operação get.
- LockStrategy: Este atributo determina se um gerenciador de bloqueios é utilizado
por este BackingMap. Se um gerenciador de bloqueios for utilizado, o atributo LockStrategy
será utilizado para indicar se será utilizada uma abordagem de bloqueio otimista ou pessimista
para bloquear as entradas do mapa. Se este atributo não for configurado, será utilizado o
LockStrategy otimista. Consulte o tópico Bloqueio para obter detalhes sobre as estratégias de
bloqueio suportadas.
- CopyMode: Este atributo determina se uma cópia de um objeto de
valor é feita no BackingMap quando um valor é lido a partir do mapa
ou é colocado no BackingMap durante o ciclo de commit de uma
transação.
Vários modos de cópia são suportados para permitir que o
aplicativo faça o equilíbrio entre desempenho e integridade de dados. Se
este atributo não estiver configurado, então, o modo de cópia
COPY_ON_READ_AND_COMMIT é utilizado. Este modo de cópia não tem o melhor
desempenho, mas tem a maior proteção contra problemas de integridade de
dados. Se o BackingMap estiver associado a uma entidade da API EntityManager, então a configuração CopyMode não tem efeito a menos que o valor esteja configurado como COPY_TO_BYTES. Se qualquer outro CopyMode estiver configurado, ele sempre será configurado como NO_COPY. Para substituir o CopyMode para uma mapa de entidades, use o método ObjectMap.setCopyMode.
Para obter mais informações sobre os modos de cópia, consulte o Ajustando o Modo de Cópia.
- CopyKey: Este atributo determina se o BackingMap faz uma
cópia de um objeto de chave quando uma entrada é criada pela
primeira vez no mapa. A ação padrão é não fazer uma cópia de
objetos de chave, porque as chaves normalmente são objetos
inalteráveis.
- NumberOfBuckets: Este atributo indica o número de depósitos de hash
a serem utilizados pelo BackingMap. A implementação de BackingMap utiliza um
mapa hash para sua implementação. Se existirem muitas entradas no BackingMap,
mais depósitos significam melhor desempenho. O número de chaves que possuem o
mesmo depósito se torna mais baixo conforme aumenta o número de depósitos. Mais
depósitos também significam mais simultaneidade. Este atributo é útil para
ajuste de desempenho. Um valor padrão indefinido será utilizado se o aplicativo
não configurar o atributo NumberOfBuckets.
- NumberOfLockBuckets: Este atributo indica o número de depósitos de bloqueio
que são utilizados pelo gerenciador de bloqueios para este BackingMap.
Quando LockStrategy estiver configurado como OPTIMISTIC ou PESSIMISTIC, será
criado um gerenciador de bloqueios para o BackingMap. O gerenciador de bloqueios
utiliza um mapa hash para rastrear as entradas que estão bloqueadas por uma ou
mais transações.
Se existirem muitas entradas no mapa de hash, mais depósitos de bloqueios resultarão
em melhor desempenho, porque o número de chaves que colidem no mesmo depósito é mais
baixo conforme aumenta o número de depósitos. Mais depósitos de bloqueios também
significam mais simultaneidade. Quando o atributo LockStrategy for configurado como
NONE, nenhum gerenciador de bloqueios será utilizado por este BackingMap. Neste caso, a configuração de numberOfLockBuckets não tem nenhum efeito. Se este
atributo não for configurado, será utilizado um valor indefinido.
- LockTimeout: Este atributo é utilizando quando o BackingMap está utilizando um
gerenciador de bloqueios. O BackingMap utilizará um gerenciador de bloqueios quando
o atributo LockStrategy for configurado como OPTIMISTIC ou PESSIMISTIC. O valor de atributo
está em segundos e determina por quanto tempo o gerenciador de bloqueios espera que um bloqueio
seja concedido. Se este atributo não estiver configurado, então são usados 15 segundos como o valor de LockTimeout. Consulte Bloqueio Pessimista para obter detalhes sobre as exceções de tempo limite de espera de bloqueio que podem ocorrer.
- TtlEvictorType: Cada BackingMap possui seu próprio evictor time to live integrado
que utilize um algoritmo baseado em tempo para determinar quais entradas de mapa
despejar. Por padrão, o evictor time to live integrado não está ativo. É possível ativar o tempo para ativar evictor chamando o método setTtlEvictorType com um desses valores: CREATION_TIME,
LAST_ACCESS_TIME, LAST_UPDATE_TIME ou NONE. Um valor de CREATION_TIME indica que
o evictor inclui o atributo TimeToLive no horário em que a
entrada de mapa foi criada no BackingMap para determinar quando
o evictor deve despejar a entrada de mapa do BackingMap. Um valor
de LAST_ACCESS_TIME (ou LAST_UPDATE_TIME) indica que o evictor inclui
o atributo TimeToLive na hora que a entrada de mapa foi acessada pela
última vez (ou acessada e atualizada) por alguma transação que
o aplicativo está executando para determinar quando o evictor deve liberar
a entrada de mapa. A entrada do mapa será liberada apenas se uma entrada de
mapa nunca for acessada por nenhuma transação durante um período
de tempo especificado pelo atributo TimeToLive. Um valor de NONE
indica que o evictor deve permanecer inativo e nunca liberar
nenhuma das entradas de mapa. Se este atributo nunca for configurado,
NONE será utilizado como o padrão e o evictor time to live não será
ativado. Consulte Evictors para obter detalhes sobre o evictor time
to live interno.
- TimeToLive: Este atributo é utilizado para especificar o número de
segundos que o evictor time to live integrado precisa incluir no
horário da criação ou no horário do último acesso para cada entrada,
conforme descrito para o atributo TtlEvictorType. Se este atributo
nunca for configurado, será utilizado o valor especial de zero para
indicar que o time to live é infinito. Se este atributo for configurado como infinito, as
entradas do mapa nunca serão liberadas pelo evictor.
O exemplo a seguir
demonstra como definir o someMap BackingMap na instância someGrid ObjectGrid
e configura diversos atributos do BackingMap utilizando os métodos set da interface BackingMap:
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("someGrid");
BackingMap bm = objectGrid.getMap("someMap");
bm.setReadOnly( true ); // override default of read/write
bm.setNullValuesSupported(false); // override default of allowing Null values
bm.setLockStrategy( LockStrategy.PESSIMISTIC ); // override default of OPTIMISTIC
bm.setLockTimeout( 60 ); // override default of 15 seconds.
bm.setNumberOfBuckets(251); // override default (prime numbers work best)
bm.setNumberOfLockBuckets(251); // override default (prime numbers work best)
Plug-ins do BackingMap
A interface BackingMap possui vários pontos
de conexão opcionais para interações mais extensíveis com o ObjectGrid:
- Plug-in ObjectTransformer: Para algumas operações do mapa, um BackingMap talvez precise serializar, desserializar ou copiar uma chave ou valor de uma entrada
no BackingMap. O BackingMap pode desempenhar estas ações fornecendo
uma implementação padrão da interface ObjectTransformer.
Um aplicativo pode
melhorar o desempenho fornecendo um plug-in ObjectTransformer projetado
customizado que é utilizado pelo BackingMap para serializar, desserializar
ou copiar uma chave ou valor de uma entrada no BackingMap.
Consulte Plug-in ObjectTransformer para
obter mais informações.
- Plug-in do Evictor: O evictor time to live interno utiliza um algoritmo baseado em tempo
para decidir quando uma entrada no BackingMap deve ser liberada. Alguns aplicativos
talvez precisem utilizar um algoritmo diferente para decidir quando uma entrada em um
BackingMap precisa ser liberada. O plug-in do Evictor disponibiliza um Evictor projetado
customizado para ser utilizado pelo BackingMap. O plug-in do Evictor é uma inclusão no
evictor time to live interno. Ele não substitui o evictor time to live. O ObjectGrid
fornece um plug-in do Evictor customizado que implementa algoritmos bem conhecidos, como
"menos utilizado recentemente" ou "menos utilizado frequentemente". Os aplicativos podem
conectar um dos plug-ins do Evictor fornecidos ou podem fornecer seu próprio plug-in do
Evictor. Consulte Plug-ins para Despejar Objetos de Cache.
- Plug-in MapEventListener: Um aplicativo talvez queira saber
sobre eventos de BackingMap, como uma evicção de entrada do mapa ou um pré-carregamento de uma conclusão
de BackingMap. Um BackingMap chama métodos no plug-in MapEventListener para notificar
um aplicativo sobre eventos do BackingMap. Um aplicativo pode receber notificação de vários eventos
de BackingMap, utilizando o método setMapEventListener para fornecer um ou mais plug-ins
MapEventListener projetados customizados para o BackingMap. O aplicativo pode modificar os objetos MapEventListener listados usando o método addMapEventListener ou o método removeMapEventListener. Consulte o Plug-in MapEventListener para
obter mais informações.
- Plug-in do Loader: Um BackingMap é um cache de memória de um Mapa. Um plug-in Carregador é uma opção que é usada pelo BackingMap para mover dados entre a memória e um armazenamento persistente. Por exemplo, um utilitário de carga JDBC (Java Database Connectivity) pode ser usado para mover dados para dentro e para fora de um BackingMap e uma ou mais tabelas relacionais de um banco de dados relacional. Um banco de dados relacional não precisa ser utilizado como o armazenamento persistente para
um BackingMap.
O utilitário de carga também pode ser usado para dados movidos entre um BackingMap e um arquivo, entre um BackingMap e um mapa Hibernate, entre um BackingMap e um bean de entidade Java 2 Platform, Enterprise Edition (J2EE), entre um BackingMap
e outro servidor de aplicativos, e assim por diante. O aplicativo deve fornecer um plug-in do
Loader projetado customizado para mover dados entre o BackingMap e o armazenamento persistente
para cada tecnologia utilizada. Se um Loader não for fornecido,
o BackingMap se tornará um cache de memória simples. Consulte o Plug-ins para a Comunicação com os Bancos de Dados para obter mais informações.
- Plug-in OptimisticCallback: Quando o atributo LockStrategy
para um BackingMap for configurado como OPTIMISTIC, o BackingMap ou um plug-in do Loader
deverá desempenhar operações de comparação para os valores do mapa. O plug-in OptimisticCallback
é utilizado pelo BackingMap e pelo Loader para desempenhar as operações de comparação de
controle de versões otimistas.
Consulte o Plug-ins para Versão e Comparação de Objetos de Cache para
obter mais informações.
- Plug-in MapIndexPlugin: Um plug-in MapIndexPlugin
ou, abreviando, um Index, é uma opção utilizada pelo BackingMap para construir um
índice baseado no atributo especificado do objeto armazenado.
O índice permite que o aplicativo localize objetos por um valor específico ou
intervalo de valores. Existem dois tipos de índice: estático e dinâmico.
Consulte
Indexação para obter informações detalhadas.
Para obter informações adicionais sobre plug-ins, consulte o Visão Geral de Plug-ins.