I came across this article (Java EE Fallacies: EJBs are too complex, POJOs are easier.).

EJB, at least EJB 2.0, was one of the most over engineered and painful frameworks I have ever used. Given how bad the taste EJBs left with me, there is nothing any updates will do to get me to ever use or consider them for anything.

The author talks about non-functionals such as “real time monitoring (JSR-77), threading, proper load balancing etc” are just plain over engineering again. These requirements should not be solved by the mother of all frameworks. My experience suggests that these requirements need to be hand tuned for the app and by the app, not some advanced solves world peace framework.

Given the EJB experience what I suggest to any developer is to evolve from SIMPLE working systems as opposed to starting a project with the goal to solve everything. Grow into your requirements and iterate furiously.

PS. I can see some previous colleagues telling me, “I told you so” when we first starting using EJBs. Right Bob and Brian :)