Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Performance Tips and Tricks: Java  EE, Java Persistence API, and        JavaServer FacesAlberto Lemos (Dr. Spock)    Daniv...
Agenda Motivation Data recovery strategies   Lazy vs Eager   Cache Web UI Design Strategies   Conversation Scope   View He...
Objective  “Present some tips and tricks on webapplication development with JSF, Ajax,               and JPA”             ...
Motivation JavaServer Faces (JSF) is a paradigm change in Web development with Java EE; It establishes a model for web UI ...
Agenda Motivation Data recovery strategies   Lazy vs Eager   Cache Web UI Design Strategies   Conversation Scope   View He...
Lazy vs Eager Strategies to handle the entity relationships; Lazy: it fetches data on demand; Eager: it always fetches dat...
Lazy vs Eager Tip: JPA allows for a change from lazy to eager using the JP-QL;   select distinct c from Categoria c join f...
Lazy vs Eager Tip: Try to paginate in database using lazy strategy;   Use the setFirstResult and setMaxResults methods by ...
Lazy vs Eager Tip: Try to use eager whenever bulk processing data;   One common situation is report generation. Be careful...
Cache First level cache   While the EntityManager is open, it maitains the   references for all objects loaded by it;   Th...
Cache        Globalcode – Open4education
Cache Trick: By loading related entities into first level cache before the main query, performance will be greatly improve...
Cache Tip: Use second level cache to save memory and to improve performance; Choose non-frequent altered entities; If an e...
Agenda Motivation Data recovery strategies   Lazy vs Eager   Cache Web UI Design Strategies   Conversation Scope   View He...
The Problem DAO + JDBC => open/close connection; DAO + Persistence Context => open/close session; LazyInitializationExcept...
Old Solution  OpenSessionInViewFilter Design Pattern;  New problems!                                   Globalcode – Open4e...
New Problems OpenSessionInViewFilter Design Pattern; 1st REQUEST        2nd REQUEST        Nth REQUEST Each request uses a...
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   lif...
Web UI Strategies Tip: Store the persistence context into the view scope or conversation scope;   The EntityManager remain...
Web UI Strategies Tip: Store the persistence context into the view scope or conversation scope;   The EntityManager remain...
Web UI Strategies Tip: Integrate the View Helper (pattern) with the persistence service (JPA);   Implement a List (from Co...
Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax;                                   Globalco...
Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax;                                   Globalco...
Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax;                                   Globalco...
Sample Application The tips and tricks are demonstrated by a sample application; It is avaliable to donwload at: http://so...
Thank you!Alberto Lemos (Dr. Spock)       Danival Taffarel Calegarihttp://www.globalcode.com.br/   http://www.matera.com/s...
Upcoming SlideShare
Loading in …5
×

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

8,877 views

Published on

Slides from our session for JavaOne USA (San Francisco) 2010.

Published in: Technology
  • Be the first to comment

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

  1. 1. Performance Tips and Tricks: Java EE, Java Persistence API, and JavaServer FacesAlberto Lemos (Dr. Spock) Danival Taffarel Calegari Senior Software Architect MATERA Systems Architect Globalcode Instructor Globalcode Instructor Globalcode – Open4education
  2. 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. 3. Objective “Present some tips and tricks on webapplication development with JSF, Ajax, and JPA” Globalcode – Open4education
  4. 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 Its necessary to evolve the development techniques on presentation and persistence layers! Globalcode – Open4education
  5. 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. 6. Lazy vs Eager Strategies to handle the entity relationships; Lazy: it fetches data on demand; Eager: it always fetches data. Globalcode – Open4education
  7. 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. 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. 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. 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. 11. Cache Globalcode – Open4education
  12. 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. 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. 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. 15. The Problem DAO + JDBC => open/close connection; DAO + Persistence Context => open/close session; LazyInitializationException! Globalcode – Open4education
  16. 16. Old Solution OpenSessionInViewFilter Design Pattern; New problems! Globalcode – Open4education
  17. 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. 18. Web 1.0 Request-oriented web applications; Globalcode – Open4education
  19. 19. Web 2.0 AJAX-oriented web applications; Globalcode – Open4education
  20. 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. 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. 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. 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. 24. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  25. 25. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  26. 26. Web UI Strategies Tip: Use UI Components that supports “lazy loading” via Ajax; Globalcode – Open4education
  27. 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. 28. Thank you!Alberto Lemos (Dr. Spock) Danival Taffarel Calegarihttp://www.globalcode.com.br/ http://www.matera.com/spock@globalcode.com.br danival@globalcode.com.brhttp://twitter.com/drspockbr http://twitter.com/danivaltc Globalcode – Open4education

×