Integración de CDI (Contexts and Dependency Injection) con el contenedor EJB

La especificación CDI mejora el modelo de componente EJB con la gestión del ciclo de vida contextual.

Relación de CDI con la especificación EJB

La especificación EJB define un modelo de programación para los componentes de aplicación que acceden a los recursos transaccionales en un entorno de varios usuarios. Aspectos tales como la seguridad basada en rol, la demarcación de transacción, la moneda y la escalabilidad se explican de forma declarativa utilizando anotaciones y descriptores de despliegue de XML forzados por el contenedor en tiempo de ejecución. Los componentes EJB pueden ser con estado, pero por naturaleza no son contextuales.

Las siguientes instancias de bean de sesión se obtienen utilizando la inyección de dependencias:
  • Contextual
  • Enlazada a un contexto de ciclo de vida
  • Disponible para otras instancias que se inician en ese contexto
  • El contenedor crea una instancia cuando sea necesario
  • El contenedor suprime una instancia cuando finaliza el contexto

El contenedor de CDI de WebSphere Application Server tradicional ejecuta la inyección de dependencias en todas las instancias de beans de sesión y controlados por mensajes, incluidas las instancias que no son instancias contextuales. La CDI de WebSphere Application Server da soporte a la inyección de beans de CDI dentro de los enterprise beans y viceversa.

Uso

Best practice Best practice: Utilice los siguientes métodos cuando inyecte enterprise beans:bprac
  • Utilice el método @Inject para la inyección contextual de beans de sesión locales.
  • Utilice el método @EJB para los beans de sesión remotos
Consulte los siguientes ejemplos de uso del método @EJB en CDI:

Defina los generadores que están dejando el EJB disponible para la inyección no contextual:

		@Produces @EJB PaymentService paymentService;	
Consumir los tipos inyectados en otros beans de CDI:
@Inject PaymentService myPaymentService

Consideraciones prácticas

Puede definir interceptores de estilo CDI con enlaces de interceptor y enterprise beans de decoradores. Los interceptores se declaran utilizando los métodos @Interceptors o en archivos ejb-jar.xml, a los que se llama antes que a los interceptores y se declaran utilizando los enlaces de interceptor. Los interceptores se invocan antes que los decoradores.

Cuando una instancia de @Injected contextual de un contenedor EJB se destruye porque se sale del ámbito y si la aplicación aún no ha eliminado el contenedor EJB subyacente mediante la invocación directa de un método remove, el contenedor de CDI de WebSphere Application Server tradicional elimina el bean de sesión con estado.

El contenedor de CDI de producto elimina el bean de sesión con estado en las instancias siguientes:
  • Cuando se utiliza el método @Inject para crear una instancia de inyección contextual y esa instancia de un contenedor EJB se destruye porque se sale del ámbito.
  • Cuando la aplicación no ha eliminado todavía el contenedor EJB subyacente mediante la invocación directa de un método remove.

También debe tener en cuenta el ámbito y la propagación del estado de los beans de CDI. Los beans de CDI con ámbito de aplicación y solicitud mantienen el estado en sus contextos respectivos en los contenedores EJB y web. Por ejemplo, un bean de CDI con ámbito de solicitud inyectado en un servlet mantiene su estado cuando un método de negocio de un enterprise bean de sesión con estado accede al mismo bean con ámbito de solicitud.


Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_ejb
File name: cweb_cdi_ejb.html