• Save
Dicas e truques sobre performance em JavaEE, JPA e JSF
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Dicas e truques sobre performance em JavaEE, JPA e JSF

  • 9,639 views
Uploaded on

Slides da apresentação realizada no JavaOne Brasil 2010. Apresenta algumas dicas e truques para evitar problemas de performance em aplicações Web baseadas em Ajax, JSF e JPA.

Slides da apresentação realizada no JavaOne Brasil 2010. Apresenta algumas dicas e truques para evitar problemas de performance em aplicações Web baseadas em Ajax, JSF e JPA.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
9,639
On Slideshare
4,616
From Embeds
5,023
Number of Embeds
10

Actions

Shares
Downloads
0
Comments
1
Likes
6

Embeds 5,023

http://blog.spock.com.br 4,889
https://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com 43
http://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com 41
https://5883420992247205758_580425f0f3c1842c393c1954cad64471d2ab773d.blogspot.com 28
http://5883420992247205758_580425f0f3c1842c393c1954cad64471d2ab773d.blogspot.com 10
http://translate.googleusercontent.com 6
http://webcache.googleusercontent.com 2
http://twitter.com 2
http://131.253.14.98 1
http://theoldreader.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Dicas e Truques sobre performance em Java EE, JPA e JSFAlberto Lemos (Dr. Spock) Danival Taffarel Calegari Senior Software Architect Arquiteto na MATERA Systems Globalcode Instructor Instrutor Globalcode Globalcode – Open4education
  • 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. Objetivo“Apresentar algumas dicas e truques para o desenvolvimento de aplicações web com JSF, AJAX e JPA.” Globalcode – Open4education
  • 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. 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. Lazy vs Eager Estratégias para recuperar os objetos “do outro lado” de um relacionamento Lazy: só recupera um dado quando necessário. Eager: recupera o dado sempre. Globalcode – Open4education
  • 7. Lazy vs EagerProblema do N + 1 Globalcode – Open4education
  • 8. 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
  • 9. Lazy vs Eager Globalcode – Open4education
  • 10. 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 nativos 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
  • 11. Lazy vs Eager cat1 cat2 cat3 cat4 Globalcode – Open4education
  • 12. 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
  • 13. Cache First level cache Enquanto o EntityManager estiver aberto, ele armazena os objetos carregados por ele; Este cache é apagado quando o método clear é chamado. Second level cache Armazena os objetos por EntityManagerFactory; Cache “por aplicação”. Globalcode – Open4education
  • 14. Cache Globalcode – Open4education
  • 15. 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. Executar um “select c from Categoria c” antes da consulta por produtos. Recomendado em caso de entidades com complexidade de carga grande (pode-se usar join fetch). Globalcode – Open4education
  • 16. Cache Globalcode – Open4education
  • 17. 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
  • 18. 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
  • 19. O Problema DAO + JDBC => abrir/fechar conexão; DAO + Persistence Context => abrir/fechar sessão; LazyInitializationException! Globalcode – Open4education
  • 20. Solução antiga OpenSessionInViewFilter Design Pattern; Novos problemas! Globalcode – Open4education
  • 21. Novos Problemas OpenSessionInViewFilter Design Pattern; 1st REQUEST 2nd REQUEST Nth REQUEST Cada requisição usa um contexto de persistência diferente; Entidades na sessão web podem lançar exceções; LazyInitializationException! Globalcode – Open4education
  • 22. Web 1.0 Aplicações Web orientadas a requisições; Globalcode – Open4education
  • 23. Web 2.0 Aplicações Web orientadas a AJAX; Globalcode – Open4education
  • 24. 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
  • 25. Estratégias de Web UI Dica: Manter o contexto de persistência no escopo view ou conversation; EntityManager permanece aberto por um tempo controlado; Globalcode – Open4education
  • 26. 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
  • 27. Estratégias de Web UI Dica: Integrar View Helper com o serviço de persistência; Implementação de List (Coleções) 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). Globalcode – Open4education
  • 28. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  • 29. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  • 30. Estratégias de Web UI Dica: Uso de componentes com suporte a “lazy loading” via Ajax; Globalcode – Open4education
  • 31. Aplicação Exemplo As dicas e truques são demonstradas numa aplicação exemplo; Download disponível: http://sourceforge.net/projects/j1catalogproto2/ Globalcode – Open4education
  • 32. Obrigado!Alberto Lemos (Dr. Spock) Danival Taffarel Calegarihttp://www.globalcode.com.br/ http://www.matera.com/spock@globalcode.com.br danival@globalcode.com.brhttp://twitter.com/drspockbr http://twitter.com/danivaltc Globalcode – Open4education