In the case if you haven’t followed the discussion about “JDeveloper Vs Oracle APEX” on some of the APEX blogs out there.
How did all start?
Chris Muir, did a posting about “A career path for Oracle developers – consider JDeveloper!” some days ago. It contained some statements with high potential for a nice discussion For example that “real” developers who want to make big money and want to learn the “new” concepts “introduced” by Java should look at JDeveloper and not for example at Oracle APEX, because that’s not good for your career path.
His statements produced some echo in the APEX blogging scene. First John Scott wrote a reply posting on it, titled “JDeveloper versus APEX?” and a little bit later another follow-up by Dimitri Gielis titled “We shall not use APEX!?“. And as you can see from the comments on all three articles and a forum posting in the OTN JDeveloper forum, a discussion has started.
I haven’t posted a comment on one of the blogs yet. I first wanted to look how the “fight” about the pro’s and con’s is going on. Hmm, I still remember the good old time “IBM OS/2 vs MS Windows” – BTW, I was part of TeamOS/2
Just a quick statement from my side, I will write a real comment on Chris article.
[...] JDeveloper’s ADF will provide a higher educational stepping stone away from the old Forms market than Apex will, as it will teach you new languages, expose you to concepts of design patterns and software architecture [...]
I think he is referring to the design patterns of the “Gang of Four” and he also mentions the MVC pattern. To my knowledge they are not specific to Java or .Net, … Most of them can also be used in other languages like PL/SQL. Or the MVC patter about separation of User interface and Business logic. I can’t speak for other Oracle shops, but haven’t we always written PL/SQL packages for our business logical and just called them in Oracle-Forms or in a batch job? So what is the new concept here? Sure a lot of developers just put there code into the Oracle-Forms triggers and mix UI with business logic, but so can you also do in a Java environment. Just look at the first JSP/servlet Java projects. Good software architecture has nothing to do with a development language or a platform!
But one thing I want to mention here is that I have sometimes the impression of some “Java guys” out there (not Chris) which misinterpret some of the design/architecture patterns and who create “(database) independent” code/applications just to satisfy the technology, but without any business need.
They start to create several layers of interfaces/code between the Java business logic and the database, just to be able to say “My application is database “independent” and I can replace Oracle with XML files.”. (I don’t mention here that real database independence is really hard to achieve, just think about read consistency or locking).
I probably would understand that if you are doing product/tool development which you want to sell for different databases, but I suppose most of the Java development is done In-House. How often have you seen that the database is changed during a project??? So why all this interfaces/abstract classes/DAO’s, … (one time I counted 5 different java files/layers/interfaces/abstract classes for an entity object) just to satisfy the design patterns and the “Java” technology?
Why do Java developer tend to re-invent the wheel on the application server and don’t use the existing, proven and fast functionality of the database? I know, because then you are not “database independent”! Don’t use GROUP BY to sum up your data in the database, it’s much more fun pull all the data onto the application server and do it here…
I really have the impression that a lot of code on the application server is just there to satisfy the technology or the next (Java) “hype”. But what is the result? Complex architecture, lot’s of code and unmaintainable applications… Could that be one of the reasons why Java projects sometimes tend to take a little bit longer than supposed?
Ok, my comment got a little bit longer and it’s just one area which I covered
Now my final question. When we develop an application, do we want to spend our time at satisfying the technology or do we want to solve business problems? I think APEX helps me to concentrate on the business problem. What do you think?