Utilizando as interfaces DistributedMap ou DistributedObjectCache, os aplicativos e os componentes de sistema Java™ EE (Java Platform,
Enterprise Edition) podem armazenar em cache e compartilhar objetos Java armazenando uma referência ao objeto no cache.
Sobre Esta Tarefa
As interfaces DistributedMap e DistributedObjectCache são interfaces simples
para o cache dinâmico. Utilizando essas interfaces, os aplicativos e os componentes de sistema Java EE
podem armazenar em cache e compartilhar objetos Java, armazenando uma referência para o objeto no cache. A instância de cache dinâmico padrão é criada
se o serviço de cache dinâmico estiver ativado no console administrativo. Essa instância padrão é ligada ao namespace JNDI (Java Naming and Directory Interface) global utilizando o nome services/cache/distributedmap.
Diversas instâncias das interfaces
DistributedMap e DistributedObjectCache na mesma JVM (Java virtual
machine) permitem que aplicativos configurem separadamente as instâncias de cache, conforme necessário. Cada instância da interface DistributedMap tem suas próprias propriedades.
Importante: Se estiver utilizando chaves
de objeto customizadas, é preciso colocar as classes em uma biblioteca compartilhada. É possível definir a biblioteca compartilhada no nível da célula, do nó ou do servidor. Em seguida, crie em cada servidor um carregador de classes e associe-o à biblioteca compartilhada que foi definida. Consulte
Gerenciando bibliotecas compartilhadas e
Definições do Carregador de Classes para obter mais informações.
Coloque os arquivos JAR em uma biblioteca compartilhada ao implementar o aplicativo em
um cluster com a replicação ativada. Simplesmente ativar a replicação não requer uma
biblioteca compartilhada; no entanto, se você estiver utilizando objetos Java específicos
de aplicativos, como chave de cache ou valor de cache, essas classes Java deverão estar na biblioteca
compartilhada. Se esses valores não estiverem em uma biblioteca compartilhada,
você receberá exceções ClassNotFound quando o serviço DRS (Data Replication Service)
tentar desserializar os objetos no lado do recebimento.
Em um ambiente em cluster, o conteúdo colocado no cache pode ser compartilhado com outros servidores do cluster. O conteúdo também pode ser removido para o
disco. Para que os objetos armazenados em cache sejam compartilhados ou removidos para o disco,
esses objetos específicos deverão tornar-se seriáveis. Se os objetos colocados
em cache não forem seriáveis, você deverá especificar que a política de compartilhamento para
eles é a não-compartilhada. A interface DistributedMap interface DistributedMap contém informações sobre como especificar a política de
compartilhamento para um objeto armazenado em cache. Especificar uma política de compartilhamento diferente
de não-compartilhada para objetos não-seriáveis pode resultar em um fraco desempenho do sistema.
Há três métodos para configurar e utilizar as instâncias do cache:
- Configurando o cache de objeto padrão (método um em Procedimento)
- Criando e configurando o cache de objeto customizado (método três em Procedimento)
- Criando e configurando o cache de objeto customizado usando o arquivo cacheinstances.properties (método quatro em Procedimento)
- Usando a referência de recurso (método cinco em Procedimento)
- Método 1 - Configurar instâncias de cache padrão.
A instância de cache do servlet padrão (nome JNDI: services/cache/basecache)
é criada quando o servidor inicia, se o armazenamento em cache do servlet estiver ativado.
A instância de cache do objeto padrão (nome JNDI: services/cache/distributedmap)
é sempre criada quando o servidor inicia.
- No console administrativo, selecione Servidores > Tipos de Servidor >
Servidores de Aplicativos do WebSphere > server_name > Serviços de
contêiner > Serviço de cache dinâmico .
- Configure outras configurações de cache. Consulte o artigo Configurações de Serviço de Cache Dinâmico para obter informações adicionais.
- Clique em Aplicar ou em OK.
- Reinicie o WebSphere Application Server.
Você pode utilizar o código a seguir para consultar as instâncias de cache:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instância_um");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instância_dois");
// ou
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Método 2 - Configurar as instâncias de cache do servlet.
Uma instância de cache de servlet é um local, além do cache de servlet padrão, em que o cache dinâmico pode armazenar, distribuir e compartilhar
dados.
Utilizando instâncias de cache de servlet, seus aplicativos têm maior flexibilidade
e melhor ajuste dos recursos de cache. O nome Java Naming and Directory
Interface (JNDI) especificado para a instância de cache é mapeado
para o atributo de nome na tag <instância do cache>
no arquivo de configuração cachespec.xml.
Evitar Problemas: Os caches de servlet não podem
ser consultados.
Uma tentativa de fazer uma consulta falhou e retornou nulo.
gotcha
- No console administrativo, clique em Recursos
> Instâncias de Cache > Instâncias de Cache de Servlet.
- Digite o escopo, como segue:
- Especifique CELL SCOPE para exibir e configurar as instâncias do cache que estão
disponíveis para todos os servidores da célula.
- Especifique NODE SCOPE para
visualizar e configurar as instâncias do cache que estão disponíveis para
todos os servidores de um determinado nó.
- Especifique SERVER SCOPE para exibir e configurar as instâncias do cache que estão disponíveis
apenas em um servidor específico.
- Digite o nome de exibição necessário para o recurso no campo de
nome.
- Digite o nome de JNDI para o recurso. Especifique este nome
no campo de atributo na tag <cache-instance>
no arquivo de configuração cachespec.xml. Essa tag localiza a instância de cache específica na qual são armazenadas as entradas de cache.
- Configure outras configurações de cache. Consulte o artigo Configurações de Serviço de Cache Dinâmico para obter informações adicionais.
- Clique em Aplicar ou OK.
- Opcional: Se desejar configurar propriedades customizadas adicionais para essa instância, clique em Recursos > Instâncias de Cache > Instâncias de Cache do Servlet > servlet_cache_instance_name> Propriedades Customizadas > Novo.
- Opcional: Digite o nome da propriedade customizada no campo Nome. Consulte o artigo Propriedades Customizadas de Cache Dinâmico para obter informações adicionais.
Importante: Utilize a propriedade customizada com o escopo indicado apenas Por instância de cache.
Por exemplo, digite createCacheAtServerStartup no campo
Nome.
- Insira um valor válido para a propriedade no campo Valor.
- Salve a propriedade e reinicie o WebSphere Application Server.
- Método 3 - Configurar instâncias de cache.
Uma instância de cache
do objeto é um local, além do cache de objeto padrão,
em que o cache dinâmico pode armazenar, distribuir e compartilhar dados para
aplicativos Java Platform, Enterprise Edition (Java EE). Utilize
as instâncias de cache para fornecer aos aplicativos maior flexibilidade
e ajuste dos recursos de cache.
Utilize a interface de programação DistributedObjectCache para acessar as instâncias
de cache. Para obter informações adicionais sobre a interface de programação de aplicativos DistributedObjectCache, consulte a documentação da API.
Atenção: O método três é uma extensão do método um ou do método dois, listados no início da seção Procedimento. Primeiro, utilize o método um ou o método dois.
Crie e configure a instância de cache de objeto,
como segue:
- No console administrativo, clique em Recursos >
Instâncias de Cache > Instâncias de Cache de Objeto.
- Digite o escopo:
- Especifique CELL SCOPE para exibir e configurar as instâncias do cache que estão
disponíveis para todos os servidores da célula.
- Especifique NODE SCOPE para visualizar e configurar as instâncias do cache que estão disponíveis para
todos os servidores de um determinado nó.
- Especifique SERVER SCOPE para exibir e configurar as instâncias do cache que estão disponíveis
apenas em um servidor específico.
- Digite o nome de exibição necessário para o recurso no campo de
nome.
- Digite o nome de JNDI para o recurso. Utilize esse nome quando estiver consultando
uma referência a essa instância do cache. Os resultados retornam um objeto DistributedMap.
- Configure outras configurações de cache. Consulte o artigo Configurações de Serviço de Cache Dinâmico para obter informações adicionais.
- Clique em Aplicar ou em OK.
- Opcional: Se desejar configurar propriedades customizadas adicionais para essa instância, clique em Recursos > Instâncias de Cache > Instâncias de Cache do Objeto > servlet_cache_instance_name > Propriedades Customizadas > Novo.
- Opcional: Digite o nome da propriedade customizada no campo Nome.
Importante: Utilize a propriedade customizada com o escopo indicado apenas Por instância de cache.
Por exemplo, digite createCacheAtServerStartup no campo
Nome.
- Insira um valor válido para a propriedade no campo Valor.
- Salve a propriedade e reinicie o WebSphere Application Server.
Se você tiver definido duas instâncias de cache do objeto no console administrativo
com nomes de JNDI iguais a services/cache/instance_one e services/cache/instance_two,
poderá utilizar o código a seguir para consultar as instâncias de cache:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instância_um");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instância_dois");
// ou
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Método 4 - Configurar instâncias de cache utilizando o arquivo cacheinstances.properties.
É possível criar instâncias
de cache utilizando o arquivo cacheinstances.properties e empacotar o
arquivo no arquivo EAR (Enterprise Archive). Utilize as informações da tabela no artigo do arquivo cacheinstances.properties como uma referência dos nomes, dos valores e das explicações.
A primeira linha define o nome da instância de
cache. As linhas subsequentes definem as propriedades customizadas. Os formatos são os seguintes:
cache.instance.x=InstanceName
cache.instance.x.customPropertyName=customPropertyValue
em que:
O exemplo a seguir mostra como é possível criar instâncias de cache adicionais utilizando cacheinstances.properties. arquivo:
cache.instance.0=/services/cache/instance_one
cache.instance.0.cacheSize=1000
cache.instance.0.enableDiskOffload=true
cache.instance.0.diskOffloadLocation=${app_server_root}/diskOffload
cache.instance.0.flushToDiskOnStop=true
cache.instance.0.useListenerContext=true
cache.instance.0.enableCacheReplication=false
cache.instance.0.disableDependencyId=false
cache.instance.0.htodCleanupFrequency=60
cache.instance.1=/services/cache/instance_two
cache.instance.1.cacheSize=1500
cache.instance.1.enableDiskOffload=false
cache.instance.1.flushToDiskOnStop=false
cache.instance.1.useListenerContext=false
cache.instance.1.enableCacheReplication=true
cache.instance.1.replicationDomain=DynaCacheCluster
cache.instance.1.disableDependencyId=true
O exemplo anterior cria duas instâncias de cache denominadas
instância_um e instância_dois. A instância_um tem um tamanho de entrada de cache igual a 1.000 e
a instância_dois tem um tamanho de entrada de cache igual a 1.500. A transferência de disco está ativada na instância_um e desativada na instância_dois. Utilize o contexto de listener ativado na instância_um e desativado na instância_dois. A liberação para o disco na parada está ativada na instância_um e desativada na instância_dois. A replicação de cache está ativada na instância_dois e desativada na instância_um. O nome do domínio de replicação de dados para a instância_dois é DynaCacheCluster. O suporte ao ID de dependência está desativado na instância_dois.
Coloque o arquivo cacheinstances.properties no servidor de aplicativos ou no caminho de classe de aplicativo.
Por exemplo, é possível utilizar o arquivo WAR, o diretório
WEB-INF\classes ou o diretório server_root\classes. A primeira entrada no arquivo de propriedades (cache.instance.0) especifica o nome JNDI para a instância de cache no namespace global.
É possível utilizar o código a seguir para consultar a instância do cache:
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
// ou
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Método 5: Referência de recurso.
Importante: Esse método é uma extensão do método três e do método quatro, listados no início da seção Procedimento. Primeiro, utilize o método três ou o método quatro.
Defina um resource-ref no descritor de módulo de implementação (arquivos web.xml e ibm-web-bnd.xmi) e consulte o cache utilizando o namespace
java:comp.
O seguinte exemplo de resource-ref usa web.xml:
<resource-ref id="ResourceRef_1">
<res-ref-name>dmap/LayoutCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_2">
<res-ref-name>dmap/UserCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
O seguinte exemplo de resource-ref usa ibm-web-bnd.xmi:
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:webappbnd="webappbnd.xmi"
xmlns:webapplication="webapplication.xmi" xmlns:commonbnd="commonbnd.xmi"
xmlns:common="common.xmi"
xmi:id="WebApp_ID_Bnd" virtualHostName="default_host">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1"
jndiName="services/cache/instance_one">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>
</resRefBindings>
<resRefBindings xmi:id="ResourceRefBinding_2"
jndiName="services/cache/instance_two">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_2"/>
</resRefBindings>
</webappbnd:WebAppBinding>
Configurações suportadas: Para arquivos de extensão e de ligação IBM®,
a extensão do nome do arquivo .xmi ou .xml é diferente dependendo de você estar utilizando um aplicativo pré-Java EE 5 ou
um módulo ou um aplicativo ou módulo Java
EE 5 ou posterior. Um arquivo de extensão ou de ligação IBM é denominado ibm-*-ext.xmi ou ibm-*-bnd.xmi em que * é o tipo de arquivo de extensão ou de ligação como app, aplicativo, ejb-jar ou web. As seguintes condições se aplicam:
- Para um aplicativo ou módulo que usa um Java EE versão anterior à versão 5, a extensão do arquivo deverá ser .xmi.
- Para um aplicativo ou módulo que usa Java EE 5 ou posterior, a extensão do
arquivo deve ser .xml. Se os arquivos .xmi forem incluídos no aplicativo ou módulo, o produto ignorará os arquivos .xmi.
No entanto, um módulo Java EE
5 ou posterior pode existir dentro de um aplicativo que inclui arquivos
pré-Java EE 5 e usa a extensão do nome do arquivo .xmi.
Os arquivos ibm-webservices-ext.xmi, ibm-webservices-bnd.xmi, ibm-webservicesclient-bnd.xmi, ibm-webservicesclient-ext.xmi,
e ibm-portlet-ext.xmi continuam a usar as extensões de arquivo .xmi.
sptcfg
O exemplo a seguir mostra como consultar o
resource-ref:
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");
// ou
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
O exemplo de
resource-ref anterior mapeia java:comp/env/dmap/LayoutCache para /services/cache/instance_one e java:comp/env/dmap/UserCache para /services/cache/instance_two.
Nos exemplos, DistributedMap dm1 e dm1a são o mesmo objeto.
DistributedMap dm2 e dm2a são
o mesmo objeto.
- Método 6: Configurações de cache da Java virtual
machine.
É possível configurar as propriedades globalmente customizadas para afetar todas as instâncias de cache. Isso sobrescreve as configurações no método 1, no método 2 e no método 3, mas não no método 4 (cacheinstances.properties).
Configure a instância do cache globalmente, como segue:
- No console administrativo, clique em Servidores > Tipos de
Servidor > Servidores de Aplicativos do WebSphere > server_name >
Gerenciamento de Java e Processos > Definição de processo > Java virtual
machine > Propriedades Customizadas > Novo.
- Digite o nome da propriedade customizada no campo Nome. Consulte o artigo Propriedades Customizadas de Cache Dinâmico para obter informações adicionais.
Depois de localizar o nome da propriedade customizada, inclua o o prefixo
com.ibm.ws.cache.CacheConfig na frente do nome da propriedade customizada. Por exemplo, se o nome da propriedade customizada for createCacheAtServerStartup, digite com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup no campo
Nome.
- Insira um valor válido para a propriedade no campo Valor.
- Salve a propriedade e reinicie o WebSphere Application Server.