2016-08-28 2 views
0

Я написал пользовательский ELResolver, который возвращает экземпляр Session Bean. Я смотрю на фасоль 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?

версия стека:

Oracle JDK 1.8.0_91 64

Java EE 7 (Wildfly 10)

Mojarra на основе JSF 2.2

EJB 3.2

CDI 1.2 (приварку 2.3.4 Final)

ответ

0

Хорошо, кажется, что EL-резольвер i неправильный подход. Теперь я использую карты, предоставляемые контекстом лиц (RequeatMap, SessionMap, ViewMap и ApplicationMap). Объекты теперь выпущены правильно. В моем случае я использую пользовательский ResourceHandler и добавляю туда соответствующие компоненты.

Если кому-то нужен пример кода, не стесняйтесь спрашивать.

Смежные вопросы