Comparado con EJB 2.1, EJB 3.0 simplifica el proceso de crear aplicaciones Enterprise JavaBean.
El concepto subyacente de la especificación EJB 3.0 se centra en un modelo de programación de objeto Java™ antiguo simple (POJO) que utiliza anotaciones Java para capturar información que los descriptores de despliegue solían contener. Ahora, los descriptores de despliegue son opcionales en la mayoría de los casos. La utilización generosa de valores predeterminados también significa que necesita escribir y mantener menos código de soporte. Esto simplifica mucho la experiencia de programación al crear y utilizar componentes EJB 3.0.
Mientras que EJB 2.1 añadía soporte para servicios Web, cambios en la implementación de beans de sesión, cambios en la forma de invocar beans de empresa y un esquema XML nuevo para sustituir la DTD que definía el descriptor de despliegue ejb-jar.xml, EJB 3.0 ha llevado esto un paso más allá. EJB 3.0 ha introducido un mecanismo de persistencia de bean de entidad ligero a través de la API de persistencia de Java. Estas entidades están basadas en POJO y por tanto pueden ejecutarse fuera de un contenedor EJB y no necesitan ninguna interfaz ni incluir código EJB. De forma parecida, los beans de sesión tampoco necesitan interfaces de componente específicos de EJB.
Comparación de clases EJB 2.1 más archivo de descriptor de despliegue con la clase EJB 3.0 equivalente
Los ejemplos de la Tabla 1 son funcionalmente equivalentes:
EJB 2.1 | EJB 3.0 |
---|---|
Clase Java public class AccountBean implements javax.ejb.SessionBean { SessionContext ctx; DataSource accountDB; public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } public void ejbCreate() { accountDB = (DataSource)ctx.lookup( "jdbc/accountDB"); } public void ejbActivate() { } public void ejbPassivate() { } public void ejbRemove() { } public void setAccountDeposit(int empId, double deposit) { ... Connection conn = accountDB.getConnection(); ... } ... } |
Clase Java @Stateless public class AccountBean implements Account { @Resource private DataSource accountDB; public void setAccountDeposit(int customerId, double deposit) { ... Connection conn = accountDB.getConnection(); ... } ... } |
Descriptor de despliegue <session> <ejb-name>AccountBean</ejb-name> <local-home>AccountHome</local-home> <local>Account</local> <ejb-class>com.example.AccountBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <resource-ref> <res-ref-name>jdbc/accountDB</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref> </session> ... <assembly-descriptor>...</assembly-descriptor> |