Configurando o Plug-in de Cache do Hibernate

É possível ativar o cache para usar o plug-in de cache do Hibernate ao especificar arquivos de propriedades.

Antes de Iniciar

Procedimento

  1. 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.

  2. 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.
  3. 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.

  4. 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