É possível ativar o cache para usar o plug-in de cache do Hibernate ao especificar arquivos de propriedades.
Antes de Iniciar
- Você deve determinar a topologia do plug-in do cache JPA que deseja usar. Consulte Plug-in do Cache JPA Nível 2 (L2) para obter mais informações
sobre as diferentes configurações.
- Você deve ter um aplicativo que usa as APIs do JPA. Se desejar usar APIs do WebSphere eXtreme
Scale para acessar os dados com o JPA, use o carregador JPA. Para
obter informações adicionais, consulte
Configurando Utilitários de Carga do JPA.
Procedimento
- Se estiver usando o WebSphere Application Server, coloque os arquivos Java Archive (JAR) nos locais apropriados para sua configuração.
O plug-in do cache do Hibernate é empacotado no arquivo oghibernate-cache.jar e é instalado no diretório was_root/optionalLibraries/ObjectGrid.
Para usar o plug-in de cache do Hibernate, é necessário incluir o arquivo oghibernate-cache.jar na biblioteca Hibernate. Por exemplo, se você incluir a biblioteca Hibernate em seu aplicativo, também deverá incluir o arquivo oghibernate-cache.jar.
Se você definir uma biblioteca compartilhada para incluir a biblioteca Hibernate, o arquivo oghibernate-cache.jar deverá ser incluído no diretório da biblioteca compartilhada.
O eXtreme Scale não instala
o arquivo cglib.jar no ambiente do WebSphere Application Server.
Se você tiver aplicativos existentes ou bibliotecas compartilhadas, como Hibernate, que
depende do cglib.jar, localize o arquivo cglib.jar e inclua-o
no caminho de classe. Por exemplo, se seu aplicativo incluir todos os arquivos JAR da biblioteca Hibernate, mas excluir o arquivo cglib.jar disponível com Hibernate, você deverá incluir o arquivo cglib.jar proveniente do Hibernate em seu aplicativo.
- Configure as propriedades no arquivo persistence.xml para configurar o plug-in do cache do Hibernate
A sintaxe para configurar as propriedades no arquivo persistence.xml é a seguinte:
<property name="hibernate.cache.provider_class"
value="com.ibm.websphere.objectgrid.hibernate.cache.ObjectGridHibernateCacheProvider" />
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="objectgrid.configuration" value="<property>=<value>,..." />
<property name="objectgrid.hibernate.regionNames" value="<regionName>,.." />
- hibernate.cache.provider_class: O valor
da propriedade provider_class é a classe com.ibm.websphere.objectgrid.hibernate.cache.ObjectGridHibernateCacheProvider.
- hibernate.cache.use_query_cache: Para ativar o cache de consulta, defina o valor para true na propriedade use_query_cache.
Nota: É
possível ativar o cache de consulta somente para topologias integradas e intradomínio
integradas.
- objectgrid.configuration: Use a propriedade objectgrid.configuration
para especificar as propriedades de configuração de cache eXtreme Scale, incluindo o atributo ObjectGridType que especifica como colocar os shards na grade de dados.
E necessário especificar um único valor da propriedade ObjectGridName para evitar potenciais conflitos de nomenclatura.
As outras propriedades de configuração de cache do eXtreme Scale são opcionais.
Para ativar o cache write-behind, use os seguintes atributos write-behind na propriedade objectgrid.configuration. Quando em cache write-behind é ativado, as atualizações são armazenadas temporariamente em um armazenamento de dados de escopo JVM até a condição writeBehindInterval ou writeBehindMaxBatchSize ser atendidas, quando os dados são esvaziados para o cache.
writeBehind=true, writeBehindInterval=5000, writeBehindPoolSize=10, writeBehindMaxBatchSize=1000
Atenção: A menos que writeBehind seja ativada,
as outras definições de configuração write behind são desconsideradas.
Para obter mais informações
sobre os valores que podem ser configurados na propriedade objectgrid.configuration, consulte Propriedades de Configuração do Cache JPA.
- objectgrid.hibernate.regionNames: A propriedade objectgrid.hibernate.regionNames é opcional e deve ser especificada quando os valores regionNames forem definidos após o cache eXtreme Scale ser inicializado. Considere o exemplo de uma classe de entidade mapeada para uma regionName com
a classe de entidade não-especificada no arquivo persistence.xml ou não incluída no
arquivo de mapeamento Hibernate. Além disso, suponha que ele possua
a anotação Entity. Então, o regionName para esta classe de entidade será resolvido no momento do carregamento da classe quando o cache do eXtreme Scale for inicializado. Outro exemplo é a execução do método Query.setCacheRegion(String regionName) que é executado após a inicialização do cache do eXtreme Scale.
Nas situações acima, inclua todos os regionNames possíveis determinados como dinâmico na propriedade objectgrid.hibernate.regionNames para que o cache do eXtreme Scale possa preparar o BackingMaps para todos os regionNames.
- Opcional: Para customizar ainda mais a grade de dados usada pelo cache, é possível fornecer configurações adicionais com arquivos XML.
Para a maioria dos cenários, a configuração das propriedades de cache devem ser suficientes.
Para customizar ainda mais o ObjectGrid usado pelo cache, é possível fornecer os arquivos XML de configuração Hibernate ObjectGrid no diretório META-INF da mesma forma que o arquivo persistence.xml. Durante a inicialização, o cache tenta localizar esses arquivos XML e processa-os se localizados.
Há três tipos de arquivos XML de configuração do Hibernate ObjectGrid:
- hibernate-objectGrid.xml (Configuração ObjectGrid)
Caminho de
arquivo: META-INF/hibernate-objectGrid.xml
Por padrão, cada classe de entidade possui uma
regionName associada (padrão para o nome da classe de entidade) que é
mapeada para uma configuração de BackingMap denominada como regionName
na configuração do ObjectGrid. Por exemplo, a classe de entidade
com.mycompany.Employee possui uma regionName associada definida por
padrão como com.mycompany.Employee BackingMap. A configuração padrão do BackingMap é
readOnly="false", copyKey="false", lockStrategy="NONE" e
copyMode="NO_COPY".
É possível customizar alguns
BackingMaps com uma configuração escolhida. A palavra-chave reservada
"ALL_ENTITY_MAPS" pode ser utilizada para representar todos os mapas,
exceto outros mapas customizados listados no arquivo
hibernate-objectGrid.xml.
Os BackingMaps que não estiverem listados neste
arquivo hibernate-objectGrid.xml utilizarão a configuração padrão.
- hibernate-objectGridDeployment.xml (política de
implementação)
Caminho de arquivo: META-INF/hibernate-objectGridDeployment.xml
Este arquivo é utilizado para customizar a política de implementação. Ao
customizar a política de implementação, se o arquivo hibernate-objectGridDeployment.xml
for fornecido, a política de implementação padrão será descartada. Todos os
valores de atributo da política de implementação serão fornecidos pelo arquivo
hibernate-objectGridDeployment.xml.
- hibernate-objectGrid-client-override.xml (configuração de
substituição ObjectGrid do cliente)
Caminho de arquivo: META-INF/hibernate-objectGrid-client-override.xml
Este arquivo é utilizado para customizar um ObjectGrid do lado do cliente. Por padrão,
o cache do ObjectGrid aplica uma configuração de substituição do cliente padrão que
desativa o cache local. Se o aplicativo requerer um cache perto, ele pode fornecer
este arquivo e especificar numberOfBuckets="xxx".
A substituição do cliente padrão desativa o cache perto ao configurar numberOfBuckets="0".
O cache perto pode estar ativo ao reconfigurar numberOfBuckets com um
valor superior a 0 através de hibernate-objectGrid-client-override.xml.
A maneira como o arquivo hibernate-objectGrid-client-override.xml funciona é similar ao hibernate-objectGrid.xml:
ele substitui ou estende a configuração de substituição do ObjectGrid do cliente padrão.
Dependendo da topologia do
eXtreme Scale configurada, é possível
fornecer qualquer um destes três arquivos XML para customizar essa
topologia.
Para os tipos EMBEDDED e EMBEDDED_PARTITION, é
possível fornecer qualquer um dos três arquivos XML para customizar
o ObjectGrid, a política de implementação e a configuração de
substituição do ObjectGrid cliente.
Para um
REMOTE ObjectGrid, o cache não cria um ObjectGrid dinâmico.
O cache obtém apenas um ObjectGrid do lado do cliente
a partir do serviço do catálogo.
É possível fornecer apenas
um arquivo hibernate-objectGrid-client-override.xml para
customizar a configuração de substituição do ObjectGrid do cliente.
- Opcional: (Apenas configurações remotas) Configure o sistema eXtreme Scale externo se desejar configurar um cache com um tipo de ObjectGrid REMOTE.
É necessário configurar um sistema eXtreme Scale externo se desejar configurar um cache com um tipo de ObjectGrid REMOTE. É necessário ambos os arquivos XML de configuração ObjectGrid e ObjectGridDeployment, que se baseiam no arquivo persistence.xml, para configurar um sistema externo. Para obter exemplos desses arquivos de configuração, consulte Exemplo: Arquivos XML do ObjectGrid Hibernate.
Resultados
Configuração EMBEDDED ou EMBEDDED_PARTITION:
Quando um aplicativo é iniciado, o plug-in detecta ou inicia automaticamente um serviço de catálogo, inicia um servidor de contêiner e conecta os servidores de contêiner no serviço de catálogo. Em seguida, o plug-in se comunica com o contêiner ObjectGrid
e seus equivalentes que estão em execução em outros processos do servidor
de aplicativos que usam a conexão do cliente.
Cada entidade JPA possui um mapa
de apoio independente designado para usar o nome da classe da entidade. Cada BackingMap possui os seguintes
atributos.
- readOnly="false"
- copyKey="false"
- lockStrategy="NONE"
- copyMode="NO_COPY"
Configuração REMOTE:
A política de implementação é especificada separadamente do aplicativo JPA. Um sistema do ObjectGrid
externo possui ambos os processos de serviço de catálogo e servidor de contêiner. É necessário iniciar um serviço de catálogos antes de iniciar servidores de contêiner. Consulte Iniciando Servidores Independentes e Iniciando Servidores de Contêiner para obter mais informações.
O que Fazer Depois
- Desenvolva um aplicativo Hibernate que usa a configuração. Para
obter informações adicionais, consulte
Exemplo: Usando o Plug-in Hibernate para Pré-Carregar Dados no Cache do ObjectGrid.
- Em um ambiente de produção, crie domínios do serviço de catálogo para seus processos criados automaticamente para sua configuração EMBEDDED ou EMBEDDED_PARTITION.
- Ambiente independente:
Se
você não estiver executando seus servidores dentro de um processo do WebSphere Application Server, os hosts e as portas do domínio do serviço de catálogo serão especificados usando o arquivo de propriedades
denominado objectGridServer.properties. Este arquivo deve ser
armazenado no caminho de classe do aplicativo e ter a propriedade catalogServiceEndPoints definida. O domínio de serviço de catálogo é iniciado independentemente dos processos do aplicativo e deve ser iniciado antes que os processos do aplicativo sejam iniciados.
O formato do arquivo objectGridServer.properties é:
catalogServiceEndPoints=<hostname1>:<port1>,<hostname2>:<port2>
- Ambiente do WebSphere Application Server:
Se você
estiver executando dentro de um processo do WebSphere Application Server, o plug-in do cache JPA conectará automaticamente ao serviço de catálogo ou ao domínio do serviço de catálogo definido
para a célula do WebSphere Application Server.
- Quando estiver usando o valor de ObjectGridType EMBEDDED ou EMBEDDED_PARTITION
em um ambiente do Java SE,
use o método System.exit(0) no final do programa para parar
o servidor eXtreme Scale integrado. Caso contrário, o
programa poderá parecer não estar respondendo.