SlideShare a Scribd company logo
… And thus your forms             “automagically” disappearODTUG Kaleidoscope 2011 – Long Beach, CaliforniaLuc Bors, AMIS, The Netherlands
OverviewThe Business Case The Modernization ProjectManual ModernizationThe PL/SQL Challenge (No, not that one … )Automated ModernizationLessons Learned
Business DriversSingle Sign-On & uniform UI for all internal applicationsAdd new/extend incomplete UI functionalityAdd reporting (No Oracle Reports !)Add adequate authorisation (even the temps have full access)Support of business process flow (instead table data), so  untrained users can perform application functions Eliminate Direct Database Access                                                                by Business (external requirement)
IT DriversEnd-of-Life of the existing applicationsOracle SoD: Designer exit!2 applications with 2 coding-stylesNo authorization, no architecture Forms supported our data model instead of the business processesMissing functionality, more back-end applications to comeCultural difference Java vs. Oracle
Migration or Modernization ?Migration indicates an automated processMigration indicates a one  one resultLets call it Modernization and add Business Value !
Take Off !Step 1 : One Scrum-team development team  Training + certification
Pilot dedicated to JHeadstart and ADF (8 weeks)
Build building blocks Step 2 : ‘Migration’ of Forms GUI with Business Process RedesignQuickly add Business Value: start with realization of new limited functionality
Short duration time Development to ProductionSome of Poc the Topics Is ADF flexible enough to rebuild our apps ?What about productivity ?Can we use JHeadstart Forms2ADF generator ?What else is needed ?
1st Project Goal & Starting pointRebuild 1 Forms App without functional changesWeb Forms50+ formsSimple ComplexBuild new task oriented functionality
What are the Options ?Use Forms2ADF for all FormsUse no Forms2ADF  ( = manual modernization)Meet in the middle
No Forms2ADFComplex Forms do not implement business processes in the best wayUsually represent database instead of processMany many items on a Form, using stacked and tabbed canvasses.For layout conservation JHeadstart gave some very good Hooks
Forms and ADF are not that DifferentSee the similarities between Forms and ADFApplication building blocks based on tablesNon base table (Post-Query) lookupsUI labels, tooltips and format masksValidationList of valuesCalculated fieldsCommon Forms triggersForm/Page navigationUI controls
How similar are Forms and ADF
How similar are Forms and ADF
How similar are Forms and ADF
Manual Forms ModernizationIsolate / Identify UI ComponentsDefine FunctionalityRe-design ?Translate Building Blocks
Modernizing User Interface
Building the layoutKnow the ADF Layout componentsPanelSplitterPanelStretchLayoutPanelTabbedNest them if necessary
The Result
The PL/SQL ChallengeForms Built-ins are not available in ADF    and PL/SQL is not Java. Your options:Whenever possibletransfer to DBWhenever luckyUse a declarative or zero code ADF AlternativeOtherwiseCode Java Alternative
Transfer to DatabaseIt is easy to call PL/SQL in FormsADF supports PL/SQL calls in an almost similar way“When Button Pressed Trigger”ocm_blocked_orders_module.proceed_order(arg1, arg2, arg3);public void proceedOrder(String p_order_id, String p_old_status,                         String p_new_status) { String statement = "ocm_blocked_orders_module.proceed_order(?,?,?)";DbUtils.callStoredProcedure(statement,                             new Object[] { p_order_id, p_old_status,p_new_status },getDBTransaction(), true); // commit}
(Near) Zero Code AlternativesForms code for:ButtonsCanvassesNavigationADF code for:None of the above
Rebuild in ADF / Java CodeCan be (extremely) time consumingTry to define functionality of PL/SQL codeDo not try to copy !Re implement !Know your options !ExampleImplementing search
Implementing Search(Too) Many Options
Search FormQuick Query Query Custom Parameter form
The Most Flexible Implementationpublic void adjustAndApplyViewCriteria( String pOption                                              ,Boolean pEntireDatabase                                              ,String pAction                                              ,String pLdrId                                              ,etcetera                                              ,………                                              ,String pTop){1if(pStockAvailable.equalsIgnoreCase("S")){vo.applyViewCriteria(getViewCriteria("stockAvailable_S_vc"),true);  } 2if(pListId.equalsIgnoreCase("WORK_ID")){ViewCriteriaworkIdVc = getViewCriteria("workId_vc");workIdVc.resetCriteria();VariableValueManagerworkIdVvm = workIdVc.ensureVariableManager();workIdVvm.setVariableValue("b_workId", pIdentifier);vo.applyViewCriteria(workIdVc,true);                   } 3 if(pOption.equalsIgnoreCase(QueryUtils.getCn_top_sales_short())){      String pTopSalesMax = QueryUtils.getTopSalesMax(trans);addFragmentToWhereClause(" pos <= to_number(nvl("+pTop +","+ pTopSalesMax +" )) and  ");          } 4
So What About Architecture ?Application ArchitectureIn the BeginningTaskflow with page fragment and per Taskflow 1 page with 1 static regionAll in one big workspaceAfter a WhileTaskflow with page fragment and per Application 1 page with 1 dynamic regionUse separate workspacesMuch BetterNot So Good
Taskflows and RegionsUse ADF TaskflowsCreate ADF Taskflow librariesUse ADF Dynamic RegionsRender regions based on context and menu action
The Menu
What is JHeadstart ?Jheadstart is a Jdeveloper ExtensionJHeadstart consists of three main components:JHeadstart Runtime LibraryReusable components that extend Oracle ADFJHeadstart Application Generator (JAG)Generator of the Controller (JSF/ADFcconfig files), View (ADF Faces pages/fragments), and Model components (ADF data controls and databindings).
What is JHeadstart ?JHeadstart consists of three main components:JHeadstart Forms2ADF Generator (JFG)The Forms .fmb files are read, and based on the Forms elements defined in the form, the JFG creates ADF Business Componenets, as well as the XML meta-data (Service Definition) required by the JHeadstart Application Generator
Jheadstart Forms2ADFUse Forms2ADF for Simple and Intermediate FormsBecause…..Simple Forms like Domain Maintenance are unlikely to change and do not support complex processes
Example forms
JDEVeloper and JheadstartNew Fusion WebApplicationEnable JHeadstartInvoke Jheadstart Forms2ADF WizardWizard Creates Business ComponentsWizard Creates Jheadstart App. Definition FilesGenerate Jheadstart Application
Jheadstart Forms2adf
Select modules & finish wizard
Generate application & runWizard resultInvoke Application GeneratorADF Result
Jheadstart Forms2adf DEMODEMONSTRATION
Lessons Learned (1)(Re-) Think the architectureArchitecture is the foundation for a stable and robust ApplicationDon’t try to copy forms functionalityKnow your ADF Faces Components
Lessons Learned (2)Start talking with users before you start re-building the applicationThey don’t always use the forms application the way you expectAutomated migration is not easy.You can run into issues that an automated tool cannot handleYou still need to re-code forms triggers (PL/SQL)
Additional deliverablesIt’s not only about (re-) building the appIt’s a whole new professionIt’s a new way of lifeWrite it downUse the tools
Standards and GuidelinesThe AMIS / CUSTOMER.COM cookbookArchitectural issuesDevelopment How to‘sStandards and GuidelinesTips and TricksCode TemplatesSetting up Unit tests
Software FactoryVersioning using SubversionADF BC Unit testing using JunitADF RC Unit testing using SeleniumJIRA for issue trackingContinuous Integration using HudsonMaven
ConclusionForms Modernization can be Difficult100% Automated Modernization Doesn’t ExistIf Possible Use Tools (JHeadstart) to Help you ModernizeModernization goes Beyond Building Software

More Related Content

PPTX
Wiesław Kałkus: C# functional programming
PPTX
Xam expertday
PPTX
Eclipse 40 and Eclipse e4
PDF
Test Case Creation in Katalon Studio
PPT
introduction to Angularjs basics
PPTX
Behaviour Driven Development V 0.1
PPTX
So What Do Cucumbers Have To Do With Testing
PDF
The Art and Science of Shipping Ember Apps
Wiesław Kałkus: C# functional programming
Xam expertday
Eclipse 40 and Eclipse e4
Test Case Creation in Katalon Studio
introduction to Angularjs basics
Behaviour Driven Development V 0.1
So What Do Cucumbers Have To Do With Testing
The Art and Science of Shipping Ember Apps

What's hot (7)

PPT
Visual Basic 6.0
PDF
Flavours - Classic/Technical BDD
PPTX
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
PPTX
Functional programming in C#
PPT
JAX 08 - Agile RCP
PDF
Babble article - Test Automation & Text Translation
PPT
Silverlight 2 for Developers - TechEd New Zealand 2008
Visual Basic 6.0
Flavours - Classic/Technical BDD
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Functional programming in C#
JAX 08 - Agile RCP
Babble article - Test Automation & Text Translation
Silverlight 2 for Developers - TechEd New Zealand 2008
Ad

Similar to ...and thus your forms automagically disappeared (20)

PPT
Intro to Application Express
PPT
Process State vs. Object State: Modeling Best Practices for Simple Workflows ...
PPT
Susan windsor soft test 16th november 2005
PPTX
Google Apps Script for Beginners- Amazing Things with Code
PPT
The 90-Day Startup with Google AppEngine for Java
ODP
2014 11 20 Drupal 7 -> 8 test migratie
PPTX
North east user group tour
PPTX
Better User Experience with .NET
PPS
Advisor Jumpstart: JavaScript
KEY
Mobile optimization
PPT
SharePoint workflow deep-dive
PDF
Apex Enterprise Patterns: Building Strong Foundations
PPTX
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
PPTX
PDF
Stored-Procedures-Presentation
PPTX
Webinar Oracle adf12c EN
PPTX
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
PPT
The Magic Of Application Lifecycle Management In Vs Public
PPT
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
PPT
About work flow
Intro to Application Express
Process State vs. Object State: Modeling Best Practices for Simple Workflows ...
Susan windsor soft test 16th november 2005
Google Apps Script for Beginners- Amazing Things with Code
The 90-Day Startup with Google AppEngine for Java
2014 11 20 Drupal 7 -> 8 test migratie
North east user group tour
Better User Experience with .NET
Advisor Jumpstart: JavaScript
Mobile optimization
SharePoint workflow deep-dive
Apex Enterprise Patterns: Building Strong Foundations
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
Stored-Procedures-Presentation
Webinar Oracle adf12c EN
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
The Magic Of Application Lifecycle Management In Vs Public
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
About work flow
Ad

More from Luc Bors (20)

PDF
Talk to me Goose: Going beyond your regular Chatbot
PDF
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
PDF
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
PDF
Real Life MAF (2.2) Oracle Open World 2015
PDF
Real life-maf-2015-k scope-final
PPTX
Real life-maf-2015
PDF
ADF Essentials (KScope14)
PDF
Reaching out from ADF Mobile (ODTUG KScope 2014)
PDF
OgH Data Visualization Special Part III
PDF
OgH Data Visualization Special Part II
PDF
OgH Data Visualization Special Part I
PDF
MAF push notifications
PDF
Doag wysiwyg
PDF
amis-adf-enterprise-mobility
PDF
Oracle day 2014-mobile-customer-case
PDF
Oracle MAF real life OOW.pptx
PDF
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
PDF
ADF Mobile: 10 Things you don't get from the developers guide
PPTX
oow2013-adf-mo-bi-le
PDF
Goodbye Nightmare : Tops and Tricks for creating Layouts
Talk to me Goose: Going beyond your regular Chatbot
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
Real Life MAF (2.2) Oracle Open World 2015
Real life-maf-2015-k scope-final
Real life-maf-2015
ADF Essentials (KScope14)
Reaching out from ADF Mobile (ODTUG KScope 2014)
OgH Data Visualization Special Part III
OgH Data Visualization Special Part II
OgH Data Visualization Special Part I
MAF push notifications
Doag wysiwyg
amis-adf-enterprise-mobility
Oracle day 2014-mobile-customer-case
Oracle MAF real life OOW.pptx
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
ADF Mobile: 10 Things you don't get from the developers guide
oow2013-adf-mo-bi-le
Goodbye Nightmare : Tops and Tricks for creating Layouts

Recently uploaded (20)

PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Modernizing your data center with Dell and AMD
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
KodekX | Application Modernization Development
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
Teaching material agriculture food technology
PPTX
Cloud computing and distributed systems.
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
A Presentation on Artificial Intelligence
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Modernizing your data center with Dell and AMD
Encapsulation_ Review paper, used for researhc scholars
KodekX | Application Modernization Development
NewMind AI Monthly Chronicles - July 2025
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Understanding_Digital_Forensics_Presentation.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Teaching material agriculture food technology
Cloud computing and distributed systems.
Chapter 3 Spatial Domain Image Processing.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Network Security Unit 5.pdf for BCA BBA.
Review of recent advances in non-invasive hemoglobin estimation
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Advanced methodologies resolving dimensionality complications for autism neur...
A Presentation on Artificial Intelligence
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

...and thus your forms automagically disappeared

  • 1. … And thus your forms “automagically” disappearODTUG Kaleidoscope 2011 – Long Beach, CaliforniaLuc Bors, AMIS, The Netherlands
  • 2. OverviewThe Business Case The Modernization ProjectManual ModernizationThe PL/SQL Challenge (No, not that one … )Automated ModernizationLessons Learned
  • 3. Business DriversSingle Sign-On & uniform UI for all internal applicationsAdd new/extend incomplete UI functionalityAdd reporting (No Oracle Reports !)Add adequate authorisation (even the temps have full access)Support of business process flow (instead table data), so untrained users can perform application functions Eliminate Direct Database Access by Business (external requirement)
  • 4. IT DriversEnd-of-Life of the existing applicationsOracle SoD: Designer exit!2 applications with 2 coding-stylesNo authorization, no architecture Forms supported our data model instead of the business processesMissing functionality, more back-end applications to comeCultural difference Java vs. Oracle
  • 5. Migration or Modernization ?Migration indicates an automated processMigration indicates a one  one resultLets call it Modernization and add Business Value !
  • 6. Take Off !Step 1 : One Scrum-team development team Training + certification
  • 7. Pilot dedicated to JHeadstart and ADF (8 weeks)
  • 8. Build building blocks Step 2 : ‘Migration’ of Forms GUI with Business Process RedesignQuickly add Business Value: start with realization of new limited functionality
  • 9. Short duration time Development to ProductionSome of Poc the Topics Is ADF flexible enough to rebuild our apps ?What about productivity ?Can we use JHeadstart Forms2ADF generator ?What else is needed ?
  • 10. 1st Project Goal & Starting pointRebuild 1 Forms App without functional changesWeb Forms50+ formsSimple ComplexBuild new task oriented functionality
  • 11. What are the Options ?Use Forms2ADF for all FormsUse no Forms2ADF ( = manual modernization)Meet in the middle
  • 12. No Forms2ADFComplex Forms do not implement business processes in the best wayUsually represent database instead of processMany many items on a Form, using stacked and tabbed canvasses.For layout conservation JHeadstart gave some very good Hooks
  • 13. Forms and ADF are not that DifferentSee the similarities between Forms and ADFApplication building blocks based on tablesNon base table (Post-Query) lookupsUI labels, tooltips and format masksValidationList of valuesCalculated fieldsCommon Forms triggersForm/Page navigationUI controls
  • 14. How similar are Forms and ADF
  • 15. How similar are Forms and ADF
  • 16. How similar are Forms and ADF
  • 17. Manual Forms ModernizationIsolate / Identify UI ComponentsDefine FunctionalityRe-design ?Translate Building Blocks
  • 19. Building the layoutKnow the ADF Layout componentsPanelSplitterPanelStretchLayoutPanelTabbedNest them if necessary
  • 21. The PL/SQL ChallengeForms Built-ins are not available in ADF and PL/SQL is not Java. Your options:Whenever possibletransfer to DBWhenever luckyUse a declarative or zero code ADF AlternativeOtherwiseCode Java Alternative
  • 22. Transfer to DatabaseIt is easy to call PL/SQL in FormsADF supports PL/SQL calls in an almost similar way“When Button Pressed Trigger”ocm_blocked_orders_module.proceed_order(arg1, arg2, arg3);public void proceedOrder(String p_order_id, String p_old_status, String p_new_status) { String statement = "ocm_blocked_orders_module.proceed_order(?,?,?)";DbUtils.callStoredProcedure(statement, new Object[] { p_order_id, p_old_status,p_new_status },getDBTransaction(), true); // commit}
  • 23. (Near) Zero Code AlternativesForms code for:ButtonsCanvassesNavigationADF code for:None of the above
  • 24. Rebuild in ADF / Java CodeCan be (extremely) time consumingTry to define functionality of PL/SQL codeDo not try to copy !Re implement !Know your options !ExampleImplementing search
  • 26. Search FormQuick Query Query Custom Parameter form
  • 27. The Most Flexible Implementationpublic void adjustAndApplyViewCriteria( String pOption ,Boolean pEntireDatabase ,String pAction ,String pLdrId ,etcetera ,……… ,String pTop){1if(pStockAvailable.equalsIgnoreCase("S")){vo.applyViewCriteria(getViewCriteria("stockAvailable_S_vc"),true); } 2if(pListId.equalsIgnoreCase("WORK_ID")){ViewCriteriaworkIdVc = getViewCriteria("workId_vc");workIdVc.resetCriteria();VariableValueManagerworkIdVvm = workIdVc.ensureVariableManager();workIdVvm.setVariableValue("b_workId", pIdentifier);vo.applyViewCriteria(workIdVc,true); } 3 if(pOption.equalsIgnoreCase(QueryUtils.getCn_top_sales_short())){ String pTopSalesMax = QueryUtils.getTopSalesMax(trans);addFragmentToWhereClause(" pos <= to_number(nvl("+pTop +","+ pTopSalesMax +" )) and "); } 4
  • 28. So What About Architecture ?Application ArchitectureIn the BeginningTaskflow with page fragment and per Taskflow 1 page with 1 static regionAll in one big workspaceAfter a WhileTaskflow with page fragment and per Application 1 page with 1 dynamic regionUse separate workspacesMuch BetterNot So Good
  • 29. Taskflows and RegionsUse ADF TaskflowsCreate ADF Taskflow librariesUse ADF Dynamic RegionsRender regions based on context and menu action
  • 31. What is JHeadstart ?Jheadstart is a Jdeveloper ExtensionJHeadstart consists of three main components:JHeadstart Runtime LibraryReusable components that extend Oracle ADFJHeadstart Application Generator (JAG)Generator of the Controller (JSF/ADFcconfig files), View (ADF Faces pages/fragments), and Model components (ADF data controls and databindings).
  • 32. What is JHeadstart ?JHeadstart consists of three main components:JHeadstart Forms2ADF Generator (JFG)The Forms .fmb files are read, and based on the Forms elements defined in the form, the JFG creates ADF Business Componenets, as well as the XML meta-data (Service Definition) required by the JHeadstart Application Generator
  • 33. Jheadstart Forms2ADFUse Forms2ADF for Simple and Intermediate FormsBecause…..Simple Forms like Domain Maintenance are unlikely to change and do not support complex processes
  • 35. JDEVeloper and JheadstartNew Fusion WebApplicationEnable JHeadstartInvoke Jheadstart Forms2ADF WizardWizard Creates Business ComponentsWizard Creates Jheadstart App. Definition FilesGenerate Jheadstart Application
  • 37. Select modules & finish wizard
  • 38. Generate application & runWizard resultInvoke Application GeneratorADF Result
  • 40. Lessons Learned (1)(Re-) Think the architectureArchitecture is the foundation for a stable and robust ApplicationDon’t try to copy forms functionalityKnow your ADF Faces Components
  • 41. Lessons Learned (2)Start talking with users before you start re-building the applicationThey don’t always use the forms application the way you expectAutomated migration is not easy.You can run into issues that an automated tool cannot handleYou still need to re-code forms triggers (PL/SQL)
  • 42. Additional deliverablesIt’s not only about (re-) building the appIt’s a whole new professionIt’s a new way of lifeWrite it downUse the tools
  • 43. Standards and GuidelinesThe AMIS / CUSTOMER.COM cookbookArchitectural issuesDevelopment How to‘sStandards and GuidelinesTips and TricksCode TemplatesSetting up Unit tests
  • 44. Software FactoryVersioning using SubversionADF BC Unit testing using JunitADF RC Unit testing using SeleniumJIRA for issue trackingContinuous Integration using HudsonMaven
  • 45. ConclusionForms Modernization can be Difficult100% Automated Modernization Doesn’t ExistIf Possible Use Tools (JHeadstart) to Help you ModernizeModernization goes Beyond Building Software
  • 46. Need to Know More ?Check out Steven Davelaars’ Session on JHeadstartSESSION 13 Wednesday 11:15 AM to 12:15 PMCheck out Sten Vesterli ‘s New Book
  • 47. ....and Thus Your Forms 'Automagically' DisappearedODTUG Kaleidoscope 2011 – Long Beach, CaliforniaPlease Fill Out Your EvaluationsLuc Bors, AMIS, The NetherlandsLuc.Bors@amis.nlLucBors@gmail.comFollow me on Twitter : @lucb_

Editor's Notes

  • #2: Process
  • #3: This session is A Forms Modernization Story Featuring JHeadstart Forms2ADF. It talks about considerations to make when you are about to decide whether or not to leave Forms and go for ADF. You will see the process of conversion step by step starting with the business case and ending at the new ADF application. You will hear about issues you run into when using Forms2ADF for automated conversion and you will get hints on how to use Forms2ADF and how to modernize your forms app.
  • #4: So a decision was needed: what to do with our aging app’s? Our business had a number of business-needs which were taken into consideration: The choice was made to rewrite our GUI and ADF was chosen for a number of reasons: New enterprise critical applications have an expected live span of about 10 years at least. Forms, however supported by Oracle, and without an End Of Live notice, will probably not be around as a vital technology anymore in 2020. So Forms was not an option. Furthermore, ADF ‘understands’ the database, something which cannot be said of all Java Frameworks. Also the guaranteed support from Oracle played a major role. By choosing the ADF technology stack we also wanted to make the technology switch for our developers as easy as possible. Although the choice to redesign our UI with ADF was made in 2007, we really started end-2009. In the meantime some of the original business drivers had become obsolete. The more technical drivers remained and became even more important.Four highly motivated old school Oracle developers where selected to become our first ADF-developers. These people all started in the first half of 2009 with either an extensive JAVA-curriculum at the Dutch Open University or with SCJP-certification (now: OCP, J).In October 2009 was the real start of our Forms2ADF project BTW: if you are interested in this card-set– ”drivers of change” deals with the driving forces in our future and is on sale at bol.com
  • #5: Lets start with the context of our project – what was our starting point, or to put it this way – “Where do we come from” ?two Local(Dutch) applications, created using Forms/Designer technology. In the early years functionality was needed fast, very fast. Luckily, Oracle Forms, was (and is) and extremely productive way of doing this.So our developers did a tremendous job in providing us with Forms to ‘maintain’ the data in the database tables. It was the wild west era of development. Authorisation was something to be added later, when necessary. Architecture was for the big cities, not for the wild west... Back then, an handful of employees had to have all access to all functionality. Luckily Forms requires you to log on. Otherwise this feature would also have been skipped.Our two main applications were developed using Forms Designer, by two teams. Each one using their own distinct coding standards, resulting not only in two distinct type of GUI’s but also in the in-exchangeability of developers between these two groups.So, we ended up with basically two distinctively different applications, made by two different lead developers, with their own vision on how to develop an application. Both applications where not designed to support business processes instead they were formed around the database tables, to maintain their data. The Oracle Developers were not interchangeable between both applications.I bet this never happens to you. ;-)----Furthermore, with the success of there was an increasing need for additional functionality, both within the existing applications as in new applications. The question arose what to do with our aging applications: redesign, refactor? And using what technology?-----Due to the increasing number of employees differences in culture arose between the Webshop(Java)-developers and Backoffice(Oracle)-developers.A decision was needed: what to do with our aging app’s? Redesign using the same technology was out of the question due to the End-of-Life Message Oracle had given.
  • #7: So: How did we take off on this ADF-adventure?All four selected developers received ADF11g- and JHeadstart–courses taught by our technology partner AMIS. The qualified professors in this course were Luc Bors and Lucas Jellema (one of the Oracle ACEs for ADF and SOA).After this initial course we started with an Proof of Concept. The aim of this PoC was to acquire some experience in order to be able to make sound architectural decisions after the PoC. And as in every PoC we did not throw everything we built away but started to uses them as building blocks in our ‘regular’ application. I’m sure you wouldn’t make such a mistake. During the realisation of the project a lot of these early ‘building stones’ were replaced by better and refactored functionality. In order to provide the business with the added value of the ADF-technology a decision was made to start with the realisation of new functionality. Furthermore, we planned a quick transition to production so that the results of all the investments, both in time and money, would be visible for all.
  • #8: After this training the team set out to do a PoC.In this PoC we wanted to investigate several things.1st : Is ADF Flexible2nd : Can we use JHeadstart3rd : Can we use Jheadstart forms2 ADF generatorThe answers where quit promising.We used Jheadstart to implement our authentication/authorization mechanismAnd also to use Forms2ADF Generator which is a feature of Jheadstart to automatically transfer forms modules to ADF.This approach prooved to be a good one. Jheadstart was not able to interpret the most complicated forms.We decided to use Forms2ADF Generator for the simple formsWe used it to get an idea of what Jheadstart makes of it and use these examples to build our own implementation.With the results of this PoC, we were ready to set of for the real modernization project.
  • #9: The starting point was an Oracle Forms application which had to be modernized.There are some very simple forms in there, but also more complex ones like the one ‘you see here’.Later on I will show you how we took on this challenge and what the result of this form looks like in ADF
  • #17: Timing : 2 minutesThis is one of the more complex forms that was modernized. We started with isolating the different layout components on the form. 1 Animate:Search Area2 Animate:Master Result Block Table3 Animate:Master Result Block Form4 Animate:Tabbed Panel5Animate:Detail Result Block (Form and Table)6 Animate:Extra Detail Result Block7 Animate: Show totals.8 Animate: the menu which was already covered in the previous partThe problem for this particular form is not the master detail part and the data that it is displaying. ADF offers masterdetail ‘out of the box’ and as a developer there is not much that needs to be done. We were able to use pretty straightforward ADF Business Components to get the data from the database and to display it in the application.More complex however is implementing layout containers, the functional search implementation and the PL/SQL functionality backing the buttons. Lets start with layout containers.
  • #18: When building the layout you need to know the ADF Layout Components.PanelSplitter and PanelStretchLayout components are typical components that we had to use in order to create the pagelyaout we needed. The panelTabbed component is a perfect alternative for the many tabbed containers that we had in the Oracle Forms Application.
  • #19: Timing :1 minuteSo the end result looks pretty similar to the original Forms Module.Animate: You can recognize all partsAnd only the search area is implemented a little different. This is mainly because we used dropdown boxes instead of a radiogroup.Notice the panel splitters that are used. Users can adjust the amount of space for their ‘functional content’.
  • #20: Migration of PL/SQL code is not possibleTry to put the PL/SQL code into the database whenever it’s possible.PL/SQL calls are supported in the ADF Framework.We used it extensively to convert existing Database Calls and to implement new ones.If you can’t transfer it to the database, then re-implement it in ADF.I’ll give you an example and explain this based on the implementation of search functionality.
  • #22: Like : WizardsAnd More
  • #24: ADF offers three (or actually four) ways of searching.ADF Query (and Quick Query) Components.ADF Search FormADF Parameter FormWe used all of these in our project. When to use which implementation depends on needs you have. ADF Query components is a very rich component and can be implemented very quickly (drag and drop). It however offers little flexibility, so if you need customization, you will get stuck in the end.The Search Form is less Rich but can also be implemented very quickly (drag and drop). The latter are all more or less zero code ADF Alternatives for searching.The ADF Search form even offers a zero code alternative for Enter Query / Execute Query (in form layout).The ADF parameter form is from an implementation point of view more difficult, but it offers you full flexibility. This is the component we used for the Search Area in the modernized form. We implemented a java method accepting all values that can be searched on. In this method the actual query where clause is created and applied. By taking this approach it is much easier to create conditional where clauses and to apply view criteria based on the parameters received by the method. In this way we could exactly reproduce the functionality use in the original forms application.
  • #26: We started with one big workspace.There are several disadvantages to this approach.First of all, you can end up with a very large workspace that takes forever to open in JDeveloper.Besides that, you will have multiple developers editing the same files and projects.After phase one we decide to split the application into multiple small applications.Advantages of this approach are:re-use if it is neededSmaller workspaces and there for faster workspacesEasier to work in parallel on multiple parts of the application.
  • #27: Timing : 1 minuteUsing these ADF taskflow libraries can compose your application from many small Workspaces containing just one taskflow.We used taskflows that render their content in pagefragments.These taskflows were deployed as ADF Taskflow libraries.And all these libraries come together in a big, lets call it, container app that knows when to render the correct taskflow.ADF Taskflow Libraries are jar files and can be used by an ADF Application.You simply add a reference to your application and you can use the taskflow.We used a dropdown menu to invoke all navigation in the application.In the menubar component there are menu components (the toplevel of the menu), and within these we have commandMenuItems.The commandMenuItems have an action attribute referencing our DynamicRegionManager (just a name, you can pick any name you like) that sets the taskflow Id. The region component is refreshed (ppr via PartialTrigger attribute) and renders the new functionallity.
  • #28: Timing : &lt; 1 minuteYou see the Dashboard, which is the default region and is displayed as an entry point for all users at startup.From there we use the dropdown menu for navigation.
  • #29: JDeveloper, which enables rapid component based development of Java EE applications.It provides you with 4GL-like productivity without jeopardizing the flexibility andopenness of the Java EE architecture.JHeadstart consists of three main components:• JHeadstart Runtime LibraryThe JHeadstart runtime contains reusable components that extend Oracle ADF.These reusable components implement Oracle ADF best practices that weredeveloped during custom development projects of Oracle Consulting.• JHeadstart Application Generator (JAG)Apart from the runtime components, JHeadstart provides significant design-timesupport. The JHeadstart Application Generator (JAG) is a powerful generator thatautomates the development of the Controller (JSF/ADFcconfig files), View (ADFFaces pages/fragments), and Model components (ADF data controls and databindings). The JAG is driven by XML meta-data that you create using JDeveloper(plug-in) wizards and JHeadstart property editors, providing you with adeclarative, 4GL-like experience in building Java EE applications. To help you toget started with the meta data, JHeadstart generates a first cut of the meta databased on your ADF Business Components, which can be retrieved from a UMLclass model or database tables.
  • #30: JHeadstart Forms2ADF Generator (JFG)In addition, JHeadstart offers you assistance in moving from the Oracle Formsworld to the Java/J2EE world. Using the JHeadstart Forms2ADF Generator, theForms .fmb files are read, and based on the Forms elements defined in the form,the JFG creates ADF Business Componenets, as well as the XML meta-data(Service Definition) required by the JHeadstart Application Generator. Afterrunning the JFG, you can then run the JAG to create a fully functional ADF webapplication, based on the definitions in the Oracle Form.
  • #39: After a while, actually after the PoC, we found that the way we architectured the application was not very flexible. We could have continued in that way, but we did not. We decided to take a different approach. All functionality developed after the PoC was build using the new architecture. The PoC functionality was recently refactored to also meet this new architecture.One to one Rebuild is weird. Not only can it be very difficult, but it doesn’t always make a lot of sense.First of all it is difficult and you will need to if put a lot of work in implementing functionality that was ‘easy’ to build in forms, but is more difficult in ADF. Don’t be afraid to discuss possible layout changes and minor functional changes. It can save a lot of time.The implementation of search behavior that I described earlier is a typical example.Second of all, if you do 1 on 1 rebuild, you don’t use any of the new web 2.0 components and functionality.If you know the ADF Components you can really build flexible and dynamic layouts with typical web 2.0 functionality.
  • #40: What functionality do users actually use in the forms application.Is there need to rebuild it all, or can we leave out certain features.Example: Searching a book on part of the title takes for ever in the backoffice database.Users know this. The way they work is: Surf to Website, Search on the website, copy ISBN, Search in backoffice via (Indexed) ISBN.Automated migration) for implementation like simple table or form functionality this can be true, but for more complex forms you need to find the best of both breeds. Partially re implement, partially automated but also
  • #42: Besides Architecture, Standards and Guidelines are essential when building an ADF application.Because ADF offers you zillions of possibilities it is important to document how certain features are implemented.Questions likeWhere do I put my buttonsHow do we implement SearchWhat alternative do I use for Forms Functionality a, and what for bHow many records do I show in a table.How is the layout of my tableHow many record can I select in a tableDo I use filters in a tableWhen can I edit records in a tableThese may look like simple questions, and the actually are, but if you do not set standards for this, your application will soon become a swamp for users, because every developer implemented it in his/her own way.During the project we documented lot’s of how to’s and best practices and guidelines in an ADF Cookbook.We can use this in future projects, and is also used as a reference and as technical documentation.
  • #43: There is a lot that cannot be fit into the timeslot we have here.I however have to mention the Software Factory. Usually you will not wait till the end of the projects for implementing this.Versioning, Unittesting and Continuous Integration need to be in place at the start of the project. We had unittesting and versioning setup at the start. Continuous integration was setup at a later stage because there was not a build server available.
  • #46: Process