SlideShare a Scribd company logo
S

Worst Practices for
Developing an ADF
Application
UKOUG ADF EMG Version 12.1.2.3.4.0.0b
Build WORST_PRACTICES_12.1.2.3.4.0.0b_UKOUG_2013 ADF EMG
S

About us
Paco van der Linden
AMIS
www.adfplus.com
@pavadeli

Wilfred van der Deijl
The Future Group
www.redheap.com
@wilfreddeijl
S

About us
Steven Davelaar
Oracle
ateam-oracle.com
@stevendavelaar

Wilfred van der Deijl
The Future Group
www.redheap.com
@wilfreddeijl
S

Ideal project
● 1 developer
That’s you of course!
S

Threats to a healthy ADF project
● Customer / Business / Functional designer
● Architect
● Project manager
S

Threats to a healthy ADF project
● Customer / Business / Functional designer
● Architect
● Project manager
● Other developers
● Graphic designer
S

Other Developers…
Are not a member of ADF EMG
S

Other Developers…
Do not use ADF EMG Taskflow Tester
S

ADF EMG Taskflow Tester - Wiki
S

ADF EMG Taskflow Tester
S

Other Developers…
Don’t add ADF Source code library
● How to get ADF Source
○
○
○
○
○
○

Go to support.oracle.com
Log Service Request for JDeveloper/ADF
“ADF Source Code Request” as problem type
Sign agreement and upload to SR
Get access to ZIP, typically within one day
New versions don’t need new agreement

● Allows debugging of ADF framework
S

Other Developers…
Don’t add ADF Source code library
S

Other Developers…
Don’t adhere to ADF Code Guidelines
S

ADF Code Guidelines
● 38 pages of excellent content by ADF guru’s
● Topics include:
○
○
○
○
○
○
○
○

General Code Guidelines
ADF Business Components
ADF Faces
ADF TaskFlows
ADF Binding Layer
Security
High Availability
… and more
S

Other developers
● Don’t adhere to your project specific coding
guidelines
● Other developers need your help
○ Reserve time to review each other’s version control
commits
○ You might learn from their code as well!!

● Reserve time to perform QA checks
○ Against ADF coding guidelines and project specific
guidelines
○ ...or automate this
■ come back tomorrow 10:15 - Exchange 6
“Quality Assurance with JDev Auditing Framework”
W

Threats to a healthy ADF project
● Customer / Business / Functional designer
● Architect
● Project manager
● Other developers
● Graphic designer
W
W
W
W
W
W
W

Graphic designer - Pitfalls
● Website ≠ Application
● “HTML is for semantics, CSS is for layout…”
○ ADF Fragment ≠ HTML, ADF skin ≠ CSS
○ ADF Skin
→ primarily colours,
ADF Fragment → the rest

● Bad practice: CSS for layout management
W

ADF Skinning Tips
● Use stand-alone Skin Editor
● Use ADF component selectors
○ don’t look at the generated HTML
○ use ADF Faces Skin Selectors Tag Reference

● Choice
○ UI Designer to learn ADF skinning (preferred choice)
○ ADF developer to learn CSS
W

How to Write Code
W

Logging
● Bad practice: System.err.println()
● Best practice: ADFLogger
○
○
○
○

Configure at Runtime without restart
Analyze Log for Performance
Time your own code
Better insight into ADF Framework internals
W

ADFLogger - Runtime Configuration
W

ADFLogger - Runtime Configuration
W

ADFLogger - Log Analyzer

...or open log file from other (production) server
W

Time custom code with
ADFLogger::begin and
ADFLogger::end

bit.ly/adflogger
S

Understanding ADF Layers
● Bad: code ADF applications like open source
frameworks
● What do we mean by that?
○ All application state is kept in ViewController:
○ Lots of data queried from ADF BC and stored in JSF
managed beans or entries in JSF memory scope
maps
○ State passed back to ADF BC on subsequent
requests: AM methods with lots of arguments

● Good: leverage ADF BC Active Data Model
○ Easy access to previously entered data
○ Row Currency management
S

Understanding ADF Layers
● Signs of ViewController doing ADF BC work
○ import oracle.jbo…
○ Iterating RowSets
○ Storing lots of data in memory scopes or managed
beans. Should only contain true UI state
○ Calling ApplicationModule methods with lots of
arguments even when using binding layer

● Project Audits often show 50-80% of
ViewController code is unnecessary
○ Either completely redundant
○ ...or should be moved to ADF BC layer
S

ADF Faces
a.k.a. the ViewController project
S

ADF Lifecycle - Immediate property
● Bad: I run into issues, let’s try immediate=true
● Big difference: immediate on input component
vs input on command component
● Almost always wrong in input components
● Make sure you understand both JSF lifecycle
and ADF Optimized Lifecycle
● Steven Davelaar’s 18 Lessons
○ also available as ADF Insider Video

bit.ly/jsf-lifecycle
S

Know your ADF Memory Scopes
● Bad: Overuse of SessionScope &
PageFlowScope
● Can have significant impact on mem usage
● Good: The smaller, the better
● Do not cache shorter living objects
○ Should be cheap to request each time when needed
○ Can have disastrous consequences, for example
caching binding objects
S

Extreme Disastrous Caching
S

Extreme Disastrous Caching
S

Memory Scopes Guidelines
● SessionScope
○ only use for user context
○ often (UTF) PageFlowScope is better
■ Two browser tabs share SessionScope but have
independent UTF PageFlowScope

● RequestScope
○ often BackingBeanScope is better
○ each ADF Region or Declarative Component has own
BackingBeanScope but share RequestScope

● Bad: Accessing SessionScope beans from BTF
○ BTF should be reusable and not rely on SessionScope
○ taskflow parameters are there for a reason
W

tion
olu

“My ADF application is memoryhhungry”
es
a
l) p
al

ave
th

We

igh
m

(sm
a

of t
rt
W

JSF Component Binding
JDeveloper Generated Code
<af:inputText binding=”#{pageFlowScope.MyBean.lastName}”/>
W

JSF Component Binding
● First ask yourself if it is really needed
● binding=”#{pageFlowScope.MyBean.lastName}”
references UIComponent in PageFlow bean
● UIComponents should be released after each
request
● But Managed Bean might require
PageFlowScope for its functionality
W

JSF Component Binding
ComponentReference

Enhancement Request logged
W

“My JSF Component seems to travel around”
W

Building Component Tree
binding
attribute

No

create
component

Not Null

use
component

Yes

call
getter
Null

create
component

call setter
bit.ly/compbind
W

ADF Business
Components
a.k.a. the Model project
S

ADF BC Data Model - Master Detail
Beware of excessive querying

Navigate row here...

Requery
(if
populated)
S

ADF BC Data Model - Master Detail
Prevent excessive querying
● Use top level ViewObject instances with bind
variables
● or reset detail ViewObject on master row
navigation

bit.ly/masterdetail
S

ADF BC Data Model - Master Detail
Prevent excessive querying
W

“I encountered a dramatic ADF bug!!!
Sometimes users lose entered data when the
application is under heavy load.”
W

Disable Application Module Pooling
W

Don’t Simply passivate all!
W

“ADF has huge performance problems!!!
When under heavy load requests can take
several minutes.”

“Besides, what is this PS_TXN table for? It is
eating up our tablespace.”
W

Don’t Simply Passivate All
● Every ViewRow with transient atts is
persisted
● During activation all state is applied
W

Simply passivate all?

No!

○ Every ViewRow with transient atts is
persisted
○ During activation all state is applied
S

What is passivated?
○ Set logger:
oracle.jbo.server.Serializer
○ To:
W

What is passivated?
○ Set logger:
oracle.jbo.server.Serializer
○ To:
W

“My ADF application is hacked!!!
Sometimes users see data from other
sessions.”

“By the way, I did test the application with AM
pooling off.”
W

Application Module Recycling
Not Losing, but Leaking state

● AM Instances Recycled for other users under
load
● Not detected by disabling AM pooling!
W

Detecting State Leakage
W

Default AM Pool Tuning
W

Default ViewObject Tuning
W

Eclipse Memory Analyzer Tool

bit.ly/eclipsemat
W

Eclipse Memory Analyzer Tool (MAT)
● Make heap dump of running server
JDK_HOME/bin/jmap -dump:file=path
jvm_process_id

●
●
●
●

Download and run standalone Eclipse MAT
Inspect all objects in heap
Query Heap Objects
Predefined Reports and Tools

bit.ly/eclipsemat
W

Java Mission Control

bit.ly/miscontrol
W

Java Mission Control
●
●
●
●

Any version of JRockit
Hotspot (aka Sun JVM) since 1.7.0_40
Record a period of time
Analyze
○
○
○
○
○

CPU performance
Memory Usage
Garbage Collection
Thread Concurrency
etcetera
W

Miscellaneous
W

Password management
● Bad: Credentials in clear text (eg. web.xml)
● Worse: Override with deployment plans

bit.ly/secure-adf
W

Reading Credential Store

bit.ly/secure-adf
S

Load/Stress Testing
● 5 developers on a Friday afternoon:
“Ready…. Set…. Go”
● Every ADF project initially has performance
issues
● Consider
○ JMeter - Free open source, not optimized for ADF
○ Oracle Application Testing Suite - ADF aware

● Requires
○ Production like testing environment
○ Good knowledge of chosen test tool
○ 10 days setup (assuming test tool experience)
S

Further Reading
● bit.ly/adflogger
○ ADFLogger Custom Timings

● bit.ly/secure-adf
○ FMW Credential Store

● bit.ly/eclipsemat
○ Memory Analyzer Tool

● bit.ly/miscontrol
○ Java Mission Control

● bit.ly/jsf-lifecycle
○ Steven Davelaar’s JSF Lifecycle Lessons

● bit.ly/compbind
○ JSF Component Bindings

● bit.ly/masterdetail
○ Lazy Master Detail Query
S

That’s all folks!

More Related Content

PDF
Programming-best practices( beginner) ADF_fusionapps
PDF
Oracle ADF Architecture TV - Design - Advanced ADF Task Flow Concepts
PPT
7 Tips For Better JDeveloper Experience
PDF
Oracle ADF Task Flows for Beginners
PDF
Running ADF Faces on Tablets and Mobile Phones
PDF
Build your Business Services using ADF Task Flows
PPTX
ADF in Action - getting (re)acquainted with Oracle’s premier application deve...
PPTX
Oracle ADF Case Study
Programming-best practices( beginner) ADF_fusionapps
Oracle ADF Architecture TV - Design - Advanced ADF Task Flow Concepts
7 Tips For Better JDeveloper Experience
Oracle ADF Task Flows for Beginners
Running ADF Faces on Tablets and Mobile Phones
Build your Business Services using ADF Task Flows
ADF in Action - getting (re)acquainted with Oracle’s premier application deve...
Oracle ADF Case Study

What's hot (20)

PPTX
ADF Mythbusters UKOUG'14
PPTX
Marrying HTML5 and Angular to ADF - Oracle OpenWorld 2014 Preview
PPTX
ADF Development Survival Kit
PDF
Upcoming JDeveloper ADF Business Components REST support
PDF
Oracle ADF Architecture TV - Design - Task Flow Communication Pattern
PDF
Building a custom Oracle ADF Component
PPTX
A-Team Mobile Persistence Accelerator Overview
PDF
Adf performance tuning tips slideshare
PDF
AEM Sightly Deep Dive
PDF
HTML5: the new frontier of the web
PDF
Oracle ADF Architecture TV - Design - Task Flow Data Control Scope Options
PDF
Sightly - AEM6 UI Development using JS and JAVA
PDF
Oracle ADF Architecture TV - Design - Task Flow Transaction Options
PDF
Forms, ADF and JET a Non-Aggression Pact
PPTX
Introduction to Sightly and Sling Models
PDF
NLOUG 2017- Oracle WebCenter Portal 12c Performance
PDF
Modern development paradigms
DOC
Alexander Zeng
PDF
Three WEM Dev Tricks
PDF
Oracle adfj developer slides
ADF Mythbusters UKOUG'14
Marrying HTML5 and Angular to ADF - Oracle OpenWorld 2014 Preview
ADF Development Survival Kit
Upcoming JDeveloper ADF Business Components REST support
Oracle ADF Architecture TV - Design - Task Flow Communication Pattern
Building a custom Oracle ADF Component
A-Team Mobile Persistence Accelerator Overview
Adf performance tuning tips slideshare
AEM Sightly Deep Dive
HTML5: the new frontier of the web
Oracle ADF Architecture TV - Design - Task Flow Data Control Scope Options
Sightly - AEM6 UI Development using JS and JAVA
Oracle ADF Architecture TV - Design - Task Flow Transaction Options
Forms, ADF and JET a Non-Aggression Pact
Introduction to Sightly and Sling Models
NLOUG 2017- Oracle WebCenter Portal 12c Performance
Modern development paradigms
Alexander Zeng
Three WEM Dev Tricks
Oracle adfj developer slides
Ad

Viewers also liked (15)

PPTX
ADF Anti-Patterns: Dangerous Tutorials
PDF
18 Invaluable Lessons About ADF-JSF Interaction
PDF
JDeveloper Auditing Framework (UKOUG Tech2013)
PPT
J Headstart, EvolucióN De Forms A Adf
PPTX
Custom audit rules in Jdeveloper extension
PDF
PDF
Reporting solutions for ADF Applications
KEY
ADF User Interface Design Best Pratices
PDF
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
PPT
Talking Services with Oracle ADF and Oracle SOA Suite
PPT
Oracle ADF Overview
PPT
Working with Portlets in ADF and Webcenter
PDF
Java SE 8 best practices
PDF
JHeadstart Forms2ADF Generator – Migrating from Oracle Forms to a Best-Practi...
PPTX
ADF in action 1.2
ADF Anti-Patterns: Dangerous Tutorials
18 Invaluable Lessons About ADF-JSF Interaction
JDeveloper Auditing Framework (UKOUG Tech2013)
J Headstart, EvolucióN De Forms A Adf
Custom audit rules in Jdeveloper extension
Reporting solutions for ADF Applications
ADF User Interface Design Best Pratices
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
Talking Services with Oracle ADF and Oracle SOA Suite
Oracle ADF Overview
Working with Portlets in ADF and Webcenter
Java SE 8 best practices
JHeadstart Forms2ADF Generator – Migrating from Oracle Forms to a Best-Practi...
ADF in action 1.2
Ad

Similar to ADF Worst Practices (UKOUG Tech2013) (20)

PDF
Oracle ADF Architecture TV - Development - Programming Best Practices
PPTX
Oracle ADF Training| Oracle ADF Developer Training
PPTX
An Oracle ADF Introduction
PDF
Oracle® Fusion Middleware
DOCX
Best Weblogic Server Online Training
PDF
Oracle application-development-framework-best-practices
PPTX
OAF & ADF.pptx
PDF
Oracle ADF Quick Handy Reference
DOC
Best Oracle adf online training
PDF
Oracle ADF Tutorial/Training Study Guide
PDF
ADF Introduction By Sandeep Sharda
PPT
oracle adf training | oracle adf course | oracle adf certification training
PDF
Oracle adf performance tips
PDF
PDF
Build java-ee-applications-with-adf
PPTX
Comparison between OAF & ADF.pptx
PPT
Greate Introduction to Oracle Fusion Middleware and ADF
PPTX
Oracle Application Developmenr Framework
PPT
JSF (ADF) Case Studies Presentation
Oracle ADF Architecture TV - Development - Programming Best Practices
Oracle ADF Training| Oracle ADF Developer Training
An Oracle ADF Introduction
Oracle® Fusion Middleware
Best Weblogic Server Online Training
Oracle application-development-framework-best-practices
OAF & ADF.pptx
Oracle ADF Quick Handy Reference
Best Oracle adf online training
Oracle ADF Tutorial/Training Study Guide
ADF Introduction By Sandeep Sharda
oracle adf training | oracle adf course | oracle adf certification training
Oracle adf performance tips
Build java-ee-applications-with-adf
Comparison between OAF & ADF.pptx
Greate Introduction to Oracle Fusion Middleware and ADF
Oracle Application Developmenr Framework
JSF (ADF) Case Studies Presentation

Recently uploaded (20)

PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Big Data Technologies - Introduction.pptx
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Approach and Philosophy of On baking technology
PDF
Modernizing your data center with Dell and AMD
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced IT Governance
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Spectral efficient network and resource selection model in 5G networks
“AI and Expert System Decision Support & Business Intelligence Systems”
Advanced methodologies resolving dimensionality complications for autism neur...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Big Data Technologies - Introduction.pptx
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Approach and Philosophy of On baking technology
Modernizing your data center with Dell and AMD
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced IT Governance
GamePlan Trading System Review: Professional Trader's Honest Take
20250228 LYD VKU AI Blended-Learning.pptx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Advanced Soft Computing BINUS July 2025.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Unlocking AI with Model Context Protocol (MCP)
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Spectral efficient network and resource selection model in 5G networks

ADF Worst Practices (UKOUG Tech2013)

  • 1. S Worst Practices for Developing an ADF Application UKOUG ADF EMG Version 12.1.2.3.4.0.0b Build WORST_PRACTICES_12.1.2.3.4.0.0b_UKOUG_2013 ADF EMG
  • 2. S About us Paco van der Linden AMIS www.adfplus.com @pavadeli Wilfred van der Deijl The Future Group www.redheap.com @wilfreddeijl
  • 3. S About us Steven Davelaar Oracle ateam-oracle.com @stevendavelaar Wilfred van der Deijl The Future Group www.redheap.com @wilfreddeijl
  • 4. S Ideal project ● 1 developer That’s you of course!
  • 5. S Threats to a healthy ADF project ● Customer / Business / Functional designer ● Architect ● Project manager
  • 6. S Threats to a healthy ADF project ● Customer / Business / Functional designer ● Architect ● Project manager ● Other developers ● Graphic designer
  • 7. S Other Developers… Are not a member of ADF EMG
  • 8. S Other Developers… Do not use ADF EMG Taskflow Tester
  • 9. S ADF EMG Taskflow Tester - Wiki
  • 11. S Other Developers… Don’t add ADF Source code library ● How to get ADF Source ○ ○ ○ ○ ○ ○ Go to support.oracle.com Log Service Request for JDeveloper/ADF “ADF Source Code Request” as problem type Sign agreement and upload to SR Get access to ZIP, typically within one day New versions don’t need new agreement ● Allows debugging of ADF framework
  • 12. S Other Developers… Don’t add ADF Source code library
  • 13. S Other Developers… Don’t adhere to ADF Code Guidelines
  • 14. S ADF Code Guidelines ● 38 pages of excellent content by ADF guru’s ● Topics include: ○ ○ ○ ○ ○ ○ ○ ○ General Code Guidelines ADF Business Components ADF Faces ADF TaskFlows ADF Binding Layer Security High Availability … and more
  • 15. S Other developers ● Don’t adhere to your project specific coding guidelines ● Other developers need your help ○ Reserve time to review each other’s version control commits ○ You might learn from their code as well!! ● Reserve time to perform QA checks ○ Against ADF coding guidelines and project specific guidelines ○ ...or automate this ■ come back tomorrow 10:15 - Exchange 6 “Quality Assurance with JDev Auditing Framework”
  • 16. W Threats to a healthy ADF project ● Customer / Business / Functional designer ● Architect ● Project manager ● Other developers ● Graphic designer
  • 17. W
  • 18. W
  • 19. W
  • 20. W
  • 21. W
  • 22. W
  • 23. W Graphic designer - Pitfalls ● Website ≠ Application ● “HTML is for semantics, CSS is for layout…” ○ ADF Fragment ≠ HTML, ADF skin ≠ CSS ○ ADF Skin → primarily colours, ADF Fragment → the rest ● Bad practice: CSS for layout management
  • 24. W ADF Skinning Tips ● Use stand-alone Skin Editor ● Use ADF component selectors ○ don’t look at the generated HTML ○ use ADF Faces Skin Selectors Tag Reference ● Choice ○ UI Designer to learn ADF skinning (preferred choice) ○ ADF developer to learn CSS
  • 26. W Logging ● Bad practice: System.err.println() ● Best practice: ADFLogger ○ ○ ○ ○ Configure at Runtime without restart Analyze Log for Performance Time your own code Better insight into ADF Framework internals
  • 27. W ADFLogger - Runtime Configuration
  • 28. W ADFLogger - Runtime Configuration
  • 29. W ADFLogger - Log Analyzer ...or open log file from other (production) server
  • 30. W Time custom code with ADFLogger::begin and ADFLogger::end bit.ly/adflogger
  • 31. S Understanding ADF Layers ● Bad: code ADF applications like open source frameworks ● What do we mean by that? ○ All application state is kept in ViewController: ○ Lots of data queried from ADF BC and stored in JSF managed beans or entries in JSF memory scope maps ○ State passed back to ADF BC on subsequent requests: AM methods with lots of arguments ● Good: leverage ADF BC Active Data Model ○ Easy access to previously entered data ○ Row Currency management
  • 32. S Understanding ADF Layers ● Signs of ViewController doing ADF BC work ○ import oracle.jbo… ○ Iterating RowSets ○ Storing lots of data in memory scopes or managed beans. Should only contain true UI state ○ Calling ApplicationModule methods with lots of arguments even when using binding layer ● Project Audits often show 50-80% of ViewController code is unnecessary ○ Either completely redundant ○ ...or should be moved to ADF BC layer
  • 33. S ADF Faces a.k.a. the ViewController project
  • 34. S ADF Lifecycle - Immediate property ● Bad: I run into issues, let’s try immediate=true ● Big difference: immediate on input component vs input on command component ● Almost always wrong in input components ● Make sure you understand both JSF lifecycle and ADF Optimized Lifecycle ● Steven Davelaar’s 18 Lessons ○ also available as ADF Insider Video bit.ly/jsf-lifecycle
  • 35. S Know your ADF Memory Scopes ● Bad: Overuse of SessionScope & PageFlowScope ● Can have significant impact on mem usage ● Good: The smaller, the better ● Do not cache shorter living objects ○ Should be cheap to request each time when needed ○ Can have disastrous consequences, for example caching binding objects
  • 38. S Memory Scopes Guidelines ● SessionScope ○ only use for user context ○ often (UTF) PageFlowScope is better ■ Two browser tabs share SessionScope but have independent UTF PageFlowScope ● RequestScope ○ often BackingBeanScope is better ○ each ADF Region or Declarative Component has own BackingBeanScope but share RequestScope ● Bad: Accessing SessionScope beans from BTF ○ BTF should be reusable and not rely on SessionScope ○ taskflow parameters are there for a reason
  • 39. W tion olu “My ADF application is memoryhhungry” es a l) p al ave th We igh m (sm a of t rt
  • 40. W JSF Component Binding JDeveloper Generated Code <af:inputText binding=”#{pageFlowScope.MyBean.lastName}”/>
  • 41. W JSF Component Binding ● First ask yourself if it is really needed ● binding=”#{pageFlowScope.MyBean.lastName}” references UIComponent in PageFlow bean ● UIComponents should be released after each request ● But Managed Bean might require PageFlowScope for its functionality
  • 43. W “My JSF Component seems to travel around”
  • 44. W Building Component Tree binding attribute No create component Not Null use component Yes call getter Null create component call setter bit.ly/compbind
  • 46. S ADF BC Data Model - Master Detail Beware of excessive querying Navigate row here... Requery (if populated)
  • 47. S ADF BC Data Model - Master Detail Prevent excessive querying ● Use top level ViewObject instances with bind variables ● or reset detail ViewObject on master row navigation bit.ly/masterdetail
  • 48. S ADF BC Data Model - Master Detail Prevent excessive querying
  • 49. W “I encountered a dramatic ADF bug!!! Sometimes users lose entered data when the application is under heavy load.”
  • 52. W “ADF has huge performance problems!!! When under heavy load requests can take several minutes.” “Besides, what is this PS_TXN table for? It is eating up our tablespace.”
  • 53. W Don’t Simply Passivate All ● Every ViewRow with transient atts is persisted ● During activation all state is applied
  • 54. W Simply passivate all? No! ○ Every ViewRow with transient atts is persisted ○ During activation all state is applied
  • 55. S What is passivated? ○ Set logger: oracle.jbo.server.Serializer ○ To:
  • 56. W What is passivated? ○ Set logger: oracle.jbo.server.Serializer ○ To:
  • 57. W “My ADF application is hacked!!! Sometimes users see data from other sessions.” “By the way, I did test the application with AM pooling off.”
  • 58. W Application Module Recycling Not Losing, but Leaking state ● AM Instances Recycled for other users under load ● Not detected by disabling AM pooling!
  • 62. W Eclipse Memory Analyzer Tool bit.ly/eclipsemat
  • 63. W Eclipse Memory Analyzer Tool (MAT) ● Make heap dump of running server JDK_HOME/bin/jmap -dump:file=path jvm_process_id ● ● ● ● Download and run standalone Eclipse MAT Inspect all objects in heap Query Heap Objects Predefined Reports and Tools bit.ly/eclipsemat
  • 65. W Java Mission Control ● ● ● ● Any version of JRockit Hotspot (aka Sun JVM) since 1.7.0_40 Record a period of time Analyze ○ ○ ○ ○ ○ CPU performance Memory Usage Garbage Collection Thread Concurrency etcetera
  • 67. W Password management ● Bad: Credentials in clear text (eg. web.xml) ● Worse: Override with deployment plans bit.ly/secure-adf
  • 69. S Load/Stress Testing ● 5 developers on a Friday afternoon: “Ready…. Set…. Go” ● Every ADF project initially has performance issues ● Consider ○ JMeter - Free open source, not optimized for ADF ○ Oracle Application Testing Suite - ADF aware ● Requires ○ Production like testing environment ○ Good knowledge of chosen test tool ○ 10 days setup (assuming test tool experience)
  • 70. S Further Reading ● bit.ly/adflogger ○ ADFLogger Custom Timings ● bit.ly/secure-adf ○ FMW Credential Store ● bit.ly/eclipsemat ○ Memory Analyzer Tool ● bit.ly/miscontrol ○ Java Mission Control ● bit.ly/jsf-lifecycle ○ Steven Davelaar’s JSF Lifecycle Lessons ● bit.ly/compbind ○ JSF Component Bindings ● bit.ly/masterdetail ○ Lazy Master Detail Query