Why should I use Oracle ADF (Application Development Framework)?

Intention of this blog is not to explain Oracle ADF or describe what are features within ADF, as one can get lot of white papers on Oracle website related to this. I  see lot of people over internet getting confused while understanding ADF layers. They do not understand why it have so many layers (MVC pattern and business components/service layer) and find ADF to complex to use.

Architecture – Is it Complex?

ADF Architecture

In blog assumption is you are familiar with ADF Overview. Rather then explaining different layer theoretically (Basic understanding read – ADF Overview), I will focus on industry problems and explain how different layers fit in. Before moving to scenario’s point I would like to make – While understanding ADF, please do not see it as UI framework only. Oracle ADF is “An end-to-end application framework that builds on Java Platform, Enterprise Edition standards and open-source technologies to simplify and accelerate implementing service-oriented applications”. ADF is

  • Solution to build UI (in no time, have various CRUDQ UI patterns/graph, customization etc)
  • Have flexible architecture to support various UI – Middle ware Integration
  • Provide framework to implement business component or to integrate with other platform/technology/framework.

It would be easy to learn ADF if you understand the Framework Objective. One approach to understand can be similar to learning Spring – Understand architecture, Core, Different layers and then focus on feature you are interested (e.g. specific component/feature Spring MVC, Batch, Security, Spring Social, Integration). While exploring ADF understand framework Objective, Architecture, Core, Different layers and then focus on feature you are interested. If you know the power of ADF you can do wonder within few days.

Industry Problem Vs ADF Layer

Scenario 1# (Simple): Requirement is to build component that capture User data (E.g. Details, Preferences, Comments, Address, Role, Org). We want design to be flexible  to support complex requirements in future.

Possible Approach: There can be different approach towards this problem. Simple and flexible one approach can be to have

                                                UI -> Business Layer (Data Object) -> Data Base

Note that in this scenario we are not having any data transformation requirement so for having “Data Object” (mapped with underlying DB schema) should be fine. You will find lot of REST application built on this pattern.

ADF (Application Development Framework) – Provide you flexibility to build application with minimal effort generating all above layers. It provides you flexibility to have data transformation layer (Scenario 2#) to support data aggregation, abstraction, manipulation or to represent entity based on requirement. ADF architecture is loosely coupled and you can decide how your business layer interaction needs to be I.e. business component can be Web Services, REST, EJB, Servlet, ADF Business Component Layer etc.

Scenario 2#:  Company what to launch online retail website to order/track vegetables within two week (lets say 25 – 30 Page). General Manager (outsourcing this project for development) want rapid development with robust, flexible solution. In this current requirement there is minimal business logic (mainly CRUDQ – [Create, Read, Update and Search] but in future there may be complex business logic). General Manager points that web development is being done for more then two decade so leverage existing software framework and get this done with minimum resources.

Possible Approach: Point which strike me above is  “Web development is being done for more then two decade so leverage existing software framework”. Currently there are approx. 40000 website going live per per day, it makes sense that we need framework which cater this problem. In above scenario all we want is

                  User Interface –> Data Transfer Object –> Business Layer –> Entity Object –> Data Base

In above design keeping Transfer Object Layer separate from Entity Layer makes sense. We need to do business logic for Order processing, Payment (calculation, payment processing), order tracking. This require framework to have flexibility for Payment gateway integration. This can be achieved via ADF within specified end date.

ADF will generate code for different layers in almost no time. It also provide you rich internet UI pattern for CRUDQ – [Create, Read, Update and Search] and graph, location etc. Developer need to focus on business implementation, while QA can start creating capturing objects for functional test case once UI screen is build (I.e. parallel QA/Development can happen — See Methodology “Test Driven Development”). Also ADF meets both Platform developer as well as Application Developer Perspective.

Core/Platform Developer Perspective: Above layers should be loosely coupled and have flexibility do implement custom behavior (at any layer). We also want cross cutting concern feature as transaction management, logging, validation and ii18n (internationalization).
Application Developer Perspective: I will define my database schema. Now there is minimum business so can we implement above logic can we do it using tool creating drag/drop and remaining code should be generated.

Other Scenario’s: There may be various Integration Scenario where ADF is well suited:

  • Want to create UI layer only and integrate with existing service layer
  • Want to have composite layer as you are integrating with 2 or more application (SOA scenario – can be 2 or more independent components) – Using ADF you can achieve Composite behavior at Application Module level (aggregate multiple View Object), ADF business component level or can have custom composite layer (in case application existing architecture uses Service Bus, composite web services)
  • Want to have rich internet UI as well as advanced feature like – “UI Customization at Runtime” (Integrate with WebCenter), “MDS Integration”, “Security – ADF Security Authentication”, “Responding to Application Events”, “Customize the Application Look and Feel with Skins”, “Partial Page Rendering (PPR) on a JSF Page” etc.

ADF Limitation: To know ADF limitation and known issues, Go to – “Known issues and limitations”. When using inbuilt ADF components one should explore usage, similar options and limitations, if any.

When to Use (Recommendation)

Fast Development: Want to build application within no time. This case will be best suited for small projects where you want to build application quickly and looking for end to end framework or build new UI and integrate existing service layer. Reason for saying this is once you understand ADF architecture/layers, can focus on ADF feature you want to explore.

Migration: To migrate existing application choosing ADF as option needs to be evaluated. ADF provide number of rich internet UI patterns and help in rapid UI development, so migrating application for UI scenario should be large (in terms of no of UI screens). In large application effort can be drastically minimized after identifying common usability pattern. As development scenario we can have 4 scenario stated above CRUDQ [Create, Read, Update and Search/Query]. For better usability (similar look and feel), Business Analyst/Usability Team can define similar look and feel. ADF have lot of inbuilt Usablity Pattern for CRUDQ, which can decrease development time drastically. Migration for small application just for UI might not be good idea (unless you have requirement to extend application in near future).

Rich Internet and Advanced Features: Rich Internet Feature, “UI Customization at Runtime” (Integrate with WebCenter), “MDS Integration”, “Security – ADF Security Authentication”, “Responding to Application Events”, “Customize the Application Look and Feel with Skins”, “Partial Page Rendering (PPR) on a JSF Page”.

Integration: Integrate your application into a SOA by firing events from your business components, invoke BPEL processes  or create Human Workflows

References:

Advertisements

One Response to Why should I use Oracle ADF (Application Development Framework)?

  1. AAtul says:

    Good article. This will help in comparative analysis while identifying technologies to be choosen for architecture solution implementation.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: