Angels in the Architecture: An ADF Application Architectural Blueprint

Report
ADF EMG
• A place to discuss best practices and methodologies for
JDeveloper ADF enterprise applications
• Founded mid-2008 by Chris Muir, now 650+ members,
staffed by many ACE Directors & ADF experts
• Focus is Fusion Tech Stack (ADF Faces, ADF BC)
• Online forum plus sessions at major Oracle conferences
(OOW, ODTUG, UKOUG, DOAG…)
<presenter,
organisation>
http://groups.google.com/group/adf-methodology
SAGE Computing Services
Customised Oracle Training Workshops and Consulting
Angels in the Architecture
ADF Application Architectural Patterns
Chris Muir
Consultant – “I do Oracle Stuff”
http://one-size-doesnt-fit-all.blogspot.com
 Oracle ACE Director
Angels in the Architecture
ADF Application Architectural Patterns
Assumptions & Prerequisites
11g
ADF Business Components
ADF Faces RC
Task Flows
ADF Libraries
Resource Palette
Angels in the Architecture
Picture removed to reduce ppt download size
Design engineering is more than a mere balancing act between finding
the best options among a sea of possibilities, and then implementing
those options through the careful orchestration of available resources. To
fully manage the challenges of the design process, it is also necessary
to develop an instinct for choosing design paths and system
configurations that provide some measure of flexibility. This
maintains wiggle room as projects advance toward completion, often
creating “an angel in the architecture” to serve as a countermeasure
for situations in which “the devil is in the details.”
http://rfdesign.com/mag/radio_flexibility_designers_best/
ADF Architectural Patterns
Picture removed to reduce ppt download size
ADF Architectural Patterns
Part 1 Single Application
Part 2 Single UTF-BTF Application
Part 3 Master Application, Multi BTF Application
Part 4 A Side Note on Reuse
ADF BC, Skins, Pate Templates and more
Part 5 Multi Master Application, Multi BTF Application
Part 6 The “Services Pattern”
[Part 7 ...... Fusion Applications]
Part 1: Single Application
Picture removed to reduce ppt download size
Characteristics
Application
Model
Entity
Object
Entity
Object
View
Object
View
Object
AppModule
ViewController
Unbounded Task Flow
jspx
jspx
Advantages
Simple architecture
Self contained, no dependencies, easy to build & deploy
Suited for small applications, teams & raw beginners
Disadvantages
Developers can:
Break each other’s work
Easily ignore modularization
Poor separation of concerns &
responsibilities
Re-architecting difficult
Picture removed to
reduce ppt download
size
Yet More Disadvantages
Complex transactions require careful ADF BC design
(unsuitable for beginners)
Poor mapping of business processes to technical
solution inhibits design
Build and
deployment is an
all or nothing affair
Poor separation of
concerns leads to
difficult module
testing
Picture removed to
reduce ppt download
size
Part 2: Single UTF-Multi BTF App
Picture removed to reduce ppt download size
Characteristics
Application
Model
Entity
Object
Entity
Object
View
Object
View
Object
AppModule
ViewController
Unbounded Task Flow
jspx
jspx
Bounded
Task Flow
Bounded
Task Flow
jsff
jsff
jsff
jsff
Advantages
Relatively simple architecture
Sophisticated BTF transactions without ADF BC AM trickery
Improved design: mapping between business process to
BTFs
Improved ability to test modules and
re-architect
Disadvantages
Developers can tightly couple
accidentally
Version control tug of war
Build & deployment all or nothing affair
Picture removed to
reduce ppt download
size
Part 3: Master App, Multi BTF App
Picture removed to reduce ppt download size
Characteristics
Common ADF BC Application
Model
Entity
Object
Entity
Object
View
Object
View
Object
View
Object
View
Object
Entity
Object
Entity
Object
AppModule
ADF Library JAR
Master Application
BTF App
BTF App
BTF App
Model
Model
Model
View
Object
ViewController
Unbounded Task Flow
jspx
jspx
View
View
Object Object
View
View
Object Object
View
Object
AppModule
AppModule
AppModule
ViewController
ViewController
ViewController
Bounded
Task Flow
jsff
BoundedBounded
Task Flow
Task Flow
jsff
ADF Library JAR
jsff
BoundedBounded
Task Flow
Task Flow
jsff
ADF Library JAR
jsff
Bounded
Task Flow
jsff
ADF Library JAR
Advantages
Full power of BTFs
Suited for large applications & developer teams
Excellent separation of concerns
Each BTF is self contained, loose coupling
Developers can become responsible for single BTF
Team Leader for Composite Master
Easier to reuse BTFs
BTFs can be tested standalone
Disadvantages
Complex(er-er) architecture
ADF BC security is not possible
Dependency management is now an issue
Not easy to build & deploy (-> ojdeploy)
TF transaction/scope options must be perfect
Not suitable for beginners
Part 4: A Side Note on Reuse
Picture removed to reduce ppt download size
Reuse is part of the Framework
Common Application
BTF Application
ModelBTF Application
Model
Framework
extensions
ADF Library JAR
Entity
Object
Entity
Object
Master Applications
Model
View
View
Object
Object
View
View
Object
Object
AppModule
AppModule
View
Object
View
Object
AppModule
BTF Templates
ADF Library JAR
ViewController
Declarative Components
ADF Library JAR
Bounded
Task Flow
jsff
Page Templates
ADF Library JAR
ViewController
Bounded
Task Flow
Bounded
Bounded
Task Flowjsff
Task Flow
jsff
ViewController
jsff
Unbounded Task Flow
Skins
JAR
jspx
jspx
Part 5: Multi Master App, Multi BTF App
Picture removed to reduce ppt download size
Characteristics
Master Application
BTF Application
ADF Library JAR
BTF Application
ADF Library JAR
BTF Application
ADF Library JAR
BTF Application
ADF Library JAR
BTF Application
ADF Library JAR
Master Application
Advantages
Total reuse of BTFs
Disadvantages
BTFs need to be very flexible
Reuse must be a key design concept & concern
Dependency management nightmare
Part 6: The Services Pattern
Picture removed to reduce ppt download size
OrganisationsList.jsff
Common
Organisations Services TF App
common.model
taskflow.org.model
Organisations
Entity Object
Common
Model.jar
OrganisationsView
View Object
OrgAppModule
common.taskflow
Common
TaskFlow
Template
.jar
taskflow.org.view
OrganisationsList BTF
common.deccomp
Common
DecComp
.jar
OrganisationsList.jsff
OrganisationsList
OrganisationsForm.jsff
Common
Organisations Services TF App
common.model
taskflow.org.model
Organisations
Entity Object
Common
Model.jar
OrganisationsView
View Object
OrgAppModule
common.taskflow
Common
TaskFlow
Template
.jar
taskflow.org.view
OrganisationsList BTF
common.deccomp
Common
DecComp
.jar
OrganisationsList.jsff
OrganisationsForm BTF
OrganisationsForm.jsff
OrganisationsForm
OrganisationsList.jsff
Edit
Back
OrganisationsForm.jsff
mon
model
ations
bject
askflow
eccomp
Common
Model.jar
Organisations Services TF App
Organisations Composite TF App
taskflow.orgserv.model
taskflow. orgcomp.model
OrganisationsView
View Object
OrgAppModule
Common
TaskFlow
Template
.jar
Common
DecComp
.jar
taskflow.orgcomp.view
taskflow.orgserv.view
Orgs Composite BTF
OrganisationsList BTF
OrganisationsView.jsff
OrganisationsList.jsff
Region
Edit
Back
OrganisationsForm BTF
OrganisationsEdit.jsff
OrganisationsForm.jsff
Region
OrganisationsHeader.jsff
EventsList.jsff
Organisations Services TF App
Events Composite TF App
Events Services TF App
taskflow.orgserv.model
taskflow. orgcomp.model
taskflow.evtserv.model
OrganisationsView
View Object
EventsView
View Object
OrgAppModule
EvtAppModule
taskflow.evtcomp.view
taskflow.orgserv.view
EventsComposite BTF
OrganisationsHeader BTF
EventsView.jsff
OrgHeader.jsff
OrganisationsHeader
Region
OrganisationsList BTF
EventsList
Region
OrganisationsList.jsff
Edit
OrganisationsForm BTF
OrganisationsForm.jsff
taskflow.evtserv.view
EventsList BTF
EventsList.jsff
Back
EventsEdit.jsff
Region
EventsForm BTF
EventsForm.jsff
OrganisationsHeader.jsff
BookingsList.jsff
Organisations Services TF App
Bookings Composite TF App
Bookings Services TF App
taskflow.orgserv.model
Taskflow.bookcomp.model
Taskflow.bookserv.model
OrganisationsView
View Object
BookingsView
View Object
OrgAppModule
BookAppModule
taskflow.bookcomp.view
taskflow.orgserv.view
BookingsComposite BTF
OrganisationsHeader BTF
BookingsView.jsff
OrgHeader.jsff
Region
OrganisationsList BTF
OrganisationsList.jsff
OrganisationsForm BTF
OrganisationsForm.jsff
taskflow.bookserv.view
BookingsList BTF
Region
BookingsList.jsff
Main Application App
app.model
App.view
Unbounded Task Flow
Page3.jspx
Page1.jspx
Page2.jspx
Region
Region
Organisations Composite TF App
Events Composite TF App
Bookings Composite TF App
taskflow.orgcomp.model
taskflow.evtcomp.model
taskflow.bookcomp.model
taskflow.orgcomp.view
taskflow.evtcomp.view
taskflow.bookcomp.view
OrgsComposite BTF
EventsComposite BTF
BookingsComposite BTF
OrganisationsView.jsff
EventsView.jsff
BookingsView.jsff
Region
Region
Region
Region
Region
Region
Region
Advantages
Extreme reuse
Patterns start to appear in BTFs themselves
Disadvantages
Not for the feint hearted
Lots of unnecessary requerying
data
Overcomplicates even simple
applications
Guidelines
Use fragments and regions
Services should be promiscuous with transactions and
data control scope
Control overall transactions/data control scope from
composite task flows
If needed, wrap composites in composites
Reuse must be a “mindset”, not a “nice to have” if you
adopt this
Reuse must be considered at the requirements level,
just not the technical level
Part 7: Fusion Applications
Picture removed to reduce ppt download size
Oracle ADF: Best Practices From Fusion Applications Teams (OpenWorld 2009)
http://www.scribd.com/doc/21018676/Best-Practices-From-Fusion-Applications-Teams-OpenWorld-2009
Conclusion
Picture removed to reduce ppt download size
SAGE Computing Services
Customised Oracle Training Workshops and Consulting
Questions and Answers?
Presentations are available from our website:
www.sagecomputing.com.au
[email protected]
[email protected]
http://one-size-doesnt-fit-all.blogspot.com
Twitter: chriscmuir
Linkedin: http://au.linkedin.com/in/chriscmuir
Further Reading
Inter-region communication techniques
Contextual Events
http://download.oracle.com/docs/cd/E14571_01/web.1111/b31974/web_adv.htm#CACJBFGI
JDev 11g: Programmatic Contextual Events
http://one-size-doesnt-fit-all.blogspot.com/2010/08/jdev-11g-programmatic-contextual-events.html
Master-child BTF chaperone – a contextual event alternative
http://one-size-doesnt-fit-all.blogspot.com/2010/09/master-child-btf-chaperone-contextual.html
Task Flow transactions and ADF BC Application Module considerations
ADF Regions and Nested Application Modules to Improve Performance
http://andrejusb.blogspot.com/2010/06/adf-regions-and-nested-application.html
How to Reduce Database Connections and Reuse ViewController Layer
http://andrejusb.blogspot.com/2010/10/how-to-reduce-database-connections-and.html
JDev 11g, Task Flows & ADF BC – the Always use Existing Transaction option – it's not what it seems
http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-always-use.html
JDev 11g, Task Flows & ADF BC – one root Application Module to rule them all?
http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-always-use.html

similar documents