@Named + @RequestScoped не работает в JSF 2.0 с JBoss 7.1.1

У меня есть рабочий @ManagedBean, который я хотел бы заменить bean-компонентом @Named + @RequestScoped.

// Before
@ManagedBean
public class Login {
   ...
}

// After
import javax.enterprise.context.RequestScoped;
@Named
@RequestScoped
public class Login {
   ...
}

Все работает нормально, пока я использую @ManagedBean. @Namedбез @RequestScopedработает, но создает новый экземпляр для каждого EL-выражения. @Named + @RequestScopedоднако приводит к исключению: Невозможно добавить элемент кэша области запроса, когда кэш запроса не активен

java.lang.IllegalStateException: Unable to add request scoped cache item when request cache is not active
    at org.jboss.weld.context.cache.RequestScopedBeanCache.addItem(RequestScopedBeanCache.java:51)
    at de.prosis.dafe.presentation.Login$Proxy$_$$_WeldClientProxy.getUsername(Login$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    ...

Пустой beans.xmlсуществует. Есть ли какие-то ошибки или ошибки, о которых я не знаю? Бьюсь об заклад, я что-то упускаю, но это похоже на ошибку. Я погуглил сообщение об исключении, но не нашел ничего, кроме источника класса, который его вызывает. Заранее спасибо!

Обновление: Это связано с кодом, который я пропустил. Компонент входа в систему пытается аннулировать сеанс в своем конструкторе, что терпит неудачу, если это именованный компонент (не всегда, если я спамлю F5, кажется, что он работает через несколько раз) и работает как управляемый компонент. Кто-нибудь может объяснить такое поведение?

public Login() {
            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            if (session != null) {
                session.invalidate();
            }
} 

Код взят из этого туториала: http://www.greenkode.com/2011/09/user-authentication-and-authorization-using-jaas-and-servlet-3-0-login/

7
задан atamanroman 13 June 2012 в 08:57
поделиться