Skip to main content

Book Review : Oracle ADF Enterprise Application Development – Made Simple

On my way to Los Angeles (Long Beach) for KScope 2011 (12 Hours in an airplane) I had plenty of time to do some reading and writing.The book I read was an only very recently (june 2011) published ADF Book. This is not a technical deep dive into ADF, but it focuses on the process of application development.

The book is written by Sten Vesterli an Oracle ACE Director and it is absolutely a good read.

When reading I found myself in an environment that I recognize from the many ADF projects that I have been involved in. Many of the questions that newbie ADF Developers have are answered in this book. The book describes the development process, starting with an ADF PoC, all the way to testing, packaging and delivering the application to the end users. You also get hints on how to find more info via google. This might actually work better then providing direct URL’s for reference.
Here’s a short overview of the content.

Chapter 1: The ADF Proof of Concept

The proof of concept chapter gives a brief ADF Primer. Next you learn about how to setup a Proof of Concept for ADF and what goes in that Proof of concept. The chapter continues with actually guiding you through the Proof of Cobcept. While reading you learn how to build your first ADF application, in order to convince your boss that ADF has what it takes to build the next generation” .

Chapter 2: Estimating the Effort

How much will it cost and how long will it take. Boy, do I get that question a lot. Luckily I know by now but I had to find out the hard way. Chapter two provides you with some guidelines on how to make an estimate that is as accurate as possible. A valuable remark is the one where Sten tells you to take only 50% efficiency for every one as long as you don’t have any reliable data on efficiency. Gather that data during your first ADF Projects.

Chapter 3: Getting Organized

When starting on ADF, organizing the team an be tricky. In this chapter Sten describes what expertise is nesecary in an ADF project. You will also learn about the tools you need. No not JDeveloper, but tools like versioning tools, issue tracking tools, tools for collaboration and tools for automating builds. Finally there is a part dedicated to naming conventions.
The part on Graphics User Interface Designers refers to the ADF Rich Client online demo, where they can see how ADF RC components work. Sten doesn’t mention the Visio Stencils provided by oracle at the sample code site. You might want to take a look at these visio stencils. I blogged on this on my personal Blog. You can find that post here These also can give you a helping hand when designing the User Interface.

Chapter 4: Productive Teamwork

This chapter talks about team work, and how you can use the JDeveloper Oracle Team Productivity Center Extension. This makes it very easy to work in a team where not all developers are actually working at the same physical location (hint hint ;-) ). The final part covers the use of subversion from within JDeveloper.

Chapter 5: Prepare to Build

First time that I actually hear (or in this case read) someone say out loud that you should base all your taskflows on taskflow templates. Finally it is written down somewhere. It is something that I strongly advise as well. Read more on this in the first pages of chapter 5. Chapter 5 continuous with more on templates and framework extension classes. You really learn what you need to setup before you can start building. And believe me, you don’t want to be found in a situation where you have to create extension classes after you started building your app.

Chapter 6: Building the Enterprise Application

This chapter describes how to use Framework extension classes that you created in the previous chapter, and how to create and use ADF Libraries for both Model and ViewController (read Taskflows). Read the remark on page 161 very carefully, and don’t you ever forget that remark. I ran into the issue several times, and i t can be very hard to resolve this issue. It is very good that this note is in the book. I’ve never seen this in any book before, and I think you can’t even find it on the forum. The ADF_EMG discussed the issue briefly I think. The chapter also describes how to bring together all Taskflow libraries in the MasterApplication, and how to work with menu’s, dynamic regions and how you can switch between taskflows in this dynamic region.

Chapter 7: Testing your Application

The testing part. Why test software anyway ? Read it and weep. You will learn how to create test for all parts and aspects of your ADF Application. From Business Components with JUnit, to the ADF Faces part with Selenium (which in fact is a very nice tool as long as you don’t use browser popup like the ones invoked by the old fashioned ADF Dialog framework). Also read how to test passivation / activation, and how to use JMeter for stress testing.

Chapter 8: Look and Feel

This chapter is largely devoted to the new Visual Skin Editor, which was released just in time to make it into the book (although based on a pre production release but that doesn’t make it less interesting at all. Also worth mentioning is the passage about resource bundle skinning. Not many starting ADF Developers know that you can actually adjust built-in labels by using this technique.

Chapter 9: Customizing the Functionality

Learn how to use MDS for customization.

Chapter 10: Securing your ADF Application

Here Sten describes how to implement security. Especially the part on “implementing data security” is a valuable section. Also the usability hint on page 313 is nice. Use the #{securityContext} to toggle the visible and/or rendered attribute.

Chapter 11: Package and Deliver

The use of ANT and ojdeploy is described very well. The downside of using ojdeploy is printed in the note at page 338. I have had some customers that didn’t want me to do that at all What strikes me however is that Maven is not mentioned at all in this chapter. As a matter of fact, Maven is only mentioned once in the book, on page 99, where you can find the URL ( ) I know that at the time of writing Maven support was not yet integrated in JDeveloper, but neither was the Visual Skin Editor that was described in chapter 8. I really think this is a missed chance. You must try and read some docs about Maven.

Appendix: Internationalization

In the final chapter, or appendix, you learn how to internationalize (i18n) your application. I’m still wondering why this is an appendix instead of a ‘normal’ chapter.


All in all this is an excellent book, or even better ‘a must read’, if you are about to develop your first (or even 2nd or 3rd) ADF enterprise application. It really helps you to understand how to approach ADF enterprise application development.
By reading this book, it doesn’t get simple but sure becomes a lot less complicated. Thanks Sten for writing this for all of us out here. All in all an excellent addition for the ADF Book Shelf.

X-Post (originally posted here


Popular posts from this blog

ADF 12.1.3 : Implementing Default Table Filter Values

In one of my projects I ran into a requirement where the end user needs to be presented with default values in the table filters. This sounds like it is a common requirement, which is easy to implement. However it proved to be not so common, as it is not in the documentation nor are there any Blogpost to be found that talk about this feature. In this blogpost I describe how to implement this.

The Use Case Explained
Users of the application would typically enter today's date in a table filter in order to get all data that is valid for today. They do this each and every time. In order to facilitate them I want to have the table filter pre-filled with today's date (at the moment of writing July 31st 2015).

So whenever the page is displayed, it should display 'today' in the table filter and execute the query accordingly. The problem is to get the value in the filter without the user typing it. Lets first take a look at how the ADF Search and Filters are implemented by the f…

ADF 11g Quicky 3 : Adding Error, Info and Warning messages

How can we add a message programatically ? Last week I got this question for the second time in a months time. I decided to write a short blogpost on how this works.

Adding messages is very easy, you just need to know how it works.
You can add a message to your faces context by creating a new FacesMessage. Set the severity (ERROR, WARNING, INFO or FATAL ), set the message text, and if nessecary a message detail. The fragment below shows the code for an ERROR message.

1: public void setMessagesErr(ActionEvent actionEvent) {
2: String msg = "This is a message";
3: AdfFacesContext adfFacesContext = null;
4: adfFacesContext = AdfFacesContext.getCurrentInstance();
5: FacesContext ctx = FacesContext.getCurrentInstance();
6: FacesMessage fm =
7: new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, "");
8: ctx.addMessage(null, fm);
9: }

I created a simple page with a couple of buttons to show the result of setting the message. When the butto…

How to: Adding Speech to Oracle Digital Assistant; Talk to me Goose

At Oracle Code One in October, and also on DOAG in Nurnberg Germany in November I presented on how to go beyond your regular chatbot. This presentation contained a part on exposing your Oracle Digital Assistant over Alexa and also a part on face recognition. I finally found the time to blog about it. In this blogpost I will share details of the Alexa implementation in this solution.
Typically there are 3 area's of interest which I will explain. Webhook Code to enable communication between Alexa and Oracle Digital AssistantAlexaDigital Assistant (DA) Explaining the Webhook Code The overall setup contains of Alexa, a NodeJS webhook and an Oracle Digital Assistant.
The webhook code will be responsible for receiving and transforming the JSON payload from the Alexa request. The transformed will be sent to a webhook configured on Oracle DA. The DA will send its response back to the webhook, which will transform into a format that can be used by an Alexa device. To code exposes two REST …