In quite a few design brainstorming sessions, the debate between Spring and EJB results in a deadlock. There are developers who are damn passionate about Spring and hate EJBs. Let's have a look at the main important differences between the two in terms of features they support.

Feature

EJB

Spring

Transaction management

  • Must use a JTA transaction manager.

  • Supports transactions that span remote method calls.

  • Supports multiple transaction environments through its PlatformTransactionManager interface, including JTA, Hibernate, JDO, and JDBC.

  • Does not natively support distributed transactions-it must be used with a JTA transaction manager.

Declarative transaction support

  • Can define transactions declaratively through the deployment descriptor.

  • Can define transaction behavior per method or per class by using the wildcard character *.

  • Cannot declaratively define rollback behavior-this must be done programmatically.

  • Can define transactions declaratively through the Spring configuration file or through class metadata.

  • Can define which methods to apply transaction behavior explicitly or by using regular expressions.

  • Can declaratively define rollback behavior per method and per exception type.

Persistence

Supports programmatic bean-managed persistence and declarative container managed persistence.

Provides a framework for integrating with several persistence technologies, including JDBC, Hibernate, JDO, and iBATIS.

Declarative security

  • Supports declarative security through users and roles. The management and implementation of users and roles is container specific.

  • Declarative security is configured in the deployment descriptor.

  • No security implementation out-of-the box.

  • Acegi, an open source security framework built on top of Spring, provides declarative security through the Spring configuration file or class metadata.

Distributed computing

Provides container-managed remote method calls.

Provides proxying for remote calls via RMI, JAX-RPC, and web services.