JAX-RS 2.0 與受管理 Bean 的整合

Liberty 中的 JAX-RS 2.0 支援使用受管理 Bean 作為根目錄資源類別、提供者和應用程式子類別。

  • 如果要整合 JAX-RS 2.0 與受管理 Bean,請在 server.xml 檔中的 featureManager 元素內,新增 <feature>managedBeans-1.0</feature> 項目。
  • 如果要使用受管理 Bean 作為 JAX-RS 資源、提供者或應用程式,請使用 @ManagedBean 來標註這些類別。
    例如,依如下所示,使用 Interceptors 受管理 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!" ;
        }
    }

JAX-RS 2.0 與受管理 Bean 的限制

只有下列這些受「環境定義和相依關係注入 (CDI)」管理的 JAX-RS 元件類別,才支援資源注入:
  • 應用程式子類別
  • 提供者
  • 根目錄資源類別

具體來說,如果要將受管理 Bean 實例注入至特定的 JAX-RS 元件類別,您必須確定這個元件類別可以當成 CDI Bean 來辨識及管理。

舉例來說,如果要依如下所示,將 printMyName 受管理 Bean 實例注入至 JAX-RS 根目錄資源類別,您必須在 .WAR file/WEB-INF 儲存庫中新增一個空白 beans.xml 檔:
@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" );
    }

}

指示主題類型的圖示 參照主題

資訊中心條款 | 意見


「時間戳記」圖示 前次更新: 2016 年 4 月 15 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=rwlp_jaxrs2.0_managedbeans
檔名:rwlp_jaxrs2.0_managedbeans.html