2016-08-28 11 views
0

세션 Bean의 인스턴스를 리턴하는 사용자 정의 ELResolver를 작성했습니다. 나는 JNDI에 의해 콩을 찾는다. 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; 
} 

이것은 지금까지 정상적으로 작동합니다. 지금 내 질문 :

조회 한 콩에 어느 범위가 설정되어 있는지가 중요하다고 생각됩니다. 그것은 항상 SessionScope 빈처럼 작동합니다.

이러한 구성에 범위를 설정하는 방법이 있습니까? (예 : RequestScope 또는 ViewScope)

사용자 정의 ELResolver에서 반환하는 요소의 "기본 범위"란 무엇입니까? SessionMap에 저장됩니까?

버전 스택 :

오라클 JDK 1.8.0_91 64

자바 EE 7 (제이보스 10)

인 Mojarra JSF 2.2

을 기반 EJB 3.2

CDI 1.2 (용접 2.3.4 최종)

답변

0

좋아요. EL 해결 도구 i 잘못된 접근법. faces 컨텍스트 (RequeatMap, SessionMap, ViewMap 및 ApplicationMap)에서 제공하는 맵을 사용합니다. 이제 개체가 올바르게 릴리스됩니다. 제 경우에는 사용자 정의 ResourceHandler를 사용하여 해당 콩을 거기에 추가합니다.

누군가 코드 예제가 필요한 경우 주저하지 말고 요청하십시오.