I still remember back in 2003/2004 when Rod Johnson wrote his books "J2EE Design and Development" and "J2EE programming without EJB" and presented his POJO based inversion of control framework - at that time, still packaged as com.interface21.* - that eventually evolved to Spring Framework.

Idea of composing J2EE application from basic Java Beans, that were instantiated by the core container that managed their lifetime and resolved references was for most people really an eye opening experience, true Aha! moment and completely new world discovery. Everybody I knew was happy and excited about it. I was also happy and excited - not as much because of the novelty, but because of seeing a great design ideas I saw before in closed source implementation to re-appear in open source world.

The place I have seen the excellent embodyment of the "core IoC / DI container" was an application server Dynamo created by company named ATG (Art Technology Group). ATG wrote the DAS (Dynamo Application Server) whose kernel - container named Nucleus was providing very similar services than Spring container. It also provided lot of added values on top of that: personalization layer, scenario server, portal and administration. In 2002, we at Montage have just delivered one major public sector system based on ATG and second even bigger ATG system was well on the way.

Now I am NOT suggesting at all there is any idea transfer between ATG and Spring framework - either way. These design principles were known in research papers since 1980-ies and (as many today's great trends) originates from Smalltalk. It was only matter of time who will implement it properly in Java and when. Both ATG and Spring, coming from different angles created quite different systems. One is open and free and pretty much accepted standard. The other is way more powerful and mind bogling toolset - in its current form it is probably the most comprehensive and most powerful eCommerce solution in Java space currently available. Alas, it is not widely known, unless you happen to be working in implementing personalized eCommerce sites in 10-100+ million dollar revenue range.

It is very interesting to look at the places where they differ and the consequences of the different decisions for developing in either of the environment. I have decided to publish few blog entries on this, for several reasons:

1) From technology perspective, ATG platform is very interesting and innovative and lots of ideas and design principles used can be very useful in general application design.

2) The company - ATG - is probably one of the most unknown and unappreciated Java innovator and pioneers. These guys more or less invented the JSP in its predecessor form - JHTML. They were very first I have seen to have workable IoC container - back in year 2000 and their ideas of "droplets" and servlet beans certainly made me say "wow!" several times ...

3) Talking to developers that came to the ATG platform recently, I have sensed the sentiment ".. yeah, yet another Spring knock-off framework ". I am big admirer of Spring, but let's face it: ATG certainly did not get any inspiration from Spring, unless they have a time machine hidden somewhere in their Boston HQ. If the idea-crosspolination happened (and I am NOT saying it did - I simply do not know), it could have been only the other way.

4) After using mixture of open source technologies and commercial solutions in quite a few projects of various size (from small to humongous) I gained some experience and appreciation of advantages and weak points of each of them and I'd like to share them.

Before I start, one disclaimer: Thinknostic is ATG partner and has worked on / is actively working on several ATG projects. Obviously, we are interested in success of these projects :-) and therefore we do have vested interest in success of ATG as platform and indirectly in success of ATG as a company. We are however not shareholders of ATG stock or do not get any incentives for spreading word or encouraging ATG sales (with obvious exception of somebody buying ATG platform and hiring us to help them with implementation). The sole reason for this and future blog posts is very interesting technology behind it. As you hopefully will see, I will try to be objective and highlight the strengths as well as weaknesses of both solutions - Spring's as well as the ATG stack.