Я написал пользовательский 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)