SlideShare uma empresa Scribd logo
1 de 32
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

Mais procurados

Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaRosicleia Frasson
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento websilvio_sas
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Rafael Oliveira
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniterAnderson Gonçalves
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server FacesJoão Longo
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 

Mais procurados (19)

Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
 
Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2
 
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Jsp+Jdbc+Servlets
Jsp+Jdbc+ServletsJsp+Jdbc+Servlets
Jsp+Jdbc+Servlets
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniter
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server Faces
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 

Destaque

Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFRafael Ponte
 
Viber - Como usa-lo em seu Smartphone
Viber - Como usa-lo em seu SmartphoneViber - Como usa-lo em seu Smartphone
Viber - Como usa-lo em seu SmartphoneBruno Paulino
 
Api First - A Abordagem
Api First - A AbordagemApi First - A Abordagem
Api First - A AbordagemBruno Paulino
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011Eder Magalhães
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaEder Magalhães
 
Graficos com PrimeFaces
Graficos com PrimeFacesGraficos com PrimeFaces
Graficos com PrimeFacesBruno Paulino
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPACaelum
 
Whatsapp - como usá-lo em seu Smartphone
Whatsapp - como usá-lo em seu SmartphoneWhatsapp - como usá-lo em seu Smartphone
Whatsapp - como usá-lo em seu SmartphoneBruno Paulino
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Raphael Adrien
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOLeonardo Sousa
 

Destaque (14)

Reverse Ajax Dwr
Reverse Ajax DwrReverse Ajax Dwr
Reverse Ajax Dwr
 
Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSF
 
Viber - Como usa-lo em seu Smartphone
Viber - Como usa-lo em seu SmartphoneViber - Como usa-lo em seu Smartphone
Viber - Como usa-lo em seu Smartphone
 
Api First - A Abordagem
Api First - A AbordagemApi First - A Abordagem
Api First - A Abordagem
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
Graficos com PrimeFaces
Graficos com PrimeFacesGraficos com PrimeFaces
Graficos com PrimeFaces
 
REST com JSF 2 e HTML 5
REST com JSF 2 e HTML 5REST com JSF 2 e HTML 5
REST com JSF 2 e HTML 5
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPAPersistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
 
Whatsapp - como usá-lo em seu Smartphone
Whatsapp - como usá-lo em seu SmartphoneWhatsapp - como usá-lo em seu Smartphone
Whatsapp - como usá-lo em seu Smartphone
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAO
 

Semelhante a Dicas JPA JSF

Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBDanival Calegari
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?tdc-globalcode
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEERafael Nunes
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaJohnathan Cardoso
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...tdc-globalcode
 
Java enterprise - testcontainers
Java enterprise - testcontainersJava enterprise - testcontainers
Java enterprise - testcontainersSandro Giacomozzi
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 

Semelhante a Dicas JPA JSF (20)

Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEE
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gosta
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
TDC 2012 - JDF
TDC 2012 - JDFTDC 2012 - JDF
TDC 2012 - JDF
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...
TDC2018SP | Trilha Java Enterprise - Facilitando os testes de integracao com ...
 
Java enterprise - testcontainers
Java enterprise - testcontainersJava enterprise - testcontainers
Java enterprise - testcontainers
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 

Mais de Dr. Spock

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

Mais de Dr. Spock (20)

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

Dicas JPA 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