views:

4259

answers:

13

Hi all. I believe we're moving to Oracle Apex for future development. I've read about Oracle Apex on wikipedia and it's pro and con. It seem to me the con outweigh the pro but maybe I'm wrong. I get the sense that Oracle Apex is for DBA with little or no programing knowledge to setup a web app quickly sort like MS Access for none programmer.

If you have Oracle Apex working experience, can you share your thought? From Wikipedia's entry, it doesn't seem like you need to know any programming language at all but just the PL/SQL?

edit: Is Oracle Apex scalable? Can it handle traffic like Facebook's size?

Thank.

Jack

+2  A: 

On my project, we use Oracle APEX for internal views of our system. It works very well for that purpose.

There's no programming required. PL/SQL and even SQL are optional. As a result, our DBA and operator can mold the view to their liking.

On the downside, if there's a feature you need which is not programmed into the system, it's very hard to add it. For instance, we wanted to color-code our output and have not been able to do that.

I would not want to have a customer-facing site built on APEX.


On the question of scalability, one nice thing about APEX is that it's built on Oracle. Focus on writing good SQL and designing the tables properly, and things should scale just fine. I'd be more concerned about getting enough users for scalability to be the problem.

Jon Ericson
I fear that is the case. The project will be used by customer's customers. From wikipeida's entry it seem to be able to scale to thousand users or more but the con is like what you say and difficult to debug as well.
Jack
By the way, I have no experience with customer-facing sites built on Apex or otherwise. I addition, I'm sure those with a good knowledge of the tool will get more out of it than I did.
Jon Ericson
+2  A: 

I'm not sure why you don't consider PL/SQL a programming language...

APEX is ideal for internal applications where you want a lightweight UI on top of your data. You can build that rather easily without having to write any code.

I also find APEX to be very good for developing smaller customer-facing applications. I wouldn't want to build a giant application that is going to have hundreds of developers working on it using APEX. But if you have a case where 3 or 4 developers are building a smallish site, APEX is likely to be just as good as Java/PHP/ASP.Net/whatever assuming equally skilled developers. If your developers all have lots of ASP.Net expertise, for example, they're going to have a learning curve to write APEX apps. You'd have at least the same level of difficulty, though, if you had a bunch of PL/SQL developers try to learn how to build ASP.Net sites.

Justin Cave
I don't think the final project will be small. It will be use by many users I believe but it is not up to me on what platform the web app will be build on. I'm not saying PL/SQL is not a programming language just Oracle Apex seem to be a none programing tool.
Jack
+2  A: 

If you'd like to see an external web site done in APEX, I suggest looking at the Oracle Tools Users Group site, or Ask Tom. Both are large, frequently used sites with much customization.

Your impression from the Wikipedia article is correct. The only programming knowledge you need is PL/SQL. If most of your site will be simple reports, you don't even need to write the SQL queries, and the wizard interface will build the query and the output for you. If you want cool client side work, you will need to know CSS and Javascript. The PL/SQL is only for the more complex data validation.

Thomas Jones-Low
+4  A: 

Oracle's Metalink support site was written in Apex, so it definitely CAN scale. They're migrating to a newer Flash-based support site now though. I understand they acquired that platform through an aquisition of another company, rather than building it in response to any Apex limits.

If you want 'super sexy' with any web-app, you'd probably need to go Flash/Silverlight/Air. Under that, any HTML based site, including an Apex one, can be prettied up with Javascript. The JQuery library will be included in with the next main version of Apex (4.0), though you can include that (or any other library) now.

The caching issue mentioned in the Wikipedia article has been addressed, though most installations would still put images and scripts on a conventional directory structure rather than serving them out of the database.

While you are locked into the Oracle database, I don't get the 'platform' lock "con" in the article. Oracle is available on Windows, Linux and AIX (amongst others). That's a lot less lock than ASP / SQL Server.

Gary
+2  A: 

I am involved in a huge project to migrate a 5000 module Oracle Forms application to Apex. This is an extreme use of Apex, but it's working just fine. It is a complete myth that Apex is suitable only for small internal apps built by DBAs, interns or end users: it is certainly suitable for those too (and more suitable than most other tools), but it can also be used to build extremely sophisticated applications.

To build a sophisticated application (rather than a default out-of-the box Apex one) you will need someone on the team with Javascript skills, and someone with CSS skills. But most developers will just need PL/SQL initially.

Is it scalable? Yes: probably more scalable than most other solutions! Apex adds very little overhead to the database server, and only the most minimal of application servers is required. "Facebook size"? I don't know for sure but I don't see why not, assuming you have an Oracle database on a machine large and powerful enough to handle "Facebook size" data and transaction volumes. Like any Oracle project, scalability is impeded mostly by bad database designs and poorly written SQL, not by the tool. Not many people ever find themselves building "Facebook size" systems though: are you?

Tony Andrews
In Apex version 3.2 it is possible to convert Oracle Forms to Apex pages.
Diederik Hoogenboom
+1  A: 

That Apex is only suitable for non-programmers and DBAs is an unfortunate misconception. We have used it to build several line-of-business, mission-critical, customer-facing web applications.

The GUI is handled by Apex page templates (HTML), CSS and a bit of Javascript to enhance the user experience. All business logic is placed in PL/SQL packages. This is key to making your application easy to maintain, and to reuse the business logic in other Apex applications and from other client tools, such as C# WinForms, Delphi, Java apps, etc.

As for performance, the Apex engine adds little overhead and the response times and scalability of your application depends largely on the quality of your SQL queries (and the data model). Think about it this way: With Apex, the only thing between your user and the database is a thin layer of PL/SQL. It's only common sense that this has to be faster than a typical .NET or Java application that has seventeen layers of complexity (typically including lots of web services and object-relational mapping layers) between the GUI and the database.

ObiWanKenobi
+5  A: 

APEX is a framework that uses the database and PL/SQL to produce web pages. If you can figure out what the output to the browser will need to be you can create it in APEX. If you find any part of the framework inhibiting you can write PL/SQL procedures and expose them to the web server directly but still take advantage of the security, logging, session state, etc that the APEX system manages for you.

You should know PL/SQL, SQL, HTML, JavaScript and CSS. Sure the interface looks like a big data entry application but the data you enter will mostly be code snippets in each of these languages.

It scales as well as the database does. It typically uses Apache as a web server but is only used to serve static files and pass requests back to the database, where the web pages are created by the PL/SQL code in the APEX schema. You can use AJAX to minimize the size of the traffic traveling up and down the pipe. You can set caching for specific items, lists, page regions, pages, etc.

Since most things are pretty simple to do with the framework, naturally there will be some things that are a little more complicated to do within the framework. The color coding example given above might be something you do with CSS or maybe you would need to turn to print statements to produce the output you need. The thing is to learn the how the framework makes life easier and then when you hit a limit you can easily resort to more direct methods.

Coming from VB.Net you will miss the step by step debugging and the drag and drop. You will never miss the fact that some part of the page lifecycle will do a bind and reset the values you bound to an object in another part of the page.

Good luck.

Greg

I'm curious. If Oracle Apex is such an wonderful web dev tool, how come it is not competing with "main stream" web development tool such as ASP.net or PHP? How come Apex doesn't have a following like .Net/java/php?
Jack
I guess because you need an Oracle back end and Oracle is expensive.
Nick Pierpoint
You can use Oracle XE for free. You can get a single CPU server license for Oracle standard edition for $5000.
Thanks Greg for pointing out the Framework aspects. I have used frameworks with many web enabled languages (Cake for PHP, Catalyst for Perl, Struts for Java, VisualMaxFrame for FoxPro) and Apex is best approached the same way - consider it a Framework for MOD_PLSQL. The framework provides some great plumbing and can greatly speed up your development. Some times it will get in your way and you will have to look under the covers to figure out what it is doing. Most of the time you can leverage the layers of abstraction and just concentrate on putting together your app quickly. That's what I do.
David Mann
+4  A: 

Please note my experiences are with APEX 2.x-3.0.

I used Apex for a few internal apps over a 12 month period but eventually dumped it for ASP.NET.

Some Oracle evangelists claim it is capable of creating highly dynamic content on par with the more mainstream frameworks like ASP.NET/J2EE. Technically this is true, but then technically its also true that you could cross the atlantic in a one man canoe. If you are tempted to throw yourself into a APEX project of even moderate complexity then I suggest you look at the APEX sample of a simple discussion forum. Compare it to an ASP.NET MVC discussion forum sample or a RoR implementation.

Having said that:

The Good

  • Incredibly easy to generate a respectable web app with basic CRUD data entry, simple reporting and populate it with data. If you're the IT guy who's been tasked with consolidating a company's mess of Excel/Access dbs into a central DB/web environment then you should take a look at APEX, it very well suited for this task. If you expect the scope to grow to something of even moderate complexity then I would move straight to a more flexible framework.

  • If you are a DBA/PLSQL guru but have no experience with traditional web development you'll be well prepped to expose existing business logic in a web app without stuffing around with HTML/CSS/JavaScript if you dont want to.

  • APEX support forum has a ton of info and is well staffed by APEX devs.

The Bad

My experience with Apex began to go downhill when apps moved beyond CRUD data entry and required more dynamic and event driven behaviours.

  • The web based GUI is not cool. Debugging is painful.

  • When you (inevitably) need to do anything outside the limited scope of the framework, you'll have to get your hands dirty with PL/SQL. Writing business logic against the database is fine, but generating HTML from PL/SQL procedures felt uncomfortably archaic in 2007.

  • Given the large number of sneaky places you can hide page and redirection logic, the program flow is both difficult to visualise and not naturally conducive to modular, separable and reusable code. OOP developers will be not be impressed. It's possible to have well structured maintainable applications with APEX but its harder than it should be. This is worlds away from MVC.

  • Unacceptable number of framework bugs in the versions I used. I'd hope this has improved with recent versions, but the paradigm of integrating the IDE into the APEX platform itself caused me some of the darkest, soul destroying debugging sessions of my life. As an example, I was trying to reproduce an intermittent bug that would cause a user to lose their session data. Using the session information popup I saw that occasionally the session data would change when it shouldnt have. I spent 2 days trying to find the error in my code with no luck. Near delirious, I noticed by pure chance that I could reproduce errorous session data in the debug window but the application itself wouldnt go into an error state. My heart sunk when I realised what might be happening. Oracle later confirmed that I'd found a bug in APEX that caused the session information window to intermittently show me data from a prior session. I'd wasted 2 days debugging a session related bug with a buggy session debug window. That was the last Apex app I built.

  • PL/SQL is not and will never be the Next Big Thing in web development. After working with APEX for a while I realised it wasnt going to make me a better web developer. Mastering APEX is really about PL/SQL. Thats fine if you plan to focus your career on Oracle technology, just be aware that APEX is so tangential to the direction of mainstream web technologies that the portable set of skills you can take from APEX to other web frameworks is minimal.

If you are considering APEX to provide simple web based data entry and reporting, its worth a look. If you are looking for an alternative to .NET/JAVA/PHP for dynamic web content and rich UI interaction I'd advise you to look elsewhere.

Alex
What you said is how i feel after 3-4 months working on Apex since company's client switch to Apex. I believe the client was sold on Oracle Apex by some consulting firm and now they pass it to us to maintenance and further the development.
Jack
Its the perfect app for a demo because you can get a working web app going in a matter of minutes.
Alex
Yes, It's fast to get some basic CRUD going with Apex but it is a pain in the butt to go beyond that and like you say pretty much everything is done in PL/SQL with some HTML/Javascript hack but I much prefer to code web page in ASP.net or PHP.
Jack
Please upvote my answer if you share my sentiment. Because APEX makes such a wonderful demo (basic crud in a few minutes) many managers think its a silver bullet.
Alex
"generating HTML from PL/SQL procedures felt uncomfortably archaic in 2007" -- So, does it feel more hip and trendy to generate HTML from C# or Ruby or Language X? You know, there has to be some code, somewhere, that generates and spits out HTML. It can't just automagically appear by itself.
ObiWanKenobi
"OOP developers will be not be impressed." -- I don't need to impress some OOP-toting architecture astronaut. I focus on solving today's problems, today, and for this I find Apex to be a fantastic tool.
ObiWanKenobi
"PL/SQL is not and will never be the Next Big Thing in web development." -- PL/SQL has, however, been with us for 20 years and will most likely be there for the next 20 years as well. If you stick with something that is solid and stable, you don't need to be constantly chasing The Next Big Thing with your "portable skill set".
ObiWanKenobi
"Given the large number of sneaky places you can hide page and redirection logic..." -- Given that everything (including processes, validations and branches) in an Apex application is stored in an open and exposed metadata repository, it is in fact difficult or impossible to hide anything. A few simple queries against the Apex Dictionary views will document and/or visualize logic and page flow.
ObiWanKenobi
"I'd wasted 2 days debugging a session related bug with a buggy session debug window." -- And I have wasted hours and days with Visual Studio because it is bloated, slow and buggy. There are bugs in all software products.
ObiWanKenobi
"The web based GUI is not cool." -- A web-based IDE has both benefits and drawbacks. I actually find it very cool that I can use just a browser to develop my applications, from any computer, without having to install and patch the multiple-gigabyte monster that is Visual Studio.
ObiWanKenobi
"not naturally conducive to modular, separable and reusable code" -- The Plug-In architecture of Apex 4.0 looks set to change that in a major way.
ObiWanKenobi
Ok, you obviously disagree. I'll respond to a few of your points.
Alex
"So, does it feel more hip and trendy to generate HTML from C# or Ruby or Language X?" Yes, it feels great to work with modern languages such as C#/Java to develop web apps. I dont feel I am alone here. Note the top voted answer to your own question titled 'Why are database features being ignored, and instead reinvented in the middle tier?'
Alex
"I don't need to impress some OOP-toting architecture astronaut. I focus on solving today's problems, today, and for this I find Apex to be a fantastic tool." I would suggest that labeling OOP practitioners 'architecture astronauts' is a little extreme.
Alex
"If you stick with something that is solid and stable, you don't need to be constantly chasing The Next Big Thing with your "portable skill set." The benefits of learning transferable skills are obvious. Additionally, J2EE/ASP.NET are hardly fad technologies.
Alex
"I actually find it very cool that I can use just a browser to develop my applications, from any computer, without having to install and patch the multiple-gigabyte monster that is Visual Studio." Yes, there are benefits, but currently I feel the cons far outweigh any portability advantages. No doubt we are heading towards web based IDEs but we arent there yet.
Alex
Additionally I would point out that you seem to be arguing against my points as though APEX is just as capable as ASP/J2EE. As I state in my post, APEX is great for some tasks, but is just plain not suitable as a general web framework. Not even the Oracle devs behind APEX attempt to make this comparison.
Alex
"You seem to be arguing against my points as though APEX is just as capable as ASP/J2EE". Yes, Apex is just as capable as .NET/J2EE for developing data-centric web applications. In fact, it is better than .NET/J2EE for that specific task. Apex is not, however, a general-purpose tool/language that you can use to, for example, write games for mobile phones. But the question here is "why (not) use Apex for a web application".
ObiWanKenobi
@Alex, done. Upvoted. Thank for your answer.
Jack
+2  A: 

I am a DBA and I never had to program with APEX or recently anything else (aside some bash scripting and custom SQL scripts for administration purposes) because my job is far away from developing applications (except being pain in the ass of developers that is). Of course my background is developer though and I do believe APEX is future for strictly Oracle based data centric programs.

Now the keyword here is data centric since I disagree with many other DBAs that all applications are data centric (you know the kind of DBAs who still think ODBC stands for ORACLE Database Connectivity). Of course all applications involve data but are all applications data centric? I doubt, just as I doubt APEX would be ever used for image processing or mobile gaming kind of apps. However, despite all the hype with RIA and Web 2.0 the fact is most of businesses around us are hungry for those plain old data centric applications and Oracle is best database around and I can assure you Oracle and APEX can handle much much more than Facebook scalability provided of course you have put the same amount of money as Facebook guys in underlying infrastructure.

By the way I also hate Oracle's design of APEX themes (awful unprofessional UI, just imagine it as main UI for a bank or airline business), limited capabilities (although that seems about to change in the future), many many more issues (professional PDF reporting without paying amount of Enterprise Database license for BI publisher??) but most of all marketing of APEX as substitute of Access or Excel because it gives bad impression it is for kids and I can assure you my friend I would never allow kids to touch my databases :)

You see, Oracle has a gem called PL/SQL which was perfected over the years to handle data in much more intutitive way than any other language. Now that gem is withering with slow death of Forms/Reports and I am positive no fresh graduate will ever bother learning it strictly for database stored procedures (just see the raging war between Java and .Net developers and you realize that once you touch curly brackets {} anything else becomes a heresy). Alas for thousands upon thousands of excellent PL/SQL developers APEX remains the only sanctuary where they can remain productive and develop outstanding data centric applications and without APEX PL/SQL will surely become next COBOL. This is why PL/SQL community will drive Oracle to transform APEX to grade A platform much more powerful than what we are seeing today. Either that or say bye bye to PL/SQL and join curly brackets front (by the way it is never a bad idea to at least try different technologies when you are developer, at least you get an idea why it is not neccessarily greener at the other side).

Anis
Apex is a pain in the ass for developing web based application. I've been working with it for several months and a lot of clicking around the pages and tweaking PL/SQL is not a way that you want to go when you're programing an web app. I can be far more productive in ASP.net with Visual studio than opening up Apex in browser and clicking around. this is my experience with Apex so far.
Jack
+1 for "despite all the hype with RIA and Web 2.0 the fact is most of businesses around us are hungry for those plain old data centric applications and Oracle is best database around"
ObiWanKenobi
If I could, I would give another +1 for "realize that once you touch curly brackets {} anything else becomes a heresy". Especially since you also balance your response with "it is never a bad idea to at least try different technologies when you are developer, at least you get an idea why it is not neccessarily greener at the other side".
ObiWanKenobi
A: 

I read this page with great interest. Our development team has using Apex for about 2 years now, and I'd like to sum up our experience.

For building basic CRUD applications, Apex really is excellent. In fact I recommend you try it yourself. We did face some initial minor difficulties setting it up, but these seem to have been ironed out in the 3.2 release.

The good

  • Great for simple applications. If you app will grow in complexity, consider an alternative solution.
  • The built in templates mean your app looks quite professional (although some will debate this).
  • A good support forum and community, with plenty of eager people on hand to assist you.
  • Some superb built in controls. Love the graphs and reports (but see below).

The bad

  • The debugger is abysmal. If you have used Visual Studio (and even ancient versions of Microsoft Access), you will cringe at the debugger. No breakpoints, debug messages spewing out to screen in a big list, having to manually print debug messages to the screen. Horrible. The cause of many, many hours lost to support.

  • As soon as your application becomes complex or requires any rich funtionality, you have to resort to Javascript and HTML / CSS hacks, which make debugging and support even more complicated (although you can use tools like Firebug or Visual Studio to assist with this).

  • We've encountered unexplained session state bugs, and stylesheets becoming 'detached' from the application without explanation - to name a couple of issues.

  • Supporting unfamiliar apps can be challenging, as it can be difficult to follow the page logic flow without a good debugger. And I don't buy the stock response of 'well - apps should be coded better'. Because in the real world, they aren't - especially when you're using a contractor.

  • Reports look good but not much good if you can't print them or export to PDF. Of course you can shell out for a reporting server, in the end we used another solution.

Overall

I would say by all means use Apex for simple CRUD apps. For anything of more than mild complexity go for .Net or Java. I wouldn't take any notice of the Wiki article on Apex as it's very skewed. Note how 'difficult to debug' (in my opinion the biggest failing) has been erased from the article.

Something to be very wary of as well is the ludicrous claim that you can quickly convert Access databases straight to Apex. Yes it will work if you Access DB is very, very simplistic. Anything moderately complex, forget it, as we found.

We would definitely not use it for web facing apps, only internal. There are simply too many difficulties doing things you would take for granted in say, .Net. I know there are sites out there such as AskTom, but these are not exactly complex. Will we see the next Facebook on it? I think not - although I am sure someone reading this will have a crack at it.

Apex is summed up in a previous comment - managers see the demos, and quickly buy in, convinced that they've found a silver bullet that will slash development times. I've had managers calling me and saying, we need a db app with 40 tables building in a week in Apex please - that's how far the myth has perpetrated. The reality is somewhat different. Yes some things are quicker, substantially quicker, but you will lose the time in other areas - debugging, support, and customisation.

Of course you are best deciding for yourself. Install it, give it a go, you may like it. But don't be fooled by the fast development time claims until you've given it a good going over on a realistic application.

Ken Wood
A: 

@obiWanKanobi I have to laugh. I've worked on some very large projects in various environments (SOcial Security Administration DB projects, various State DMV projects), and this is the most obvious problem I've encountered: People like Obi!

Very reluctant to change - since their comfort zone is with particular vendor/product. Learning something new, and essentially better is not important or even liked (let alone sought!) unless it is mandated and/or forced upon by management/legislature!

  1. .NET (VB.net or C#.net) have attempted (and recently even almost succeeded) to separate presentation layer from business logic, and data (model). having codebehind, with automatic event constructors is a God Send for many a web-developer. (since web is all about event management).
    Java has taken the same approach with many technologies, but most will hear about JSF and Hibernate. Same. Even further improved with true UML capable-design. Thank you Rationale/IBM.

  2. APEX is slow, horrid for web developers, and Oracle does not even attempt to say you should use it in large environments. (Load balancing(?) Puhlease, security failover, real-time replication). Slow just like Web Forms is slow.
    But, it does the job.

  3. Please, never confuse the fan-boy mentality with reality. It makes you look weak. I don't intend to bash/troll, but mentioning APEX in the same sentence with proven web technologies is just infantile. Case in point? PHP you ask? Facebook. AspX (.net), Java? Any banking and insurance web site. Name one high volume site that is used by more then a fringe group? Plus, how viable it is in the universe of open and cheap hosting (including dedicated and VPS) when tech is more closed (as dev platform) then VisualStudio, less affordable (MSSQL), less available (IIS 6/7) then "others"?

I haven't really went down the lane of OpenSource tools/offerings. It is a given.

APEX is not on par with any other tools than Oracle Forms Builder. That's it. Still, we still can produce PSP pages, can we? Same function. Same ugly.

It is important to say, and will agree with you 100% - it is a wonderful tool for shops/organizations with large Oracle PL/SQL (Forms) legacy, and where web developers are scarce and/or hard to replace (read- government (any)).

To have the ability to relatively easy have large forms apps completely transformed using ApEx into web apps (unlike Servlet Form App as it is now) is fantastic, and strategically very smart by Oracle. This way they will ensure maintainability of legacy code, structure and/or personnel.

Bolter
Your ranting doesn't carry any more weight just because you use big font sizes...
ObiWanKenobi
@Obi: fixed. Bolter, please use comments to comment on other answers.
badp
+1  A: 

Don't put buisiness logic into Apex. Use it for presentation only.

If you put the code in the app your will not be able to maintain it, and you'll get RSI from all that clicking. I always create a wrapper layer, and in the oracle world follow Tom Kytes advise - put the business logic as close to the data as possible. This also means that you PL/SQL modules can be called by other systems etc - and best of all - the real meat of your applicaiton will be in straight text files that can be manipulated with your favourite text editor / IDE.

  • Create a view with all of the data to be retrieved for each screen.
  • Create a single wrapper package for all CRUD operations. (Thats is Create, Read, Update and Delete I presume)

In short:

DO NOT PUT YOUR APP LOGIC IN APEX.

Thats my advise . . . .

pj
Thank. We're actually putting all the business logic in Apex. It make me wonder how we going to achive N-tier.
Jack
A: 

Enjoyed very much reading the thread from top to bottom, as it felt like a hot debate. To remind the start of the thread it started as "I believe we're moving to Oracle Apex for future development..." jack being a .NET programmer was worried about the decision of his management and thought of finding counter facts for Oracle Apex which ultimately ended up washing the dirty linen (of all web frameworks) in public. Despite the fact that the victim was Oracle Apex, the same could happen to either .net or j2ee if the debate was between .net and j2ee gurus. My point is all frameworks has their own pros and cons. That is why actually we have so many. Its a waste of time debating over what is more important to live (sex, food or water?) Naturally we select the most appropriate item when that is needed.

  • Oracle APEX suites for environments where you have lots of Oracle Databases and when you really have Pl/SQL enthusiasts. Can really build rich, complex, web 2.0 Data Centric applications really easily (Apex 4.0) but debugging and version control is still a mess and you also will have to stick to an Oracle database(yes you can have workarounds but not robust).
Sas