SlideShare uma empresa Scribd logo
Dicas e Truques sobre performance
      em Java EE, JPA e JSF

Alberto Lemos (Dr. Spock)      Danival Taffarel Calegari
 Senior Software Architect   Arquiteto na MATERA Systems
   Globalcode Instructor          Instrutor Globalcode




                                        Globalcode – Open4education
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
Objetivo




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



                             Globalcode – Open4education
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
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
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
Lazy vs Eager

Problema do N + 1




                    Globalcode – Open4education
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
Lazy vs Eager




                Globalcode – Open4education
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
Lazy vs Eager

          cat1




          cat2


          cat3


          cat4



                 Globalcode – Open4education
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
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
Cache




        Globalcode – Open4education
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
Cache




        Globalcode – Open4education
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
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
O Problema
 DAO + JDBC => abrir/fechar conexão;
 DAO + Persistence Context => abrir/fechar sessão;




 LazyInitializationException!
                                    Globalcode – Open4education
Solução antiga
  OpenSessionInViewFilter Design Pattern;




  Novos problemas!

                                   Globalcode – Open4education
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
Web 1.0
 Aplicações Web orientadas a requisições;




                                    Globalcode – Open4education
Web 2.0
 Aplicações Web orientadas a AJAX;




                                     Globalcode – Open4education
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
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
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
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
Estratégias de Web UI
 Dica: Uso de componentes com suporte a “lazy
 loading” via Ajax;




                                 Globalcode – Open4education
Estratégias de Web UI
 Dica: Uso de componentes com suporte a “lazy
 loading” via Ajax;




                                 Globalcode – Open4education
Estratégias de Web UI
 Dica: Uso de componentes com suporte a “lazy
 loading” via Ajax;




                                 Globalcode – Open4education
Aplicação Exemplo
 As dicas e truques são demonstradas numa
 aplicação exemplo;
 Download disponível:
 http://sourceforge.net/projects/j1catalogproto2/




                                    Globalcode – Open4education
Obrigado!

Alberto Lemos (Dr. Spock)       Danival Taffarel Calegari
http://www.globalcode.com.br/   http://www.matera.com/
spock@globalcode.com.br         danival@globalcode.com.br
http://twitter.com/drspockbr    http://twitter.com/danivaltc




                                             Globalcode – Open4education

Mais conteúdo relacionado

PDF
Apresentação Java Web - Jsf+Hibernate
PDF
Apostila Java Web com JSF, JPA e Primefaces
PDF
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
PPTX
Curso Java Web (JAVA, JSF, JPA)
PPTX
Curso jsf
PPTX
Jsf com hibernate, spring security e maven
PDF
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
PDF
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Apresentação Java Web - Jsf+Hibernate
Apostila Java Web com JSF, JPA e Primefaces
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Curso Java Web (JAVA, JSF, JPA)
Curso jsf
Jsf com hibernate, spring security e maven
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa

Mais procurados (19)

PDF
Construindo aplicações web java com netbeans
PDF
Web Scale Data Management
PPTX
PHP 10 CodeIgniter
PDF
Programação Desktop: Uma abordagem com Java
PDF
Bancos de dados e jdbc java para desenvolvimento web
PDF
Como escolher o Framework Java para web?
PPT
Desenvolvimento web em java com JSP e Servlets
PDF
Java Web - MVC básico com JSP e Servlets
PDF
Java Web, o Tutorial
PDF
Aula parte 1 de JSF 2.2
PPTX
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
PDF
Java Web 1 Introducao
PPT
Jsp+Jdbc+Servlets
PDF
JSF com Primefaces
PDF
PHP Turbinado com CodeIgniter - Conisli 2011
ODP
Introdução ao framework CodeIgniter
PDF
Minicurso Java Server Faces
PPT
Java Web Dev Introdução
PDF
Curso Java (Parte 8) Web Service REST
Construindo aplicações web java com netbeans
Web Scale Data Management
PHP 10 CodeIgniter
Programação Desktop: Uma abordagem com Java
Bancos de dados e jdbc java para desenvolvimento web
Como escolher o Framework Java para web?
Desenvolvimento web em java com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Java Web, o Tutorial
Aula parte 1 de JSF 2.2
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Java Web 1 Introducao
Jsp+Jdbc+Servlets
JSF com Primefaces
PHP Turbinado com CodeIgniter - Conisli 2011
Introdução ao framework CodeIgniter
Minicurso Java Server Faces
Java Web Dev Introdução
Curso Java (Parte 8) Web Service REST
Anúncio

Destaque (14)

PPS
Reverse Ajax Dwr
PDF
Os 10 maus hábitos dos desenvolvedores JSF
PDF
Viber - Como usa-lo em seu Smartphone
PDF
Api First - A Abordagem
PDF
JSF 2 Components JustJava2011
PDF
MongoDB outras alternativas de persistência
PDF
Graficos com PrimeFaces
PDF
REST com JSF 2 e HTML 5
PDF
Rest web services com Java
PDF
Persistência Java: Hibernate e JPA
PDF
Whatsapp - como usá-lo em seu Smartphone
PDF
Persistência com JPA usando o NetBeans 7
KEY
Construindo uma arquitetura com REST, HTML 5 e JSF 2
ODP
Arquitetura MVC, JavaBeans e DAO
Reverse Ajax Dwr
Os 10 maus hábitos dos desenvolvedores JSF
Viber - Como usa-lo em seu Smartphone
Api First - A Abordagem
JSF 2 Components JustJava2011
MongoDB outras alternativas de persistência
Graficos com PrimeFaces
REST com JSF 2 e HTML 5
Rest web services com Java
Persistência Java: Hibernate e JPA
Whatsapp - como usá-lo em seu Smartphone
Persistência com JPA usando o NetBeans 7
Construindo uma arquitetura com REST, HTML 5 e JSF 2
Arquitetura MVC, JavaBeans e DAO
Anúncio

Semelhante a Dicas e truques sobre performance em JavaEE, JPA e JSF (20)

PDF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
PDF
Arquiteturas Java EE no Google App Engine
PPT
Google AppEngine and JEE
PDF
Richfaces 4 - Desenvolvimento JSF mais rico
PDF
JSF 2.0 e ScrumToys
PDF
Implementando aplicativos Web com JSF
PDF
JSF 2.0 e ScrumToys
PDF
JSF 2 - Java "Super" Faces
PPT
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
PDF
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
PPT
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
PDF
Interface é código: aprimorando a experiência do usuário no front e no back-end
PDF
TDC 2008 JBoss Seam
PPT
ORM - TDC Porto Alegre 2014 Trilha .NET
PPT
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
PDF
Desenvolvimento RIA com GWT e Spring
PDF
Introducao Spring ROO
PPT
Organizando a casa. o front end do jeitinho que a mamãe gosta
ODP
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
PDF
Introdução a Plataforma Java EE
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Arquiteturas Java EE no Google App Engine
Google AppEngine and JEE
Richfaces 4 - Desenvolvimento JSF mais rico
JSF 2.0 e ScrumToys
Implementando aplicativos Web com JSF
JSF 2.0 e ScrumToys
JSF 2 - Java "Super" Faces
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
Interface é código: aprimorando a experiência do usuário no front e no back-end
TDC 2008 JBoss Seam
ORM - TDC Porto Alegre 2014 Trilha .NET
Akka 2.0 + MongoDB - Caso de sucesso no Ecommerce Turismo.
Desenvolvimento RIA com GWT e Spring
Introducao Spring ROO
Organizando a casa. o front end do jeitinho que a mamãe gosta
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Introdução a Plataforma Java EE

Mais de Dr. Spock (20)

PDF
Improving Batch-Process Testing Techniques with a Domain-Specific Language
PDF
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
PDF
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
PDF
Novidades do JSF: Um tour completo no JSF 2.2
KEY
Workshop de Introdução ao ScrumToys
PDF
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
PDF
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
PDF
TDC2011: Spring Mobile
PDF
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
PDF
TDC2011: Arquitetura de Software Enterprise
PDF
TDC2011: Java EE 6 & Azure
PDF
Spring Framework no desenvolvimento móvel
PDF
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
PDF
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
PDF
Computação Física com Arduino, Program-ME e Java
PDF
Spring 3: Uma Plataforma além do Framework
PDF
Produtividade com Spring Roo no Google App Engine
PDF
Criando uma Aplicação Web com Spring Roo em 5 minutos!
PDF
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
PDF
Computação Física com Arduino/Program-ME e a Plataforma Java
Improving Batch-Process Testing Techniques with a Domain-Specific Language
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Novidades do JSF: Um tour completo no JSF 2.2
Workshop de Introdução ao ScrumToys
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2011: Spring Mobile
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Arquitetura de Software Enterprise
TDC2011: Java EE 6 & Azure
Spring Framework no desenvolvimento móvel
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Computação Física com Arduino, Program-ME e Java
Spring 3: Uma Plataforma além do Framework
Produtividade com Spring Roo no Google App Engine
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Computação Física com Arduino/Program-ME e a Plataforma Java

Último (19)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Processos na gestão de transportes, TM100 Col18
Apple Pippin Uma breve introdução. - David Glotz
Aula04-Academia Heri- Tecnologia Geral 2025
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Aula 18 - Manipulacao De Arquivos python
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...

Dicas e truques sobre performance em JavaEE, JPA e JSF

  • 1. Dicas e Truques sobre performance em Java EE, JPA e JSF Alberto 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 Eager Problema 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 Calegari http://www.globalcode.com.br/ http://www.matera.com/ spock@globalcode.com.br danival@globalcode.com.br http://twitter.com/drspockbr http://twitter.com/danivaltc Globalcode – Open4education