Should you learn Spring or Oracle ADF?

My answer on Quora to “Should I learn Spring or Oracle ADF?”:

Oracle ADF is a specialty skill, Java Spring is a general skill. Java Spring should be your default choice, unless:

  1. You work in an company that has made Oracle ADF their strategic choice, or
  2. You come from a 4GL tool like Oracle Forms and don’t know much Java yet

With ADF, you get higher productivity but less control. It was created by Oracle to build their SaaS applications and allows you to build user-friendly applications quickly, as long as you are content to stay within the framework.

In general, developers like Java Spring better because it allows them more control and requires more code. Managers like ADF better because it allows developers to build applications faster. Developers normally don’t learn ADF unless their boss tells them to.

Link to Quora: Should I learn Spring framework or Oracle ADF?

Best of Both Worlds with ADF

I’m seeing a lot of interest in developing client-side applications based on one JavaScript framework or another. Today, the leading contenders are AngularJS (the old version) and Angular2 (the new version, of course, incompatible with the old). Oracle is also entering the game with Oracle JET.

For some strange reason, developers tend to compare Javascript frameworks to full stack frameworks like ADF, forgetting that someone, somewhere, must build the REST web services that JavaScript applications are based on.

ADF to the Rescue

In most JavaScript client projects I see, the REST services are built in plain Java turned into web services with JAX-RS annotations. For an ADF developer, this is obviously a wasteful way to build services, re-inventing lots of things that already exist in ADF (declarative validations, master-detail coordination, and many other things).

Fortunately, with ADF 12.2, we can now publish our ADF view object instances as REST web services. It is well described in the manual, and there is also a blog post with video by Shay Shmeltzer showing how it’s done.

As an ADF developer today, you definitely need to be able to publish your view objects as REST services. In this way, you can build most of the functionality fast with the power of ADF faces, and the small part of the application it might make sense to build in JavaScript can use the same business logic.


This post originally appeared in the monthly ADF Mastery newsletter. Don’t miss the next one, sign up here.

Which is the best career path: Oracle ADF or Java?

My answer on Quora to “Which is the best career path to choose, Oracle ADF, or Java?”

Concentrate on Oracle ADF. ADF skills are in high demand and pay better than pure Java skills.

Because Oracle ADF is a Java-based framework, you will need to learn some basic Java as you build you ADF skills. Once you land an ADF job, you will learn more Java as you work with ADF. This allows you to continue to pure Java or other frameworks if you are not happy with ADF.

Which is the best career path to choose, Oracle ADF, or Java?

Who should create Oracle ADF skins?

My answer on Quora to “Who should create Oracle ADF skins: Developers or designers”

If you are on the latest ADF version (12.2.1.x.x), you have access to the web-based Theme Editor. In this case, your designer should use this user-friendly tool to create the skin. It has some limitations, but the designer is best placed to work around these.

In earlier ADF versions, a CSS developer is needed to develop the skin, and the designer just produces a graphic in photoshop or similar. If you don’t have a specialized CSS developer, somebody will have to learn CSS, because ADF skinning uses all normal and some uncommon CSS features.

Who should override and apply Oracle ADF skin into pages developer or designer?

Five Minutes That Will Make Users Happy

My kitchen has a very nice range hood over the cooktop. It has a powerful  fan and beautiful brushed steel finish. And it has a user experience like most IT systems: Lousy.

Let’s think about what a range hood does. It has two main functions:

  1. Start the fan to extract grease and fumes
  2. Turn on the light over the cooktop

Because of the shape of a range hood, the buttons to operate it are typically placed in a row. A row of buttons has two good, easily found positions:

  1. To the far left
  2. To the far right


Two primary functions, two good button locations. It would not take five minutes of thought to allocate functions to buttons. Unfortunately, the engineers at ATAG did not spend those five minutes. Instead, they placed the button for the light 5th from left, 3rd from right. And what did the use the good right-hand position for? The rarely-used feature of resetting the filter cleaning warning. A button I press every three months at most.

Most IT project do not spend these five minutes of thought either. Large, professional organizations have a team of UX professionals, like the people I work with at Oracle. But even if you don’t have professional UX designers, every developer can spend five minutes thinking about the task the user wants to achieve.

Most IT systems are like my range hood: Just inconvenient enough to make users slightly annoyed every time they have to concentrate on an operation that should have been easy and obvious.

Next time you build a system, spend a little while thinking about your users before you code. They’ll love you for it.

Inflexible Security (MailChimp fail)

Maybe I shouldn’t have written about flexible security, because I immediately starting hitting inflexible security, locking me out.

Today’s fail is courtesy of, which I use for my newsletters. It’s OK that they decided they want a confirmation when I log on to my account from India, but it is not OK that they require a text message passcode with no other option.

I have my phone in flight mode, because I don’t want to pay extortionate India roaming charges. But the Millennials in Atlanta running MailChimp have decided that everybody always have their phone on. We don’t, and they don’t know their users.

Do you know your users? Are you offering appropriate security options?

One Visualization is Worth a Thousand Rows

One of the under-utilized killer features of Oracle ADF is the Data Visualization (DVT) compontents.

It is easy to build bad visualizations as Oracle themselves show in the documentation:

However, the commercial application that Oracle build with ADF (Fusion Applications, Enterprise Manager) obviously have benefited from the skills of professional visualization designers. These products use of visualizations well.

You application could probably benefit from some visualizations, too. Check out Status Meter and LED gauges as well as Spark charts. All of these are very compact and can fit into table rows, making a lot more information available to your users.


I covered ADF Visualizations in the latest issue of the ADF Mastery Newsletter. Sign up here for regular tips on how to learn and make the most of Oracle ADF:

Success Factor: Framework Longevity

I just read an interesting article about  Longevity (or Lack Thereof) in JavaScript Frameworks, and Brian Moschel makes the same recommendations I make to my customers.

Mainly: You do not want to pick the tool that’s hot this year.

hot_js_frameworks(picture from blog above)

The reason is that choosing this year’s hot framework is an unnecessary leap of faith that places your project at risk. What happens if you choose wrong? You’ll watch your application fall behind the times, or worse still, completely fail.

You want a framework that has

  1. Been around for a few years
  2. Still being used and improved

That might not be what your developers are dreaming of, but it is the prudent way of deciding. If you are a development manager, you are being paid to provide successful software to the organization, not to boost your developers’ CVs with the latest buzzwords.

Matching Your Database to Your Application

I’ve just been troubleshooting an ADF application that ran fine on one environment and not on another. After some searching, I discovered that a script had not been run on one of the environments so the database was different.

That reminded me of a simple database check that I often include in my applications: I simply calculate a hash value of all tables and views with an SQL statement like this:

select sum(
+ ora_hash(column_name)
+ ora_hash(data_type)
+ ora_hash(data_length)
+ ora_hash(data_precision)
+ ora_hash(data_scale)
from   user_tab_columns
where table_name != 'PS_TXN';

I’m explicitly exclusing the PS_TXN table, because ADF might create this table to store application module passivations.

Every time the database changes, I calculate this simple checksum and store it in a constant in my application. At a central place in my application, I can then run the SQL and compare to the constant. If they don’t match, I’ll write a warning to the log. I don’t want the application to fail if my database does not match, but I do want to get a hint to check the database structure.

I place this check in the prepareSession() method in the Impl class for my root application module(s).


If you are working with ADF Development, I encourage you to sign up for my free ADF Mastery newsletter.

ADF 12.2.1 New Features

Oracle has just updated their ADF Statement of Direction, announcing that ADF 12.2.1 will be out in 2015. Here is what they are promising for this release:

The Next Version of Oracle ADF

Oracle is planning to deliver the next version of Oracle ADF – 12.2.1 – as part of the next release of Oracle Fusion Middleware 12.2.1 in 2015. Some of the focus areas for this version include:

  • REST and JSON Support – including enhancement to the REST data control as well as the ability to publish business logic developed with Oracle ADF Business Components through REST interfaces.
  • Responsive UI Support – further enhancements to Oracle ADF to simplify and enhance support for responsive UI design and implementation.
  • Additional Oracle ADF Faces Components – new components, as well as enhancements to existing components, that further enrich the set of JSF components provided with Oracle ADF
  • JDK 8 support – aligning with the latest version of Java to support new language capabilities

I look forward to better support for REST & JSON – it will be a nice improvement if we can publish our business components as REST web services to consume in e.g. Mobile Application Framework.