The history of EJBs
In 1999, the EJB specification (JSR 220) was released. It embraced the component model of development in order to increase reuse and simplify business implementations.
After some hype, it started to get a bad reputation for not being able to deliver what it promised. The programming model was much too complex for developers, and the specification allowed for arguably too much freedom among vendors that contributed to poor compatibility between containers.
Alternatives soon emerged. Spring came along with its Inversion of Control (IoC) container and Dependency Injection (DI). Instead of the EJB Entity Beans, which had severe performance problems, Hibernate provided a better alternative with its Object Relational Mapping (ORM) model.
Under pressure, Java EE 5 was delivered with the very much improved and simplified EJB 3.0 and JPA 1.0 specifications. Session beans stayed in the EJB specification, while the Entity Beans were re-engineered into a brand new POJO-based component...