SlideShare una empresa de Scribd logo
1 de 28
Performance Tips and Tricks: Java
  EE, Java Persistence API, and
        JavaServer Faces
Alberto Lemos (Dr. Spock)    Danival Taffarel Calegari
 Senior Software Architect   MATERA Systems Architect
   Globalcode Instructor       Globalcode Instructor




                                       Globalcode – Open4education
Agenda
 Motivation
 Data recovery strategies
   Lazy vs Eager
   Cache
 Web UI Design Strategies
   Conversation Scope
   View Helper + Persistence Service
   Lazy UI Components



                                       Globalcode – Open4education
Objective




  “Present some tips and tricks on web
application development with JSF, Ajax,
               and JPA”



                             Globalcode – Open4education
Motivation
 JavaServer Faces (JSF) is a paradigm change in
 Web development with Java EE;
 It establishes a model for web UI components.
 JSF evolved!
   JSF 1.x (without AJAX) => Ineffective event oriented
   JSF 1.x + AJAX lib => Event oriented
   JSF 2.x => Event oriented
 It's necessary to evolve the development
 techniques on presentation and persistence layers!

                                            Globalcode – Open4education
Agenda
 Motivation
 Data recovery strategies
   Lazy vs Eager
   Cache
 Web UI Design Strategies
   Conversation Scope
   View Helper + Persistence Service
   Lazy UI Components



                                       Globalcode – Open4education
Lazy vs Eager
 Strategies to handle the entity relationships;
 Lazy: it fetches data on demand;
 Eager: it always fetches data.




                                        Globalcode – Open4education
Lazy vs Eager
 Tip: JPA allows for a change from lazy to eager
 using the JP-QL;
   select distinct c from Categoria c join fetch c.produtos
 It runs only one SELECT in the database;
 Join fetch solves the N+1 problem;
 Distinct should be used to avoid duplicated
 results;
 Note: this may cause problems with database
 pagination.

                                            Globalcode – Open4education
Lazy vs Eager
 Tip: Try to paginate in database using lazy
 strategy;
   Use the setFirstResult and setMaxResults methods by
   Query.
 The JPA provider will use native database
 commands to limit the query results;
 Beware: join fetch for 1:N relationships causes
 performance and memory problems.
   WARN: firstResult/maxResults specified with collection
   fetch; applying in memory!

                                           Globalcode – Open4education
Lazy vs Eager
 Tip: Try to use eager whenever bulk processing
 data;
   One common situation is report generation.
 Be careful with memory use;
   Do a previous query to get the ids and limit the results
   with an in clause;
   Use the clear method from EntityManager to remove
   processed objects from memory.




                                             Globalcode – Open4education
Cache
 First level cache
   While the EntityManager is open, it maitains the
   references for all objects loaded by it;
   This cache is erased when the clear method is called.
 Second level cache
   Maintains object references per EntityManagerFactory;
   It is a per-application cache.




                                           Globalcode – Open4education
Cache




        Globalcode – Open4education
Cache
 Trick: By loading related entities into first level
 cache before the main query, performance will
 be greatly improved.
   It can only work with N:1 relationships for entities with a
   small number of instances.
 Example: Fetching products with any filter.
   If there are 200 categories, the lazy strategy should run
   200 queries on the category table;
   Execute a “select c from Category c” before querying for
   products.


                                               Globalcode – Open4education
Cache
 Tip: Use second level cache to save memory
 and to improve performance;
 Choose non-frequent altered entities;
 If an external application changes the database,
 data in the second level cache will become
 outdated.
   Apply a time limit for data expiration.




                                             Globalcode – Open4education
Agenda
 Motivation
 Data recovery strategies
   Lazy vs Eager
   Cache
 Web UI Design Strategies
   Conversation Scope
   View Helper + Persistence Service
   Lazy UI Components



                                       Globalcode – Open4education
The Problem
 DAO + JDBC => open/close connection;
 DAO + Persistence Context => open/close session;




 LazyInitializationException!
                                   Globalcode – Open4education
Old Solution
  OpenSessionInViewFilter Design Pattern;




  New problems!

                                   Globalcode – Open4education
New Problems
 OpenSessionInViewFilter Design Pattern;




 1st REQUEST        2nd REQUEST        Nth REQUEST


 Each request uses a different persistence context;
 Session scoped entities can throw
 LazyInitializationException!

                                      Globalcode – Open4education
Web 1.0
 Request-oriented web applications;




                                      Globalcode – Open4education
Web 2.0
 AJAX-oriented web applications;




                                   Globalcode – Open4education
Web UI Strategies
 Tip: Use the view and conversation scopes;
   Avoid to use the session scope for objects with short
   lifetime;
   Usually the lifetime is managed by the container through
   settings (Annotations or XML);




                                            Globalcode – Open4education
Web UI Strategies
 Tip: Store the persistence context into the view
 scope or conversation scope;
   The EntityManager remains open for a specified time;




                                          Globalcode – Open4education
Web UI Strategies
 Tip: Store the persistence context into the view
 scope or conversation scope;
   The EntityManager remains open for a specified time;
   Enables the 1st level cache;
   Prevents the LazyInitializationException errors;
   Enables paging in the presentation tier Integrated with
   the persistence tier;
   Attention: The 1st level cache can increase for a long
   term conversation scope.



                                             Globalcode – Open4education
Web UI Strategies
 Tip: Integrate the View Helper (pattern) with the
 persistence service (JPA);
   Implement a List (from Collections API) that receives a
   Query object (from JPA);
   Implement a DataModel (from JSF API) that receives a
   Query object;
   Implement an ExtendedTableDataModel (from
   Richfaces API) that receives an EntityManager object;
   Pagination: Use setFirtResult() and setMaxResults().
   Be careful with eager fetching!
   Filter and order by: Use CriteriaBuilder object (from
   JPA).

                                           Globalcode – Open4education
Web UI Strategies
 Tip: Use UI Components that supports “lazy
 loading” via Ajax;




                                   Globalcode – Open4education
Web UI Strategies
 Tip: Use UI Components that supports “lazy
 loading” via Ajax;




                                   Globalcode – Open4education
Web UI Strategies
 Tip: Use UI Components that supports “lazy
 loading” via Ajax;




                                   Globalcode – Open4education
Sample Application
 The tips and tricks are demonstrated by a sample
 application;
 It is avaliable to donwload at:
 http://sourceforge.net/projects/j1catalogproto2/




                                    Globalcode – Open4education
Thank you!

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

Más contenido relacionado

Similar a Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces

KiranGara_JEE_7Yrs
KiranGara_JEE_7YrsKiranGara_JEE_7Yrs
KiranGara_JEE_7Yrs
Kiran Gara
 
Enhancing Website and Application Testing with Java Scrapers.pdf
Enhancing Website and Application Testing with Java Scrapers.pdfEnhancing Website and Application Testing with Java Scrapers.pdf
Enhancing Website and Application Testing with Java Scrapers.pdf
AnanthReddy38
 
Bala Sr Java Developer
Bala  Sr Java DeveloperBala  Sr Java Developer
Bala Sr Java Developer
Java Dev
 
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated RefactoringA Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
Raffi Khatchadourian
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
vstorm83
 

Similar a Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces (20)

Net Beans61 Platform
Net Beans61 PlatformNet Beans61 Platform
Net Beans61 Platform
 
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud EnvironmentsTools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
 
GraphQL Advanced
GraphQL AdvancedGraphQL Advanced
GraphQL Advanced
 
Modern web application development with java ee 7
Modern web application development with java ee 7Modern web application development with java ee 7
Modern web application development with java ee 7
 
sample1
sample1sample1
sample1
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDK
 
KiranGara_JEE_7Yrs
KiranGara_JEE_7YrsKiranGara_JEE_7Yrs
KiranGara_JEE_7Yrs
 
Resume
ResumeResume
Resume
 
Rishabha singhcv
Rishabha singhcvRishabha singhcv
Rishabha singhcv
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
 
Enhancing Website and Application Testing with Java Scrapers.pdf
Enhancing Website and Application Testing with Java Scrapers.pdfEnhancing Website and Application Testing with Java Scrapers.pdf
Enhancing Website and Application Testing with Java Scrapers.pdf
 
Building and managing applications fast for IBM i
Building and managing applications fast for IBM iBuilding and managing applications fast for IBM i
Building and managing applications fast for IBM i
 
Cakephp manual-11
Cakephp manual-11Cakephp manual-11
Cakephp manual-11
 
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
 
Bala Sr Java Developer
Bala  Sr Java DeveloperBala  Sr Java Developer
Bala Sr Java Developer
 
Vue.js Use Cases
Vue.js Use CasesVue.js Use Cases
Vue.js Use Cases
 
Getting Started with Selenium
Getting Started with SeleniumGetting Started with Selenium
Getting Started with Selenium
 
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated RefactoringA Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
 
Krishnagopal Thogiti_Java
Krishnagopal Thogiti_JavaKrishnagopal Thogiti_Java
Krishnagopal Thogiti_Java
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
 

Más de Dr. Spock

Más 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
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
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
 
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
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces

  • 1. Performance Tips and Tricks: Java EE, Java Persistence API, and JavaServer Faces Alberto Lemos (Dr. Spock) Danival Taffarel Calegari Senior Software Architect MATERA Systems Architect Globalcode Instructor Globalcode Instructor Globalcode – Open4education
  • 2. Agenda Motivation Data recovery strategies Lazy vs Eager Cache Web UI Design Strategies Conversation Scope View Helper + Persistence Service Lazy UI Components Globalcode – Open4education
  • 3. Objective “Present some tips and tricks on web application development with JSF, Ajax, and JPA” Globalcode – Open4education
  • 4. Motivation JavaServer Faces (JSF) is a paradigm change in Web development with Java EE; It establishes a model for web UI components. JSF evolved! JSF 1.x (without AJAX) => Ineffective event oriented JSF 1.x + AJAX lib => Event oriented JSF 2.x => Event oriented It's necessary to evolve the development techniques on presentation and persistence layers! Globalcode – Open4education
  • 5. Agenda Motivation Data recovery strategies Lazy vs Eager Cache Web UI Design Strategies Conversation Scope View Helper + Persistence Service Lazy UI Components Globalcode – Open4education
  • 6. Lazy vs Eager Strategies to handle the entity relationships; Lazy: it fetches data on demand; Eager: it always fetches data. Globalcode – Open4education
  • 7. Lazy vs Eager Tip: JPA allows for a change from lazy to eager using the JP-QL; select distinct c from Categoria c join fetch c.produtos It runs only one SELECT in the database; Join fetch solves the N+1 problem; Distinct should be used to avoid duplicated results; Note: this may cause problems with database pagination. Globalcode – Open4education
  • 8. Lazy vs Eager Tip: Try to paginate in database using lazy strategy; Use the setFirstResult and setMaxResults methods by Query. The JPA provider will use native database commands to limit the query results; Beware: join fetch for 1:N relationships causes performance and memory problems. WARN: firstResult/maxResults specified with collection fetch; applying in memory! Globalcode – Open4education
  • 9. Lazy vs Eager Tip: Try to use eager whenever bulk processing data; One common situation is report generation. Be careful with memory use; Do a previous query to get the ids and limit the results with an in clause; Use the clear method from EntityManager to remove processed objects from memory. Globalcode – Open4education
  • 10. Cache First level cache While the EntityManager is open, it maitains the references for all objects loaded by it; This cache is erased when the clear method is called. Second level cache Maintains object references per EntityManagerFactory; It is a per-application cache. Globalcode – Open4education
  • 11. Cache Globalcode – Open4education
  • 12. Cache Trick: By loading related entities into first level cache before the main query, performance will be greatly improved. It can only work with N:1 relationships for entities with a small number of instances. Example: Fetching products with any filter. If there are 200 categories, the lazy strategy should run 200 queries on the category table; Execute a “select c from Category c” before querying for products. Globalcode – Open4education
  • 13. Cache Tip: Use second level cache to save memory and to improve performance; Choose non-frequent altered entities; If an external application changes the database, data in the second level cache will become outdated. Apply a time limit for data expiration. Globalcode – Open4education
  • 14. Agenda Motivation Data recovery strategies Lazy vs Eager Cache Web UI Design Strategies Conversation Scope View Helper + Persistence Service Lazy UI Components Globalcode – Open4education
  • 15. The Problem DAO + JDBC => open/close connection; DAO + Persistence Context => open/close session; LazyInitializationException! Globalcode – Open4education
  • 16. Old Solution OpenSessionInViewFilter Design Pattern; New problems! Globalcode – Open4education
  • 17. New Problems OpenSessionInViewFilter Design Pattern; 1st REQUEST 2nd REQUEST Nth REQUEST Each request uses a different persistence context; Session scoped entities can throw LazyInitializationException! Globalcode – Open4education
  • 18. Web 1.0 Request-oriented web applications; Globalcode – Open4education
  • 19. Web 2.0 AJAX-oriented web applications; Globalcode – Open4education
  • 20. Web UI Strategies Tip: Use the view and conversation scopes; Avoid to use the session scope for objects with short lifetime; Usually the lifetime is managed by the container through settings (Annotations or XML); Globalcode – Open4education
  • 21. Web UI Strategies Tip: Store the persistence context into the view scope or conversation scope; The EntityManager remains open for a specified time; Globalcode – Open4education
  • 22. Web UI Strategies Tip: Store the persistence context into the view scope or conversation scope; The EntityManager remains open for a specified time; Enables the 1st level cache; Prevents the LazyInitializationException errors; Enables paging in the presentation tier Integrated with the persistence tier; Attention: The 1st level cache can increase for a long term conversation scope. Globalcode – Open4education
  • 23. Web UI Strategies Tip: Integrate the View Helper (pattern) with the persistence service (JPA); Implement a List (from Collections API) that receives a Query object (from JPA); Implement a DataModel (from JSF API) that receives a Query object; Implement an ExtendedTableDataModel (from Richfaces API) that receives an EntityManager object; Pagination: Use setFirtResult() and setMaxResults(). Be careful with eager fetching! Filter and order by: Use CriteriaBuilder object (from JPA). Globalcode – Open4education
  • 24. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  • 25. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  • 26. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  • 27. Sample Application The tips and tricks are demonstrated by a sample application; It is avaliable to donwload at: http://sourceforge.net/projects/j1catalogproto2/ Globalcode – Open4education
  • 28. Thank you! 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