Ir para o conteúdo

 Voltar a MDArte Suporte
Tela cheia

Problemas com Hibernate

16 de Agosto de 2012, 13:35 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 43 vezes

Prezados,

Às vezes observo no console do JBOSS que o Hibernate realiza muitas consultas ao BD em sequência. Tal evento costuma ser raro. Porém recentemente observei que, num dos casos de uso do sistema em que trabalho, o Hibernate vem disparando muitas vezes.

Ex.: Em situação normal, preencho um formulário e realizo uma consulta. Recebo no console a mensagem do Hibernate dizendo que tal consulta foi feita. Nessa situação anômala, aparecem muitas mensagens seguidas do Hibernate, repetindo a mesma consulta, n vezes. Isso gera lentidão no sistema, e uma consulta que poderia ser feita em alguns poucos segundos chega a demorar minutos para ser concluída.

Já revisei o código da aplicação, não encontrei problemas que possam resultar nessa anomalia. Já ocorreu algo parecido com alguém? Tem alguma solução? O problema pode ser em outra ferramenta, que não o Hibernate?

Desde já agradeço,

 

Raphael

Autor: Raphael Sant'Anna


33 comentários

  • 524d045200366b8d318f898ff5377ab3?only path=false&size=50&d=404Rodrigo Salvador Monteiro(usuário não autenticado)
    16 de Agosto de 2012, 14:03

     

    Ola Raphael,

    tivemos um problema semelhante ao seu em função do mau dimensionamento do cache do hibernate. Quando o numero de instancias por classe esta mal dimensionado, o hibernate em algumas situacoes assume que os objetos de uma colecao serão encontrados no cache (o que somente é verificado na tentativa efetiva de acessar o objeto) e ao descobrir que o mesmo já foi removido executa uma consulta especifica para recuperar apenas o objeto em questao. O resultado eh que ao inves de disparar uma unica consulta para recuperar toda a colecao, o hibernate acaba disparando consultas individuais para recuperar cada um dos objetos da mesma nao encontrados no cache. Para verificar se esse eh o seu caso, basta desativar o uso do cache do hibernate atraves da troca de algumas propriedades booleanas do cartucho do hibernate presentes no arquivo andromda.xml. Se ao desativar o cache esse comportamento parar de ocorrer, voce estara com o problema acima e nesse caso duas acoes podem ser tomadas:

    1) Simplesmente deixar o cache desabilitado. Parece ruim, mas efetivamente o sistema tera uma performance melhor do que a anterior. Usar o cache mal dimensionado e pior do que nao usa-lo.

    2) Analisar a aplicacao em questao para fazer um dimensionamento adequado do cache. Isso exige um esforço razoável dependendo do tamanho da sua camada de domínio.

    De qualquer forma, se esse for mesmo o problema, nada impede que voce siga inicialmente a primeira solucao e caso julgue adequado, pode num momento propicio migrar para a segunda solucao.

    Depois de testar mande noticias,

    Ats,

    Rodrigo.

    PS: As propriedades a serem alteradas para false sao: hibernateEnableCache, hibernateEnableSecondLevelCache, hibernateUseQueryCache. Se alguma dessas propriedades nao estiver definida no namespace hibernate do arquivo andromda.xml voce tera que incluir a definicao da mesma nessa arquivo.

     

    • 020cd8ff973c2160221c6ef7ff498d81?only path=false&size=50&d=404Filipe Braida do Carmo(usuário não autenticado)
      16 de Agosto de 2012, 14:09

       

      Salvador,

       esse problema também poderia ser o de navegação? 

      Att,

      FIlipe Braida 

      • 524d045200366b8d318f898ff5377ab3?only path=false&size=50&d=404Rodrigo Salvador Monteiro(usuário não autenticado)
        16 de Agosto de 2012, 15:45

         

        Oi Braida,

        sim, a navegação se não estiver setada de forma adequada também pode gerar, dependendo do dado a ser acessado, um conjunto grande de consultas para recuperação de objetos. Entretanto, esse comportamento em função da navegação é deterministico, ou seja, ao consultar o mesmo dado a aplicação deveria se comportar sempre da mesma forma. Pelo que eu entendi do problema, o comportamento para ser de certa forma aleatório, o que me pareceu poder ocorrer em função do estado atual do cache. Bom... de qualquer forma so investigando um pouco. Sugiro como primeira tentativa desabilitar o cache como descrito no post anterior. Ah... um lembrete importante: Apos alterar as propriedades de cache indicadas, pelo menos o modelo com a camada de dominio da aplicacao precisa ser trnasformado atraves do maven mda.

        Ats,

        Rodrigo.

Checklist para o projeto de interfaces

14 de Dezembro de 2011, 16:00, por Desconhecido

Este é um roteiro básico para verificação dos elementos interface para desenharmos um projeto. Vale lembrar que os projetos do MDArte são basicamente em CRUD (Create, Retrieve, Update e Delete) e não sistemas CMS com outras divisões e exibições. Cada um pode ter a sua lista e seria legal enviar comentários com adendos para ficar cada vez mais completa e padronizada.



Monthly archive for agosto 2010 CSS, Plugins, jQuery Flexigrid – Tabelas inteligentes com CSS e jQuery

14 de Dezembro de 2011, 15:46, por Desconhecido

Essa semana aqui no projeto, estávamos procurando uma solução para algumas tabelas que extrapolavam o tamanho da



Auto-Grid 960

14 de Dezembro de 2011, 15:41, por Desconhecido

Essa dica vai pra quem não tem muita paciência de configurar um js de grid 960 direto no seu código para ver o alinhamento de seus elementos.



Título na tabela do displayTag

14 de Dezembro de 2011, 15:39, por Desconhecido

O MDArte utiliza o displayTag e é possível customiza-lo de diversas maneiras. Uma coisa legal é colocar um título que só será exibido quando a consulta for executada.



CSS3:Textos com sombras

14 de Dezembro de 2011, 15:12, por Desconhecido

Se voce aplicar a propriedade “box-shadow” em um texto, a mesma vai ser aplicada em sua caixa (box). Para isso foi criada a propriedade “text-shadow”.
Seu uso é o seguinte: