Monday, March 12, 2012

Learning from Fusion Applications Development

The purpose of this blog post is to get my feet wet with "the art" of Fusion Applications programming and of course learn best practices from Oracle in the overall application design and architecture for custom ADF Applications. In order to get there I downloaded the following components from Oracles eDelivery Platform:

* Oracle JDeveloper and ADF

* Oracle Fusion Applications Companion


Following the Fusion Applications Development Guide I installed the JDeveloper (nothing special here - like every other 11g JDev version). After starting JDev I installed a bunch of extensions wich are part of the fusion apps companion package.


After JDev Restart I have created a new app usgin the well known app template "Fusion Web Application (ADF)" opened the ViewController preferences and added the following Libraries


When you now create a JSF Page you are able to choose from the following Page Templates:


The UIShell based JSF page looks as follows


Taking a deeper look into the JSF template we can see a bunch of popup definitions


From a UI Pattern perspective I would imagine to see one common practice for popup but as you can see almost every tech. possible solution is in use


The UIShellMainArea template is for JSF Fragments has nothing special. It looks like


One interesting thing here is that there is another facet exposed which is not visible


To ease the development experience with the apps UI Shell a special controller exists that is exposed as datacontrol (UIShellController)


Further DC are




and many many more.

So now let's create a playground HRAppModule an drop a collection on the page


The apps extensions have additional support for

Dialog Details
Tree Table

I will try the table


Pressing "Continue" we are moved to the next interesting screen


After confirming with OK..unfortunataly the visual design is messed up


Never mind...under the hood the following is created


Can we run this without looking into the dev guide?

Lets try start the integrated WLS:

<12.03.2012 22:01 Uhr MEZ> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>

<12.03.2012 22:01 Uhr MEZ> <Warning> <JDBC> <BEA-001129> <Received exception while creating connection for pool "SearchDB": I/O-Fehler: Unknown host specified >

<12.03.2012 22:01 Uhr MEZ> <Warning> <JDBC> <BEA-001129> <Received exception while creating connection for pool "SearchDB": I/O-Fehler: Unknown host specified >

=> Solution: fixed the jdbc connection in $DH/config/config.xml. Just pointed it to a valid Oracle DB.

The start procedures moves on. Stops with the following exception:

12.03.2012 22:17 Uhr MEZ> <Error> <HTTP> <BEA-101020> <[ServletContext@8785308[app:FusionAppsCustomization module:FusionAppsCustomization-ViewController-context-root path:/FusionAppsCustomization-ViewController-context-root spec-version:2.5]] Servlet failed with Exception

oracle.jbo.NoDefException: JBO-25002: Definition oracle.apps.fnd.applcore.uicomponents.view.DataControls of type null is not found.


at oracle.adf.model.binding.DCDataControlConfigDef.findDefObject(

=> No solution yet! One more great example of bad exception handling in ADF ;)

Lessons learned so far

- UI Popups: The different popup construction practices may come from different reusability contexts.
- UI Popups: Put global available popups into the page template
- DataControls for UI specific operations
- Usage of declarative components to simplify/standardize ui development
- Of course BTFs where ever you look
- AND: Although Fusion Apps developers have same JDeveloper it is enriched with great extensions (by the cost of performance. The IDE performance is much worse than the pulicly available JDev)

ADF Enhencement requests
- The default for af:popup/contentDelivery attribute should be changed from: "lazy" to "lazyUncached". Fusion apps template confirms this!
- Dear Oracle, please integrate the Applications extensions for: Table, Panel, Popup.....into default JDev Wizard.