SlideShare a Scribd company logo
ADF Case Studies By Michael A. Fons Graebel Companies, Inc. [email_address] February 2008
The Subjects Graebel Companies, Inc. E-Pages project Branches coordinating resources of moves RMOUG website rebuild IS Director wanted more features and a makeover
Platforms G: JDev 10.1.3.3.0 ADF/BC, JSF Web Services OAS 10.1.3.x ADF, BPEL, APEX, BI Publisher, Forms, Reports, PL/SQL, .NET, … R: JDev 10.1.3.3.0 ADF/BC, JSF OC4J 10.1.3.3.0
Why ADF? G: Oracle investing in it heavily Touted as next step after Oracle Forms R: Something I wanted to learn It would do the trick for IS Director I was willing and able to volunteer
Question from Design Phase G: Entities based on DB views Navigation Testing Options Global Button bar Database custom login (modules) Doing CRUD on an af:table R: Self-change password reset
Training (of Developers to do ADF) G: Presentations and papers like this Management carved out several days Three days of lessons Oracle Developer Day Doing actual assignments & proofs-of-concept On-line end-user training R: So far:  training through e-mail for IS Director
Foundational Discoveries Good to be knowledgable/flexible with LOV’s Way has been paved for Custom Login Module by Frank Nimphius. Validating at the view level is rather complex Made easier by doing Creates/Updates on a single row page
Web Services G: Prepared by calling .NET services Could not use JDev’s Web Service Data Control Wizard (parameters did not implement Serializable) Used JDev Web Service Proxy Wizard instead; worked fine
Web Services G: Kicking off BPEL may require BPEL web service call from PL/SQL trigger Web Service Security by getting .NET token Web Services called from Forms also R: none
Software Install Issues R: JDK 5.0 OC4J 10.1.3.3.0 ADFInstaller DB tables ADF app deployment G: Talk to our DBA group ADF app deployment
Which JDev version to use? At second developers preview for 11g now (Jan 8, 2008). JDev 11g has many needed features Developers Previews will blunt the “bleeding edge” Drag and drop At Graebel:  too much risk currently go to 11g Staying at 10.1.3.3.0 (for G and R) Looking forward to new features like Drag and Drop hooks.
Hints Copy off your directory with JDev closed daily. Get comfy with framework extensions, for ADF BC’s, FacesLifeCycles, SessionCookieFactories, or any standard class. CVS sounds like a good idea Integrated with JDev  Teamwork Suggests automated recompile/regression tests Chapter in ADF Developer’s Guide Source control .zip file
Hints Skin changes Does your company’s marketing department have standard colors? You can adapt some out-of-the-box skins to your needs.  (We adapted SRDemo’s skin.) Make your own images; pixels; artistic. Disappearing skin:  caching .css and other files Panel form column alignment problematic
Hints Page parameters Use Invoke Action on MethodAction which passes values like #{param.param1} for setting query bind variable values. Using extension of ADFFacesLifeCycle works for non-query related coding (like storing page parameter values on the session scope)
Calling ADF from Oracle Forms There is a solution which a Forms guru from the Forum offered me; free now. SSO? Instead, we built a home-grown solution.   Call from forms contains un, pw (encrypted), and other parameters. Called logout.jspx (ADF Faces page) … which called unpwset.jsp to set HttpSession un and pw attributes… … which called the final target page, which is protected in web.xml Custom LoginModule decrypts pw before authenticating.
More Hints Deployment issues G: Did initial proof of concept page in 10.1.3.2 Deployed to Solaris 8 and OAS 10.1.3.x…this did not work well at all. Deployed to Solaris 10 worked fine however. R: Deployed to 10.1.3.3.0 OC4J (Solaris 10):  worked great.
Hints executeWithParams quirk G: Drop of executeWithParams method onto page manifests fine as ADF Parameter Form. Subsequent dragged-and-dropped parameters from the same view are not connected right. In the PageDef file for the page, add to list of parameters listed in executeWithParams Action within the bindings section.  (Subsequent drag and drops on the page do not add this.)
Hints Creating an insert/update af:table can be complex, depending on user expectations. Data bound drop-down lists, must use af:forEach LOV on af:ouputText works well Doing view-level validation on af:table really threw me.  Validates every row for every change;  value of #{row} changes while validating;  commit stopped working due to faulty EL expression somewhere
LOV Montage
Security Did not use ADF Security (on either G or R) Used JAAS on both G: Used custom LoginModule and Dynamic JDBC; to authenticate and connect to individual Oracle schemas. R: Used custom LoginModule to authenticate against user and role tables in database Connected to single user.
Security G: Dynamic JDBC  Do not use BASIC authentication; need HttpSession Overrode ApplicationModule implementation class’s afterLogon method so I could do set_role required for our user/role setup Database/sid/port obtained from the default connection you set for application module.
Custom Exception Handling G: SRDemo app comes with implementation of custom exception handling. ADF Dev Guide explains how to do the same thing. When I copied the example code:  it would disable the use of #{row.xxx}.  Exception handling worked great though… I opened an Oracle SR; the solution:  comment out the portion of the SRDemo FacesPageLifeCycle that checks for proper setup of SRDemo. (an “if” statement)
Column Sorting G: Af:table column sorting If you request column sorting when  you drop a data control collection as a Table, all works well. New columns added, though, need the Sortable property set to the ViewObject attribute on which that column is sorting. Sortable value can be conditional, like #{bindings.Commit.enabled ? ‘theAttributeName’ : ‘’}
LOV issues G and R: Calling dialog Dialog page can have source iterator binding in it, or data can pass back  Commit/Rollback buttons: Af:setActionListener setting source iterator sets #{bindings.Commit.enabled} to true. If you pass data back, use ViewObject Iterator binding, to get view object, then get current row, and set desired values.
af:table drop-down lists Should have dynamic, data-bound, drop-down list in an af:table, instead of LOV’s Ran into problems in many cases using the ListBinding.  Blank List; could not find value in list Used af:forEach component instead with nested af:??? “option” component.  (Do not use backing bean components for these). Need to enable row-level Java implementation class for the “forEach” view.  ViewObject row attributes start with lower-case
Hints You can use transient views like forms “control” blocks. Single “header” row that applies to af:table child rows af:table below with row create capabilities FacesContext can get current page name Managed bean (faces-config.xml) instances in your app are accessible with ValueBindings.
My Future Goals Create my own custom JSF components Continue working with ADF. Learn JDev (10g and 11g) ADF programming intricacies In corporate more and more best practices for Java ADF CM Code Sharing
Questions? Have fun at Training Days!! Read my paper (if you have not) My email is  [email_address] See paper for bibliography/resources on RMOUG web page, events section (…to be available within the next couple of weeks.)

More Related Content

PPTX
Oracle ADF Case Study
PDF
Oracle ADF 11g Tutorial
PPT
7 Tips For Better JDeveloper Experience
PDF
Building a custom Oracle ADF Component
PPT
PPTX
Oracle application framework (oaf) online training
PDF
ADF Worst Practices (UKOUG Tech2013)
PPSX
Oracle ADF Overview for Beginners
Oracle ADF Case Study
Oracle ADF 11g Tutorial
7 Tips For Better JDeveloper Experience
Building a custom Oracle ADF Component
Oracle application framework (oaf) online training
ADF Worst Practices (UKOUG Tech2013)
Oracle ADF Overview for Beginners

What's hot (20)

PPT
oracle oa framework training | oracle oa framework training courses | oa fram...
PPTX
Apex basics-for Beginners
PDF
Module 1: JavaScript Basics
PDF
Oracle ADF Task Flows for Beginners
PDF
Deep Dive into Oracle ADF Transactions
PPTX
Introduction to JSF
PDF
Pretius Oracle Apex Primer
PDF
Infolets and OTBI Deep link Actionable Reports - Configuration Work Book
PPTX
Intro to GraphQL for Database Developers
PPTX
An Oracle ADF Introduction
PPTX
Web API with ASP.NET MVC by Software development company in india
PDF
Build your Business Services using ADF Task Flows
PPTX
Automating Workflows Through Bullhorn and Partners
PDF
Webadi -a_sample_implementation
PPT
Component Framework Primer for JSF Users
PPTX
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
PDF
Forms, ADF and JET a Non-Aggression Pact
PDF
Content-Driven Apps with React
PPTX
Introducing the Bullhorn Onboarding API
oracle oa framework training | oracle oa framework training courses | oa fram...
Apex basics-for Beginners
Module 1: JavaScript Basics
Oracle ADF Task Flows for Beginners
Deep Dive into Oracle ADF Transactions
Introduction to JSF
Pretius Oracle Apex Primer
Infolets and OTBI Deep link Actionable Reports - Configuration Work Book
Intro to GraphQL for Database Developers
An Oracle ADF Introduction
Web API with ASP.NET MVC by Software development company in india
Build your Business Services using ADF Task Flows
Automating Workflows Through Bullhorn and Partners
Webadi -a_sample_implementation
Component Framework Primer for JSF Users
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
Forms, ADF and JET a Non-Aggression Pact
Content-Driven Apps with React
Introducing the Bullhorn Onboarding API
Ad

Viewers also liked (7)

PPTX
Decoupling shared code with state that needs to cleared in between uses
PPT
What's new and exciting with JSF 2.0
PDF
PDF What's new with JSF 2.0
PDF
2015 JavaOne LAD JSF 2.3 & MVC 1.0
PDF
JSF (ADF) Case Studies Paper
PPTX
Introduction to jsf 2
PPTX
Libraries Yes! Place-based Advocacy campaign
Decoupling shared code with state that needs to cleared in between uses
What's new and exciting with JSF 2.0
PDF What's new with JSF 2.0
2015 JavaOne LAD JSF 2.3 & MVC 1.0
JSF (ADF) Case Studies Paper
Introduction to jsf 2
Libraries Yes! Place-based Advocacy campaign
Ad

Similar to JSF (ADF) Case Studies Presentation (20)

PPT
Metamorphosis from Forms to Java: A technical lead's perspective, part II
PPT
Customizing Oracle EBS OA Framework
PPT
Google App Engine for Java
PPTX
Oracle fusion dba online training
PPT
The 90-Day Startup with Google AppEngine for Java
PDF
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
PPTX
ADF Gold Nuggets (Oracle Open World 2011)
PPT
JSF On Rails - Devoxx 2008
PPT
Jdbc Lecture5
PDF
Build java-ee-applications-with-adf
PPT
Intro to Application Express
PPTX
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
PPT
Dh2 Apps Training Part2
PPTX
Slideshare - Magento Imagine - Do You Queue
PPTX
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
PPT
Spring Framework
PPT
Intro to-html-backbone
PPTX
Webinar Oracle adf12c EN
PPT
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
ODP
Workflow Management with Espresso Workflow
Metamorphosis from Forms to Java: A technical lead's perspective, part II
Customizing Oracle EBS OA Framework
Google App Engine for Java
Oracle fusion dba online training
The 90-Day Startup with Google AppEngine for Java
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
ADF Gold Nuggets (Oracle Open World 2011)
JSF On Rails - Devoxx 2008
Jdbc Lecture5
Build java-ee-applications-with-adf
Intro to Application Express
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
Dh2 Apps Training Part2
Slideshare - Magento Imagine - Do You Queue
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
Spring Framework
Intro to-html-backbone
Webinar Oracle adf12c EN
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
Workflow Management with Espresso Workflow

Recently uploaded (20)

PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Encapsulation theory and applications.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Big Data Technologies - Introduction.pptx
PDF
Modernizing your data center with Dell and AMD
PPTX
A Presentation on Artificial Intelligence
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Cloud computing and distributed systems.
PDF
Empathic Computing: Creating Shared Understanding
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPT
Teaching material agriculture food technology
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Review of recent advances in non-invasive hemoglobin estimation
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Unlocking AI with Model Context Protocol (MCP)
Per capita expenditure prediction using model stacking based on satellite ima...
Encapsulation theory and applications.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Big Data Technologies - Introduction.pptx
Modernizing your data center with Dell and AMD
A Presentation on Artificial Intelligence
Dropbox Q2 2025 Financial Results & Investor Presentation
Reach Out and Touch Someone: Haptics and Empathic Computing
Cloud computing and distributed systems.
Empathic Computing: Creating Shared Understanding
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Teaching material agriculture food technology
NewMind AI Monthly Chronicles - July 2025
Review of recent advances in non-invasive hemoglobin estimation

JSF (ADF) Case Studies Presentation

  • 1. ADF Case Studies By Michael A. Fons Graebel Companies, Inc. [email_address] February 2008
  • 2. The Subjects Graebel Companies, Inc. E-Pages project Branches coordinating resources of moves RMOUG website rebuild IS Director wanted more features and a makeover
  • 3. Platforms G: JDev 10.1.3.3.0 ADF/BC, JSF Web Services OAS 10.1.3.x ADF, BPEL, APEX, BI Publisher, Forms, Reports, PL/SQL, .NET, … R: JDev 10.1.3.3.0 ADF/BC, JSF OC4J 10.1.3.3.0
  • 4. Why ADF? G: Oracle investing in it heavily Touted as next step after Oracle Forms R: Something I wanted to learn It would do the trick for IS Director I was willing and able to volunteer
  • 5. Question from Design Phase G: Entities based on DB views Navigation Testing Options Global Button bar Database custom login (modules) Doing CRUD on an af:table R: Self-change password reset
  • 6. Training (of Developers to do ADF) G: Presentations and papers like this Management carved out several days Three days of lessons Oracle Developer Day Doing actual assignments & proofs-of-concept On-line end-user training R: So far: training through e-mail for IS Director
  • 7. Foundational Discoveries Good to be knowledgable/flexible with LOV’s Way has been paved for Custom Login Module by Frank Nimphius. Validating at the view level is rather complex Made easier by doing Creates/Updates on a single row page
  • 8. Web Services G: Prepared by calling .NET services Could not use JDev’s Web Service Data Control Wizard (parameters did not implement Serializable) Used JDev Web Service Proxy Wizard instead; worked fine
  • 9. Web Services G: Kicking off BPEL may require BPEL web service call from PL/SQL trigger Web Service Security by getting .NET token Web Services called from Forms also R: none
  • 10. Software Install Issues R: JDK 5.0 OC4J 10.1.3.3.0 ADFInstaller DB tables ADF app deployment G: Talk to our DBA group ADF app deployment
  • 11. Which JDev version to use? At second developers preview for 11g now (Jan 8, 2008). JDev 11g has many needed features Developers Previews will blunt the “bleeding edge” Drag and drop At Graebel: too much risk currently go to 11g Staying at 10.1.3.3.0 (for G and R) Looking forward to new features like Drag and Drop hooks.
  • 12. Hints Copy off your directory with JDev closed daily. Get comfy with framework extensions, for ADF BC’s, FacesLifeCycles, SessionCookieFactories, or any standard class. CVS sounds like a good idea Integrated with JDev Teamwork Suggests automated recompile/regression tests Chapter in ADF Developer’s Guide Source control .zip file
  • 13. Hints Skin changes Does your company’s marketing department have standard colors? You can adapt some out-of-the-box skins to your needs. (We adapted SRDemo’s skin.) Make your own images; pixels; artistic. Disappearing skin: caching .css and other files Panel form column alignment problematic
  • 14. Hints Page parameters Use Invoke Action on MethodAction which passes values like #{param.param1} for setting query bind variable values. Using extension of ADFFacesLifeCycle works for non-query related coding (like storing page parameter values on the session scope)
  • 15. Calling ADF from Oracle Forms There is a solution which a Forms guru from the Forum offered me; free now. SSO? Instead, we built a home-grown solution. Call from forms contains un, pw (encrypted), and other parameters. Called logout.jspx (ADF Faces page) … which called unpwset.jsp to set HttpSession un and pw attributes… … which called the final target page, which is protected in web.xml Custom LoginModule decrypts pw before authenticating.
  • 16. More Hints Deployment issues G: Did initial proof of concept page in 10.1.3.2 Deployed to Solaris 8 and OAS 10.1.3.x…this did not work well at all. Deployed to Solaris 10 worked fine however. R: Deployed to 10.1.3.3.0 OC4J (Solaris 10): worked great.
  • 17. Hints executeWithParams quirk G: Drop of executeWithParams method onto page manifests fine as ADF Parameter Form. Subsequent dragged-and-dropped parameters from the same view are not connected right. In the PageDef file for the page, add to list of parameters listed in executeWithParams Action within the bindings section. (Subsequent drag and drops on the page do not add this.)
  • 18. Hints Creating an insert/update af:table can be complex, depending on user expectations. Data bound drop-down lists, must use af:forEach LOV on af:ouputText works well Doing view-level validation on af:table really threw me. Validates every row for every change; value of #{row} changes while validating; commit stopped working due to faulty EL expression somewhere
  • 20. Security Did not use ADF Security (on either G or R) Used JAAS on both G: Used custom LoginModule and Dynamic JDBC; to authenticate and connect to individual Oracle schemas. R: Used custom LoginModule to authenticate against user and role tables in database Connected to single user.
  • 21. Security G: Dynamic JDBC Do not use BASIC authentication; need HttpSession Overrode ApplicationModule implementation class’s afterLogon method so I could do set_role required for our user/role setup Database/sid/port obtained from the default connection you set for application module.
  • 22. Custom Exception Handling G: SRDemo app comes with implementation of custom exception handling. ADF Dev Guide explains how to do the same thing. When I copied the example code: it would disable the use of #{row.xxx}. Exception handling worked great though… I opened an Oracle SR; the solution: comment out the portion of the SRDemo FacesPageLifeCycle that checks for proper setup of SRDemo. (an “if” statement)
  • 23. Column Sorting G: Af:table column sorting If you request column sorting when you drop a data control collection as a Table, all works well. New columns added, though, need the Sortable property set to the ViewObject attribute on which that column is sorting. Sortable value can be conditional, like #{bindings.Commit.enabled ? ‘theAttributeName’ : ‘’}
  • 24. LOV issues G and R: Calling dialog Dialog page can have source iterator binding in it, or data can pass back Commit/Rollback buttons: Af:setActionListener setting source iterator sets #{bindings.Commit.enabled} to true. If you pass data back, use ViewObject Iterator binding, to get view object, then get current row, and set desired values.
  • 25. af:table drop-down lists Should have dynamic, data-bound, drop-down list in an af:table, instead of LOV’s Ran into problems in many cases using the ListBinding. Blank List; could not find value in list Used af:forEach component instead with nested af:??? “option” component. (Do not use backing bean components for these). Need to enable row-level Java implementation class for the “forEach” view. ViewObject row attributes start with lower-case
  • 26. Hints You can use transient views like forms “control” blocks. Single “header” row that applies to af:table child rows af:table below with row create capabilities FacesContext can get current page name Managed bean (faces-config.xml) instances in your app are accessible with ValueBindings.
  • 27. My Future Goals Create my own custom JSF components Continue working with ADF. Learn JDev (10g and 11g) ADF programming intricacies In corporate more and more best practices for Java ADF CM Code Sharing
  • 28. Questions? Have fun at Training Days!! Read my paper (if you have not) My email is [email_address] See paper for bibliography/resources on RMOUG web page, events section (…to be available within the next couple of weeks.)