SlideShare a Scribd company logo
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

More Related Content

PPTX
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
PDF
JDK versions and OpenJDK
PDF
6 Reasons to Use Ruby on Rails for Your Startup
PDF
It's a jdk jungle out there - JDK 11 and OpenJDK 11
PDF
JDK 10 Java Module System
PPT
Core java slides
PPTX
java web framework standard.20180412
PDF
Java Coaching in Hyderabad introduction
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JDK versions and OpenJDK
6 Reasons to Use Ruby on Rails for Your Startup
It's a jdk jungle out there - JDK 11 and OpenJDK 11
JDK 10 Java Module System
Core java slides
java web framework standard.20180412
Java Coaching in Hyderabad introduction

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

PDF
Net Beans61 Platform
PDF
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
PDF
GraphQL Advanced
PDF
Modern web application development with java ee 7
DOCX
sample1
PDF
JDK 8 and JDK 8 Updates in OpenJDK
DOC
KiranGara_JEE_7Yrs
DOCX
DOC
Rishabha singhcv
PPTX
Opendaylight SDN Controller
PDF
Enhancing Website and Application Testing with Java Scrapers.pdf
PPTX
Building and managing applications fast for IBM i
PDF
Cakephp manual-11
PPT
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
DOC
Bala Sr Java Developer
PPTX
Vue.js Use Cases
PDF
Getting Started with Selenium
PDF
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
PDF
Building-with-React-Native-Dont-Make-These-Mistakes.pdf
DOC
Krishnagopal Thogiti_Java
Net Beans61 Platform
Tools and Recipes to Replatform Monolithic Apps to Modern Cloud Environments
GraphQL Advanced
Modern web application development with java ee 7
sample1
JDK 8 and JDK 8 Updates in OpenJDK
KiranGara_JEE_7Yrs
Rishabha singhcv
Opendaylight SDN Controller
Enhancing Website and Application Testing with Java Scrapers.pdf
Building and managing applications fast for IBM i
Cakephp manual-11
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
Bala Sr Java Developer
Vue.js Use Cases
Getting Started with Selenium
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
Building-with-React-Native-Dont-Make-These-Mistakes.pdf
Krishnagopal Thogiti_Java
Ad

More from 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
Dicas e truques sobre performance em JavaEE, JPA e JSF
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
Dicas e Truques sobre Performance em Java EE, JPA e JSF
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
Dicas e truques sobre performance em JavaEE, JPA e JSF
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
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Ad

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Encapsulation theory and applications.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Encapsulation theory and applications.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Electronic commerce courselecture one. Pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Chapter 3 Spatial Domain Image Processing.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Spectroscopy.pptx food analysis technology
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Mobile App Security Testing_ A Comprehensive Guide.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Understanding_Digital_Forensics_Presentation.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Reach Out and Touch Someone: Haptics and Empathic Computing

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