Utilización de JCDI (Java Contexts and Dependency Injection) con JAX-RS
Se pueden utilizar proveedores y recursos raíz JAX-RS (API Java™ para servicios web RESTful) en un archivo WAR (Web Archive) habilitado para JCDI (Java Contexts and Dependency Injection). Simplemente añada un archivo WEB-INF/beans.xml válido al archivo WAR y los proveedores y recursos raíz JAX-RS que sean beans JCDI válidos podrán utilizar la funcionalidad JCDI.
Acerca de esta tarea
Las clases JAX-RS en un archivo habilitado para JCDI puede tener puntos de inyección anotados @javax.inject.Inject, participar en ámbitos de ciclo de vida de JCDI, activar sucesos JCDI y disponer de decoradores e interceptores de método.
Las clases de proveedor y recurso raíz JAX-RS deben tener un constructor de beans gestionados JCDI válido. En general, si las clases tienen un constructor que tiene un parámetro anotado con la anotación @javax.ws.rs.core.Context o con cualquier anotación de parámetro JAX-RS como, por ejemplo, @javax.ws.rs.QueryParam, debe refactorizar el código para utilizar en su lugar campos o propiedades de bean anotadas para JAX-RS. Puede añadir un método anotado @javax.annotation.PostConstruct para ayudar a construir el objeto.
Además, las clases de proveedor y de recurso raíz de JAX-RS deben tener un ámbito especificado JCDI. Los ámbitos controlan el ciclo de vida de un bean gestionado JCDI. Las clases de recursos raíz pueden tener cualquier ámbito válido como @javax.enterprise.context.RequestScoped, que hace que la clase de recurso raíz JAX-RS funcione del mismo modo que en una aplicación no habilitada para JCDI. Las subclases javax.ws.rs.core.Application y los proveedores JAX-RS deben tener la anotación @javax.enterprise.context.ApplicationScoped.
Es posible que desee utilizar JCDI para desarrollar más rápida y fácilmente la aplicación, así como para aumentar la comprobabilidad del código. JCDI permite técnicas de programación modernas como inyección de dependencia, un modelo de programación basado en sucesos y un enfoque más orientado a aspectos sobre preocupaciones generales. Los desarrolladores pueden utilizar la programación orientada a aspectos para añadir a un método correctamente funcionalidad que no forma parte de la lógica empresarial principal. Por ejemplo, una preocupación fundamental es el registro. Algunos desarrolladores necesitan registrar la entrada y salida cada vez que se llama a un método empresarial determinado en una aplicación. Ahora puede utilizar la funcionalidad de desarrolladores JCDI como interceptores y decoradores de método para añadir esta funcionalidad más limpiamente. Los desarrolladores pueden utilizar la inyección de dependencia para insertar más fácilmente sus propias simulaciones de implementación durante la prueba unitaria. El desacoplamiento de dependencias anteriormente codificadas permite a los desarrolladores probar más fácilmente componentes individuales.
Los beans JCDI pueden inyectar EJB (Enterprise JavaBeans) y utilizar inyecciones @javax.annotation.Resource para inyectar recursos Java Platform, Enterprise Edition (Java EE). Los EJB también pueden ser beans JCDI. Los EJB con anotaciones como @javax.ejb.Stateless también pueden utilizar la inyección de dependencia JCDI y otras características JCDI. Los EJB mantienen sus características transaccionales y otras características EJB.
JNDI (Java Contexts and Dependency Injection) es una nueva característica Java Platform, Enterprise Edition (Java EE) 6. Puede cambiar el modelo de programación para crear aplicaciones más fáciles de desarrollar al aumentar la capacidad de mantenimiento. Los desarrolladores de JAX-RS pueden utilizar características JCDI, como el soporte de @javax.inject.Inject, en clases de proveedor y recursos raíz.
Procedimiento
Resultados
Ha habilitado un enterprise bean de forma que los recursos JAX-RS con la funcionalidad JCDI se exponen para el consumo.