2016-08-28 28 views
0

セッションBeanのインスタンスを返すカスタムELResolverを作成しました。私はJNDIによってBeanを探します。 getValueメソッドは次のようになります。カスタムELResolverで返されるインスタンスのスコープを設定する

@Override 
public Object getValue(ELContext ctx, Object base, Object prop) { 

    if (null == base) { 
     Object bean = resolveBean((String) prop); 
     if (null != bean) { 
      ctx.setPropertyResolved(true); 
      return bean; 
     } 
    } 
    return null; 
}  

private Object resolveBean(String beanName) { 

    \\Search in a RegistryService if such an bean exists 

    for (ModulDescriptor md : loader.getDescriptors()) { 
     for (MenuItem mi : md.getMenuItems()) { 
      if (mi.getElBeanName().equals(beanName)) { 
       Object bean = null; 
       try { 

     \\If exists lookup and return 

        bean = InitialContext.doLookup("java:global/ModulA/" + mi.getJndiBeanName()); 
       } catch (NamingException e) { 
        e.printStackTrace(); 
       } 

       return bean; 
      } 
     } 
    } 

    return null; 
} 

これまでのところうまくいきます。さて私の質問:

ルックアップされたbeanにはどのスコープが設定されているのかということになります。 SessionScope Beanのように常に動作します。

このような構成にスコープを設定する方法はありますか? (例:RequestScopeまたはViewScope)

カスタムELResolverから返される要素の「デフォルトスコープ」とは何ですか? SessionMapに保存されているだけですか?

バージョンスタック:

OracleのJDK 1.8.0_91のx64

のJava EE 7(Wildfly 10)

クロサギ科基づいて、JSF 2.2

EJB 3.2

CDI 1.2(ウェルド2.3.4最終)

答えて

0

私はELリゾルバi間違ったアプローチ。 facesコンテキスト(RequeatMap、SessionMap、ViewMap、ApplicationMap)によって提供されるマップを使用します。オブジェクトが正しく解放されるようになりました。 私の場合は、カスタムのResourceHandlerを使用して、そこに対応するBeanを追加します。

誰かがコード例が必要な場合は、躊躇しないでください。

関連する問題