Friday, February 12, 2010

FAQ: Why should I use Oracle ADF for application development?

Examining JDeveloper Version:

As the fusion developer guide states 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."

So what does this mean and what are the benefits from my personal point of view? I will try to give an satisfactorily answer.

  1. At its core ADF couples loosly different technologies by its ADF binding layer and exposes business services uniformly through data controls for the frontend developer. The following business services in the backend and user interface frontends are supported:
    From the architectural point of view further technologies can be integrated through custom data control implementations, e.g JSON Data Control, XML Data Control, etc.
  2. No matter which type of backend technology you want to use (POJO, EJB3/JPA, ADF BC (based on DB tables or service data objects), WebService, Placeholder) the declarative ui development through data controls abstracts from the underlying technical details.
  3. Write ONCE your business service and use it for API provisioning (Web service, REST) and UI (Web, Mobile, Desktop, Office)
  4. With ADF it is easy to expose your Software as a Service (SaaS). Whether as ADF Taskflow with tight integration capabilities in Oracle WebCenter or through JSF portlet bridge as standard based JSR 168 Portlets. In analogy to service registries I think there will be someday an easy to use Taskflow registry (better than resource catalog;-) from which you can compose your application -> Improved WebCenter.
  5. Abstract and easily "canonicalify" your data model through Service Data Objects (SDO). That way you can reuse business components across diffrent departments and abstract from the underlying persistence store.
  6. Integrate your application into a SOA by firing events from your business components, invoke BPEL processes or create Human Workflows
  7. Easily push data to the client by Oracles Active Data Service technology.
  8. Based on JSF standards as the front end developer you don't have to care about which specific rendering technologies to use. As an example take a look at DVT (visualization) components. The usage of the components remains always the same, but the output can be configured: PNG or Flash. Someday HTML5 or JavaFX or whatever might be rendered. As Application Developer you just will get those features by updating to a new ADF Version without the need to know how the underlying rendering technology works.
  9. Personalization: With ADF it is easy to let the application users customize the ui for their needs. Those runtime customizations are persisted across the session through Meta Data Services (MDS). Beyond this it is possible to create seeded customizations for different sites or industries.
  10. Declaratively bind security constraints to application roles. Depending on infrastructure just map the enterprise roles (users, groups) to the application roles. Furthermore: if deployment is planned on the Oracle WebLogic Server it is really easy to integrate with almost any authentication provider: OID, OpenLDAP, ActiveDirectory, etc....

As the name suggests ADF simply was invented for exactly what you want to do: application development;-)

If you do not have any of the above requirements and prefer coding instead of dragging and dropping then you are well of with a more lightweight framework. In the Java world take a look at

  1. Playframework
  2. Grails

Those frameworks are really cool and make a lot of fun to develop with - or should I say "to play with".

Of course there are some reasons for: "Why I should NOT use ADF for application development"

  1. JDevelopers performance and stability is really poor in comparison to every other well Java IDE.
  2. Integrated WebLogic server takes 3 minutes to startup. With every new release it seems that the startup time increases.

Further information