Successfully reported this slideshow.

Dicas e Truques sobre Performance em Java EE, JPA e JSF

14

Share

Dicas e Truques sobre performance
      em Java EE, JPA e JSF
Alberto Lemos (Dr. Spock)    Danival Taffarel Calegari
   In...
Agenda
 Motivação
 Estratégias de recuperação de dados
   Lazy vs Eager
   Cache
 Estratégias de design de web UI
   Escop...
Objetivo




   “Apresentar algumas dicas para o
desenvolvimento de aplicações web com
           JSF, Ajax e JPA”



    ...

YouTube videos are no longer supported on SlideShare

View original on YouTube

Loading in …3
×
1 of 23
1 of 23

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Dicas e Truques sobre Performance em Java EE, JPA e JSF

  1. 1. Dicas e Truques sobre performance em Java EE, JPA e JSF Alberto Lemos (Dr. Spock) Danival Taffarel Calegari Instrutor Globalcode Instrutor Globalcode Senior Software Architect Senior Software Architect Globalcode – Open4education
  2. 2. Agenda Motivação Estratégias de recuperação de dados Lazy vs Eager Cache Estratégias de design de web UI Escopo de conversação Uso de lazy UI components View Helper + serviço de pesistência Globalcode – Open4education
  3. 3. Objetivo “Apresentar algumas dicas para o desenvolvimento de aplicações web com JSF, Ajax e JPA” Globalcode – Open4education
  4. 4. Motivação JavaServer Faces (JSF) representa uma mudança de paradigma de desenvolvimento Web com Java EE; Estabelece modelo de componentes UI na web; JSF evoluiu! JSF 1.x (sem AJAX) => Orientado a requisições JSF 1.x + lib AJAX => Orientado a eventos JSF 2.x => Orientado a eventos Necessário evoluir técnicas de desenvolvimento nas camada de apresentação e persistência! Globalcode – Open4education
  5. 5. Agenda Motivação Estratégias de recuperação de dados Lazy vs Eager Cache Estratégias de design de web UI Escopo de conversação Uso de lazy UI components View Helper + serviço de pesistência Globalcode – Open4education
  6. 6. Lazy vs Eager Lazy: só recupera um dado quando necessário. Eager: recupera o dado sempre. Globalcode – Open4education
  7. 7. Lazy vs Eager Dica: O JPA permite que a mudança de lazy para eager seja feita no JPQL; select distinct c from Categoria c join fetch c.produtos Faz um único SELECT no banco de dados; O join fetch resolve o problema do N+1; Deve-se usar distinct para evitar replicação de resultados; Causa problemas com paginação em banco de dados. Globalcode – Open4education
  8. 8. Lazy vs Eager Dica: Procure fazer paginação em banco de dados usando estratégia lazy; Use os métodos setFirstResult e setMaxResults da Query. O provedor JPA vai usar comandos de banco de dados para limitar a consulta; O uso de join fetch para relacionamentos 1:N provoca problemas de desempenho e de memória. WARN: firstResult/maxResults specified with collection fetch; applying in memory! Globalcode – Open4education
  9. 9. Lazy vs Eager Dica: Procure usar eager quando sempre for processar todos os dados de uma vez; Uma situação comum é geração de relatórios. Cuidado com o uso de memória; Faça uma consulta prévia para recuperar somente os ids e faça várias consultas com in; Chame o método clear do EntityManager para remover os objetos já utilizados da memória. Globalcode – Open4education
  10. 10. Cache Cache de primeiro nível Enquanto o EntityManager estiver aberto, ele armazena os objetos carregados por ele; Este cache é apagado quando o método clear é chamado. Cache de segundo nível Armazena os objetos por EntityManagerFactory; Cache “por aplicação”. Globalcode – Open4education
  11. 11. Cache EntityManagerFactory Cache nível 2 EntityManager EntityManager EntityManager Cache nível 1 Cache nível 1 Cache nível 1 Globalcode – Open4education
  12. 12. Cache Truque: Faça uma carga prévia das entidades relacionadas no cache de primeiro nível antes da consulta principal; Consultas a objetos que possuem relacionamentos N:1 com entidades com um número pequeno de instâncias. Exemplo: Buscar produtos com preço menor que x. Se existirem 200 categorias, a estratégia lazy irá fazer 200 consultas na tabela de categorias; Executar um “select c from Categoria c” antes da consulta por produtos. Globalcode – Open4education
  13. 13. Cache Dica: Use cache de segundo nível para diminuir o consumo de memória e melhorar o desempenho; Procure colocar entidades alteradas com pouca frequência; Caso alguma aplicação externa altere o banco de dados, os dados das entidades em cache de segundo nível ficam desatualizados. Procure colocar um tempo máximo de validade para os dados. Globalcode – Open4education
  14. 14. Agenda Motivação Estratégias de recuperação de dados Lazy vs Eager Cache Estratégias de design de web UI Escopo de conversação Uso de lazy UI components View Helper + serviço de pesistência Globalcode – Open4education
  15. 15. Estratégias de Web UI Dica: Aplicar o escopo View ou Conversation; Evita o uso da Session para objetos com tempo de vida menor; Geralmente o tempo de vida é gerenciado pelo container mediante configurações (Anotações ou XML); Globalcode – Open4education
  16. 16. Estratégias de Web UI Dica: Manter o contexto de persistência no escopo view ou conversation; EntityManager permanecem abertos por um tempo controlado; Globalcode – Open4education
  17. 17. Estratégias de Web UI Dica: Manter o contexto de persistência no escopo view ou conversation; EntityManager permanecem abertos por um tempo controlado; Viabiliza cache de 1º nível; Elimina erros de LazyInitializationException; Viabiliza paginação na camada de apresentação integrado à camada de persistência; Cuidado: Tamanho do cache de 1º nível para conversação de longa duração. Globalcode – Open4education
  18. 18. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  19. 19. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  20. 20. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  21. 21. Estratégias de Web UI Dica: Integrar View Helper com o serviço de persistência; Implementação de List recebendo Query (JPA); Implementação de DataModel (JSF) recebendo Query; Implementação de ExtendedTableDataModel (Richfaces) recebendo EntityManager; Paginação: Use setFirstResult() e setMaxResults(), mas cuidado com o Earger! Ordenação e Filtro: Use CriteriaBuilder (JPA). Vídeo demo: 001 Globalcode – Open4education
  22. 22. Alberto Lemos (Dr. Spock) spock@globalcode.com.br http://twitter.com/drspockbr Danival Taffarel Calegari danival@globalcode.com.br Globalcode – Open4education

×