However, a more probable scenario, is the lack of features. In my experience EJB 3 cover about 80-90% of all needed features in an average project - the rest has to be provided by something else. The good story here: you can just start with EJB 3, and use on top just another framework (Spring, Guice and remaining few hundreds DI frameworks :-)) you like. However - most of the architects overestimate the complexity and introduce additional frameworks for every possible situation at the beginning of the project - which increases further the overall complexity. In last years I introduced EJB 3.0 / Java EE 5 several times in the variety of projects. The result: EJB 3 were good enough, and we were able to delete all remaining superflous, layers, home grown frameworks and utilities. In most projects the problem weren't the EJBs, but heavily overengineered systems :-).