Integración de JAX-RS 2.0 con beans gestionados
JAX-RS 2.0 en Liberty soporta el uso de beans gestionados como clases de recurso raíz, proveedores y subclases de aplicación.
- Para integrar JAX-RS 2.0 con beans gestionados, añada la entrada <feature>managedBeans-1.0</feature> dentro del elemento featureManager en el archivo server.xml.
- Para utilizar un bean gestionado como recurso JAX-RS, proveedor o
aplicación, utilice @ManagedBean para anotar
estas clases. Por ejemplo, utilice la característica de bean gestionado de interceptores del modo siguiente:
@ManagedBean ("JaxrsManagedBean" ) @Path ("/managedbean" ) public class ManagedBeanResource { public static class MyInterceptor { @AroundInvoke public Object around(InvocationContext ctx) throws Exception { System. out .println("around() called" ); return ctx.proceed(); } } @GET @Produces( "text/plain") @Interceptors(MyInterceptor. class ) public String getIt() { return "Hi managed bean!" ; } }
Restricciones en JAX-RS 2.0 con beans gestionados
La inyección de recursos solo está soportada por
las clases de componente JAX-RS siguientes que gestiona CDI (Contexts and Dependency Injection):
- Subclases de aplicación
- Proveedores
- Clases de recurso raíz
Específicamente, para inyectar una instancia de bean gestionado en una determinada clase de componente JAX-RS, debe asegurarse de que esta clase de componente se puede reconocer y gestionar como un bean de CDI.
Por ejemplo, para inyectar la instancia del bean
gestionado printMyName en una clase de
recurso raíz JAX-RS del modo siguiente, debe añadir un archivo
beans.xml vacío en el repositorio .WAR
file/WEB-INF:
@Path ("/managedbean" )
public class ManagedBeanResource {
@Resource(name = "printMyName" )
private PrintMyName printMyName ;
@GET
@Produces( "text/plain")
public String getIt() {
printMyName .print();
return "Hi managed bean!" ;
}
}
@ManagedBean ("printmyname" )
public class PrintMyName {
public void print() {
// apéndice de método generado automáticamente TODO
System. out .println("Injection of ManagedBean is successful" );
}
}