EJB was created almost 10 years ago to solve the component needs of application developers. Since then thousands of successful applications have been written and deployed using this technology. Although I don’t do much with EJB nowadays as I have other responsibilities at JBoss, I still wonder how it is doing in the industry. Recently, I became privy to various bits of knowledge that EJB is still going strong and maintaining its dominance in Java application development. Consider this job trends graph from indeed.com:
Over 3 years EJB jobs have remained pretty much constant. This is very encouraging news considering recent Rod Johnson propaganda. EJB really did not have an alternative in the Java space until 2004/2005 when Spring started to be known and popular. It is very interesting to see that although EJB has had a serious competitor, it has maintained its dominance in Java application development over the years. You could even extrapolate from these numbers that EJB is an upper bound on the number of Java component jobs out there and that Spring has only recently matched this. This is proven by the fact that the Spring and Java graph trends are the same since they converged 6 months ago.
This trend pretty much correlates with download numbers I posted on our EJB implementation awhile back on TSS in June 2007.
I can give you a few from two perspectives:
downloads on sf.net for JBoss and Hibernate projects related to EJB3 and JPA:
* Downloads of a standalone distribution of the JBoss EJB3 project since 10/2004: 183199
* JEMS installer which bundles EJB 3.0 (not same as JBoss Appserver download): 201923
* JBoss 4.2 which bundles EJB 3.0: ~65000
* JBoss 5 betas which bundles EJB 3.0: ~80000
* Hibernate’s JPA implementation: 135269
* Hibernate Annotations (which is JPA based): 202561
So, total downloads solely related to JPA: ~337K
Total downloads solely related to EJB3: ~550K
Total EJB3 + JPA related downlaods: ~ 887KCompare that to Spring 2.x downloads: ~600K
Spring 1.x downloads: 946K
Hibernate 3.x downloads: 1445K
Hibernate 2.x downloads: 495KNow that’s just JBoss. You also have Glassfish, Open JPA, Oracle, and now Geronimo communities not included in these numbers.
Also, my EJB 3.0 book has been out a year and has sold ~12K copies +/- a thousand (haven’t gotten check yet from last quarter).
So, all and all I think there is pretty compelling evidence that EJB3 and JPA has momentum.
Its hard to continue any analysis on JBoss specific download numbers as we basically encourage our user base to download JBoss 4.2.x or 5 as it is bundled with our EJB3 implementation.
There’s some other encouraging numbers as well. In 2005 I was offered by O’Reilly to take over Richard Monson-Haefel’s EJB series. “EJB 3.0, 5th Edition” was published in May, 2006. Even after being out for almost a year and half, sales are still going strong. Just last quarter we sold 1700 copies, very good for a technical book. When I went to Krakow in October, I also found that my book had been translated into Polish. I believe its also been published in Chinese. All indicators of broad adoption by the technology.
So, as you can see, even after almost 10 years, EJB is still going strong and maintaining its dominance. With the emergence of Seam and Web Beans being incorporated into EE 6, I predict this trend to continue.
Feb 13, 2008 @ 18:58:44
With the emergence of EJB 3 (particularly), it seems to me that none of those old tired arguments against EJB really apply any more. There’s a few things in the annotations/xml-descriptors that I pine for from 2.1 in JBoss, but in general, the idea of a container managed pojo is well represented.
Feb 13, 2008 @ 21:21:48
EJB3 is a Blue Chip trade. Dependable, reliable, steady. Spring might be best represented on NASDAQ; popular among developers due to misinterpretation. Its ease-of-use is a ruse, and it’s overvalued.
Here’s why:
Spring wires up *real* POJOs. Meaning that you get the simplicity of an unbound object model, and the lack of cross-cutting Enterprise support that implies.
EJB provides a POJO programming abstraction. You code POJOs, and get access to the full JEE stack on deployment.
EJB being the flagship technology of JEE is often equated with an Application Server stack, which in turn is viewed as overkill. In the coming months/years we’ll see the decoupling of EJB from a requisite runtime, freeing developers to run as standalone or embedded. I can *boot* it in that sense in under 2 seconds, roughly longer than my first CS101 “Hello World” application.
Not that I dislike Spring – in fact, I really enjoy playing around with it. Because it’s a fun toy.
S,
ALR
Feb 14, 2008 @ 09:55:18
Bill,
Interesting that you draw from evidence that EJB has been surpassed in popularity as a component model that it “maintains its dominance”.
I disproved this argument in the InfoQ thead where you first advanced it. Spring has now overtaken EJB, and it’s no longer even close, as far as job listings go. Let me quote from my post (which I assume you must have read and ignored when writing your blog post):
Rgds
Rod
Feb 14, 2008 @ 09:58:59
Andrew, I guess you aren’t familiar with Spring’s architecture. Its cross-cutting support is far superior to that of EJB, as it offers a true AOP model, with real pointcuts. Sure, it only creates proxies where required, which is both simpler and more efficient than the EJB approach. IIRC even Bill has remarked on the deficiencies of the EJB 3.0 interception model.
Spring also provides access to “the full JEE stack on deployment” when in a Java EE environment. Java EE is much more than EJB.
Feb 14, 2008 @ 10:18:49
I think many people who still think that EJBs are crap only know EJB 2.1 (which was crap). The new EJB 3 is a different thing. I really like it. Pojo based, much easier, less code, annotation. Together with the Netbeans tools and JBoss or Glassfish this is really cool stuff.
And Seam is a real winner. It’s like web programming in Java should have been all the time.
I don’t see an end to EJB anytime soon.
Feb 14, 2008 @ 12:08:41
Well with spring, download is not needed anymore. Just changing maven pom and cache artifacts in local repository proxy. With any ejb server, manual monkey job is necessary. But if someone prefer using typewriter like techniques, so be it.
Feb 14, 2008 @ 14:23:30
Looking exclusively at the graph, my impression is that *Spring* is gaining momentum, not EJB. But nevertheless the graph is about *jobs* (or better said *job offerings*, or even better, *jobs descriptions offers*) so I think it’s a poor assessment of real use. I’m not a big fan of either technology, I just use what I have to use in particular situations and I’ve used both recently. But for me the major flaw of this comparison is to include in the same bag both EJB2 (which I used – and hated – for a brief period of time some years ago) and EJB3, which is a completely different thing. As I said in another place, I think they only keep the EJB name to not embarrass the creators of EJB2…
Feb 14, 2008 @ 17:28:53
Rod, I wrote this blog for two reasons. One, to show how genuinely surprised I was, given your and SpringSource’s propaganda, marketing, and FUD, that EJB is pretty much neck and neck with Spring for job postings. And two, to satirize your recent silly blog and manipulation of stats. Its sad you still feel so threatened by EJB.
What’s even sadder is that it just doesn’t have to be this way. If you brought core spring to EJB and Java EE and jumped on the standards bandwagon, there would be no reason to talk about Spring vs. EJB. No, instead, based on what I’ve seen within the JCP, you’re more interested in protecting your little fiefdom than making Java EE better. Its too bad you have to rely on such a kiddy wrapper over real technologies to make your business. Maybe after you do a few more Covalent like deals and get some real technologies in house you won’t be so protective of core Spring and will finally be willing to unify the communities. Unfortunately, when you finally wake up and see that uniting Spring with Java EE/EJB is a good thing for everybody, the Rails movement will have already made us all obsolete. Sigh.
Feb 14, 2008 @ 23:02:25
Speaking as an enterprise Java developer, I’m glad Spring hasn’t folded itself under Java EE. A lot of us don’t have the luxury of running app servers that support the latest and greatest in Java EE. For example, at the large company I work for, we run WebSphere 6.0. ‘Nuff said.
Spring lets us use advanced techniques independent of IBM’s upgrade schedule. That’s a very good thing.
Feb 14, 2008 @ 23:13:18
“EJB3, which is a completely different thing. As I said in another place, I think they only keep the EJB name to not embarrass the creators of EJB2…”
EJB3 still has stateless session bean, stateful session bean, 2.0 enity bean and message driven bean.
Feb 15, 2008 @ 16:54:24
Bill, I completely agree with you on this.
“Unfortunately, when you finally wake up and see that uniting Spring with Java EE/EJB is a good thing for everybody, the Rails movement will have already made us all obsolete. Sigh.”
I’m a enterprise developer and have used Java/JEE technologies for years. I can see why many organisations are confused with these standards/framework “war” in Java community every year. First people get confused with all these propaganda, marketing, and FUD and start using (misusing?) this kind of framework without proper evaluation. Later they realize those are not enterprise ready and start dumping it. I believe enteprise projects are much more than just a framework and DI or AOP. It needs end to end visibility and strong vendor support. This made .NET popular in recent past. It is high time Java community realize Spring and JEE unification must happen sooner than later. We must learn this from JPA and Hibernate. Let us stop comparing charts for EJB and Spring job trends and make a step forward together.
Feb 15, 2008 @ 19:19:51
I’m addicted by Spring, I’ve started the first forum system in java based on Spring. But my humble opinion is that we have to stop with this vision that Spring vs EJB and so forth. I see many people talking the goals and news about Rails, Groovy and so forth and what we are talking about our core (Java) ?? Today we have many companies working in JEE plataform ok, but in the future? Probably our IT Directors will see these fights today and in the near future, we will have many projects working based on Rails, why? Directors don’t like fights, they have afraid by instable tecnologies.. While this, Ruby on Rails still getting growing around the opensource projects..
It seens that old fight (Visual Basic vs Delphi), but now we are talking with the same plataform but it seens different languages..
Rod, don’t you think that is time to see with the Sun guys propose for Spring? We need some focus in our plataform.
Feb 16, 2008 @ 10:01:57
I agree with the last two posts. I both used spring and ejb 3.0 I like both and I am in debt to such good programmers that provided me with high quality, free to use frameworks. But I what I don’t understand is that the people that created such good software (far better than I can), show such unprofessional behaviour towards each other. I had hoped for more collaborative behaviour at least a constructive discussion. These kind of discussions (I’ve seen more of these lately) don’t benefit us at all I think.
Peace (to quote another well respected colleague of ours)
Feb 17, 2008 @ 04:32:47
Bill,
Don’t you think it’s a bit paradoxical to imply that standardizing Spring would be “making Java EE better” while simultaneously calling it a “kiddy wrapper”? To be honest, as a core Spring committer trying to provide the best possible environment for developers while recognizing deficiencies in the EJB 3 specification, I take offense at such comments. Perhaps you can provide some enlightenment?
-Mark
openBlog » Spring vs Jboss war continues
Feb 18, 2008 @ 04:59:21
Feb 18, 2008 @ 05:35:52
Mark, please enlighten me on what core middleware service Spring implements? (or EJB for that matter). Spring isn’t even a full fledged kernel and needs OSGi to fill the gaps. This is what I mean by kiddy. A bunch of low hanging fruit that anybody could implement. Still, Java EE needs a kiddy layer to make it sexy, usable, and integratable. Right now we have a fracture in which one side is standards based and the other controlled by one commercial/VC driven company. I’ll choose and fight for standards every time.
Feb 19, 2008 @ 03:16:30
Bill,
I guess it’s just a difference of opinion, but I personally don’t understand the infatuation with standards for the sake of standards. My opinion on that matter changed at some point around the EJB spec’s 2nd attempt at CMP. When I consider EJB3’s @Interceptor approach, I can’t say that things have gotten any better. Anyways, Spring provides a model that allows developers to focus on business logic that is isolated from the infrastructure, and in my mind, that is the defining characteristic of middleware. Clearly, a growing community of developers recognize that the Spring portfolio offers pragmatic solutions beyond standards and specifications (Web Services, Security, Batch, etc). On the other hand, I’m pretty sure that your definition of “core middleware” assumes implementation of a specification as a requirement, and therefore this is a circular argument.
-Mark
Feb 19, 2008 @ 14:29:42
Mark, I believe if the right people get on these committees you can really change things. EE5 was JBoss’s first foray into specification work. It took a huge battle to get JPA (and thus Hibernate) standardized and finally we have a string persistence model in EE while at the same time unifying Hibernate, JDO, and CP crowds.
I don’t think open source is isolation enough. We need standards so that new players can push the old.
And no what I mean by core middleware is: persistence, transactions, messaging, caching, networking (web server/remoting). Everything else is just putting a pretty face on these core technologies. Even when it is a specification.
Aug 15, 2008 @ 15:30:13
It’s not 2002 « Exit Condition
Dec 04, 2008 @ 11:47:38
Red Hat Magazine | Who wrote about JBoss World
Apr 02, 2009 @ 19:30:25
Jun 19, 2009 @ 19:07:24
Spring is so much lightweight and easier and the IOC can be used even outside an EJB container. EJB still remains bloated, even with EJB 3.0. Applying lipstick to a pig doesn’t make it a fairy 🙂