Wednesday, December 19, 2007

As announced before, on Monday I did a presentation together with Lucas Jellema about the differences in APEX and ADF.

On the right you see the picture I used on the first slide. You don't know? Does David (APEX) and Goliath (ADF) rings a bell?

The goal was not to "tackle" each other, but show the audience both technologies. We had a lot of fun! Both Lucas and myself are very passionate about "our precious", so once and a while we teased each other. The 80 people had some good laughs, the atmosphere was very energetic, something you can expect of a good "fight" ;-)

So what did we do?

Michiel Jonkers was the host and he welcomed everybody, prepared the audience for the evening and introduced both Lucas and myself.

Then I started with an Introduction about Oracle Application Express (about 30 mins). Where did it come from? How does the architecture look like? And why should you use APEX?Then it was time for Lucas to do the same for ADF.

During the preparation we discussed how we would do it and finally decided to start from the same ERD and try to create a survey application in 6 hours. We would see how much we could do in that amount of time. I was impressed with what Lucas did in that amount of time in ADF (and JSF). A few years ago I worked with BC4J, so I knew a little bit of it, but I must say they let the product evolve largely.

So we both demonstrated our application and explained how we did it. You can see the application I made here. The presentation (with in it the break down of the time used to create the application) you find here.

After the break, with some great food, we both explained how you can start with both products and showed how to create an application.

At the end we had the Q&A. Some questions are always coming back: "When shouldn't you use APEX/ADF?", "Does APEX also work for large applications?", "What about Business Logic" etc.

I had a great time! If you were there I hope you enjoyed it as much as I did.

PS/ Some others blogged about it too... Douwe Pieter van den Bos here and Marco Gralike here. If I missed yours, feel free to add a link in the comments. I believe Michiel Jonkers is also going to blog about it.

I like to thank you guys for the wonderful "match" of Dec 17th between ADF and APEX.The big question is off course: who is the winner?!?

Well that looks like the question that I encountered a few months ago on a forum."What is better a screwdriver or a hammer?"A beautiful question (and total ridiculous if you don’t know anything about environment, requirements etc. etc.).

Let us not try to answer that question and let me give some remarks/comments (even doubts) about both products:

-ADF-I agree with Lucas that ADF has quite a long history. But compared to Designer/Forms I doubt on it productivity. May because I am a D2K dinosaur and I am (to) fresh from the ADF course but this opinion is shared with the 12 other persons from the course. Personally telling why ADF is so stabile and just mentioning Jheadstart is not quite fair. Jheadstart is not standard included in ADF. (Actually I think it should). In my honest opinion it was Jheadstart against Apex. (Lucas indicated when every thing has to be done from scratch in ADF it would be probably 3 weeks). And if we consider Jheadstart the installed base is limited to 10 a 20 licenses in the Netherlands. And if I am correct we already had several technology switches in JHeadstart (UIX->Struts->ADF). That makes its 'stability and portability' quite relative...

-APEX-My mistake with Apex is that I was biased even prejudiced. Probably because of my disappointment with WebDB, I didn’t investigate HTMLdb possibilities fully. I didn’t notice that the APEX community (and product) was growing so fast. And that without Mr. Oracle is pushing... My (first) impression of APEX was, "A nice tool for simple Application’s". Now I know that APEX is capable to handle complex applications with a lot of users and large volume data. And if we keep data related logic and business rule in the database (server concentrated or "Fat Database" to use Toon Koppelaars words). It isn’t important what level of complexity the client handles. In that philosophy we target on "thin clients". What I do wonder about APEX is scalability! How do we scale? I don’t see solutions like additional application servers and load balancers. With the new architecture has to be done in the database (RAC?) or faster hardware (with more memory resources). If Dimitri would address this topic I would be grateful.

Basically what I am saying is: Before choosing a tool you need to know what you want to make. And what are the targets? Database independency?! Well in that case neither Apex nor ADF will be favorite I guess. But in an Oracle workshop with "Oracle techies", I believe APEX will have its place.

>With the new architecture has to be>done in the database (RAC?) or>faster hardware (with more memory>resources).

APEX scales with the database, so as you mentioned you would have to use RAC or faster hardware to scale if you are CPU bound. But remember, most time there is still a lot of potential to tune the code, and with APEX you can easily do that. You can use all the tuning features Oracles offers. BTW, APEX doesn't need much resources, have a look at Statistics on apex.oracle.com for a bigger system. Most inhouse systems will never be as big.

I have experience with RAC in a heavy duty OLTP environment. It's with online transaction systems for the lottery industry (Lotto 6/49, ...). Not with APEX, but in my opinion it's not APEX which would fail in such environment, it's the application. If you design such a big application, you have to design it for RAC to be aware of some limitations/bottlenecks in such a configuration. But it always depends on the application how easy it is to move to a RAC and get scalability.

BTW, if you design your application to have a one table hot spot, you will have the same problems in all your user interface technologies, independent if it's APEX, ADF, whatever, because the database will be the bottleneck.

Your feedback is much appreciated and what you write is basically what I assumed.Please consider however that sometimes one is involved in the data model design and unfortunately in other times one just has to accept it "is as is".

That is for me the reason to be cautious to move to RAC for scalability reasons.I agree it is bit "off topic" what Apex basic's concerns, but scalability should be on one mind when adapting a certain technology.And in APEX case there are just limited options to scale, but maybe these options are more then enough.

I suggest that I will follow Nolan’s learning curve and publish my APEX experience on this Blog. Well, Happy Holidays and a Prosperous New Year to you all.

Scalability is one of "the" questions when discussing APEX for production systems.

I agree you can use RAC, but as Patrick already said, you should develop to that, as it will have some consequences too.

I would try to use the full capacity of the database. Next to the many tools to look at performance (AWR, ASH, trace, ...), you've some other nice features which benefit APEX. In 11g you've for ex. native compilation and PL/SQL Result cache.

As a large APEX application example: apex.oracle.com has over 10.000 workspaces, over 27.000 distinct applications, 1.400.000 page views/week and this is running on a Dell PowerEdge 1950 – with 2 dual core 2.33GHz processors and 16GB RAM.