Monday, December 8, 2008

Spring vs EJB War : Will It Ever End?

I can't believe I am even writing this post. My article at Javalobby "EJB 3.1 - EJB New and Improved", became the place for a few people to make it a Spring vs EJB war.

I received several emails asking about my opinion. I did comment saying
As long as it is a healthy discussion on Spring Vs EJB and not a war of words between two individuals, I have no problem at all.

There was one person who went to say that "I was gaining more popularity with this article". I have been writing articles from many years now. Every time I have learnt something new or interesting, I have tried to share those with my community. I don't need such fame.

Of course, it had no effect, and the discussions took a completely different route.

I had seen such war of words and arguments when it came to Java vs .NET, but never had heard or read about two great and very useful framework and specification. I had one former colleague who went to such an extent saying:
I will jump off the bay bridge rather than work on Java.

I didn't understand that statement than, and don't even now. And now with this discussion taking a route which I had never imagined, I am even more confused.

What are your thoughts? Why do developers go to such extreme? Isn't it another language or framework? Don't we learn new languages when we go to different countries however hard it may be? Why we as developers have such hatred towards other technologies?


  1. Sadly I think it far from end. Personally I've notice when some news about JEE5 or EJB3 emerge then someone will always argue that Spring is much simpler, better, etc. and complains EJB3 is heavy, complex ...

  2. Interestingly enough, my C# book is now officially thicker than my Java book. Also, my ASP.NET book is way thicker than my JSF book. The story repeats itself (JEE some years ago) and unless we as developers stop evangelizing on a narrow set of technologies and think of languages as tools, these wasteful debates will continue.

  3. As Spring framework is a viable option to the JEE stack, this comparison is bound to happen. When was the last time you heard some one taking about "vi" and not mentioning "emacs", or the other way round?

    I was one of the participants in that debate on Javalobby.
    Unfortunately that thread got way out of hand, so here're my thoughts on the subject.

    To me, JEE Specs v/s Spring Framework, is like Eclipse v/s Netbeans.
    Eclipse is a great platform to develop IDEs, but as a standalone IDE it is really poor. Compared to a base eclipse install, Netbeans gives a developer so much more tools he can readily use out-of-box.
    Same goes for JEE specs, they leave out a lot of functionality to the implementations, and thus ensuring a lot of incompatible solutions from different vendors. As opposed to Spring Framework which has a lot of sensible API you can use right out-of-box, without having to worry whether it will run on this app server or that.

    Some may argue that eclipe's greatest strength is in it's plugins, just like JEE specs greatest strength is in it's being a "Industry standard". But when I remember the countless hours lost in debugging problems in eclipse introduced by a plugin, or trying to make various plugins work together, I shiver. Thankfully I don't have to do that in Netbeans, all most all the functionality I need from an IDE is right there for me to use.
    Same goes for Spring v/s JEE, Why bother with JEE when Spring gives you all that JEE has to offer and much more.
    As a piece of concrete use case, the EJB framework has no solid solution for start-up classes. What I need is mechanism to ensure certain classes are loaded by the EJB container before loading any EJB. Mind you not in the web tier via listeners, but in the EJB tier. Sadly there is no such standard way. You have to use app server specific soultions, like weblogic's start up classes, or Jboss's MBeans etc.

    Don't get me wrong. I think the EJB/Webbeans team have done a fantastic job over the years. After dealing with the mess that was J2EE, I never thought I would even look at EJB technology anymore. The mere fact that I am giving JEE 5/6 and EJB 3/3.1 so much attention is an indicator how much I respect the amount of hard work they have done. But the fact remains, that out-of-box Spring offers much more than JEE. So unless Spring does something really really stupid like making the framework closed source , I don't see spring going away from the Enterprise Java Application development landscape anytime soon, even with all the improvements in JEE 6 and EJB 3.1

    Now here's hoping this thread doesn't turn into a Eclipse v/s Netbeans war. And in case it does, my vote is for Netbeans ;)

  4. Unbelievable. This blog is meant to be against ideological or religious wars in IT and some asshole steps in to start a religious war about Netbeans vs. Eclipse.

  5. Unbelievable. This blog is meant to be against deological or religious wars in IT and some asshole steps in to start a religious war about Netbeans vs. Eclipse.

  6. Keep writing, Meera! Your opinions are always knowledgeable and welcome.

    As to Spring and JEE, I expect most people will agree that complexity is the enemy of productivity. I hope efforts like Google's cloud infrastructure will eventually give us all nice, easy to use frameworks that get done the work we need to do. (If it weren't for the problem of distribution, we could all completely master VB and be done with it!)

    Best Regards,


  7. JEE is a specification addressing some concepts of Enterprise Java.
    Spring is a framework addressing much more concepts of Enterprise Java.
    So they both address the same thing, but with different speed and innovation turnaround.
    So the real sticking point here is the speed of innovation when it comes to any managed specification (not only JEE). In the privately managed framework such as Spring a good idea could be turned into concrete implementation in days (some times hours), while it takes years to accomplish in any managed specification. Take Hibernate's capabilities of today vs. its derived specification such as JPA.
    One might argue that specification gives you portability across platforms. . . The question I want to ask is when was it really true? I spent two years of my career migrating apps from WAS and WebLogic to JBoss and I tell you, it was anything but trivial due to all kinds of proprietary extensions and APIs on either platforms. But the reason for this proprietary extensions and APIs to exist in the first place is the speed of innovation in JEE which is and always will be much slower then in privately managed commercial platforms and frameworks.
    So if I can't achieve portability, then who can explain me the value in following any spec?
    Spring and other privately managed frameworks (open source and not) are evolving into conventions that developers understand and comfortable with and these frameworks are portable across all of the containers (You don't have WAS version of Struts, Hibernate or Spring vs. the same of BEA). . . .

  8. Amazing how people won't leave a simple opportunity to push it.

    PS: Meera, I enjoy a lot with yours writing and hope you will keep it up.

  9. I appreciate all your comments. I should mention that just because the comments in the article I wrote took a different route, I am not going to stop writing.

    I have enjoyed writing all these years, and will continue to do so. I definitely like to share anything new I learn at work with the community.

  10. I spend pretty much all my time with .NET since Java died out in my geographical region. However, I still hope to do some Java development sometime.

    In the .NET world, we have choices of our own - the Enterprise Library which has a lot of functionality put together, or open-source technologies that come from the Java world, such as NHibernate (from Hibernate), Log4Net (from Log4J) and Spring.NET (from Spring). However, switching from one to another is relatively simple as there's so much documentation and a really huge user community.

  11. I have to agree with you. Nowadays, developers tend to have wars..from .NET vs Java, Eclipse vs Netbeans, Spring MVC vs Struts, Spring vs EJB3, Glassfish vs Jboss and and the list goes on. From what I've observed, ppl are just reluctant to change and to learn something new.