관리 Bean과 JAX-RS 2.0 통합
Liberty의 JAX-RS 2.0은 루트 자원 클래스, 제공자 및 애플리케이션 서브클래스로서 관리 Bean을 사용하도록 지원합니다.
- JAX-RS 2.0을 관리 Bean과 통합하려면, <feature>managedBeans-1.0</feature> 항목을 server.xml 파일의 featureManager 요소 내에 추가하십시오.
- 관리 Bean을 JAX-RS 자원, 제공자 또는 애플리케이션으로 사용하려면,
@ManagedBean을 사용하여 이 클래스의 어노테이션을 작성하십시오. 예를 들어, 다음과 같이 인터셉터 관리 Bean 기능을 사용하십시오.
@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!" ; } }
관리 Bean의 JAX-RS 2.0에 관한 제한사항
자원 인젝션은 CDI(Contexts and Dependency Injection)에 의해 관리되는 다음의 JAX-RS 컴포넌트 클래스에 의해서만 지원됩니다.
- 애플리케이션 서브클래스
- 제공자
- 루트 자원 클래스
특히 관리 Bean 인스턴스를 특정 JAX-RS 컴포넌트 클래스에 삽입하려면, 이 컴포넌트 클래스가 CDI Bean으로서 인식되고 관리될 수 있는지 확인해야 합니다.
예를 들어, 다음과 같이 printMyName 관리 Bean 인스턴스를 JAX-RS 루트 자원 클래스에 삽입하려면
비어 있는 beans.xml 파일을 .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() {
// TODO Auto-generated method stub
System. out .println("Injection of ManagedBean is successful" );
}
}