I've been taking some time this month to learn WebObjects. For those who aren't familiar with it, WebObjects is a Java application framework for web applications and web services. It powers the most of Apple's online efforts, including the Apple Store, the iTunes Music Store and .mac.
What I've found most interesting about WebObjects is that despite being a very old technology (the first version of WebObjects was released in 1996) the underlying architecture is one that has only recently adopted by mainstream Java technologies like Tapestry and JavaServer Faces. In fact, the things that I like most about both technologies, are things that WebObjects users have had for many, many years. It really makes my wonder how we Java guys have been missing out on the party for all these years.
The entire WebObjects stack looks a lot like the modern day JSF stack. The WebObjects framework is a lot like JSF. It's core is objects with state and operations on the objects that act with that state. Properties and actions are bound to views, and you never have to think about HTTP requests or parameters or anything like that.
Underneath the WebObjects framework sits the Entity Objects framework. I'm only starting to explore EOF, but it seems fair to compare it to Hibernate and thus EJB3 persistence. Along with EOF you have to consider EOModeler, the UI tool for creating persistent objects and managing the database mapping. I haven't used any of the proprietary tools, but it seems to be a lot more polished than any of the Java mapping tools I have used.
Speaking of tools, I should mention that WebObjects itself has a drag and drop UI builder for creating views. It's a lot like Java Studio Creator. Or, I should say it's a lot like what Java Studio Creator looks like. I've never actually used creator myself. It is a very nice tool that makes page design very simple. You create pages and map your attributes and operations to them. It's nice and simple, exactly the way developing a web app should be.
WebObjects builder has a lot of advanced components available for constructing pages. I can't directly compare them to something like ADF, but they look quite powerful. I hope to give them a bit of a test over the coming months.
Overall, my impression of WebObjects is positive. In places it feels a but old, but the overall architecture is state of the art. Many Java web frameworks still fail to provide things that WebObjects apparently had almost 10 years ago. When you add in the integrated tool support, I don't think any of the current Java frameworks really can compare. I've yet to see anything else that is as powerful and as simple. (then again, I don't like in user tool land much, so I don't have a complete picture)
I don't see myself being able to do much WebObjects in future, but I do plan on learning it better over the coming weeks to be able to further compare it to the current mainstream web environments. While it seems we are starting to catch up to the venerable WebObjects, I can see there is still a lot down inside that we have to learn from.
If anyone is interested in learning WebObjects, I highly recommend the WebObjects WORX podcast. The first episodes are a great set of tutorials. We worked through the first tutorial at this month's Austin Mac programmers group, and I plan to try to work the rest into the meetings over the coming months.