2014-01-23 3 views
2

В моем приложении у меня есть верхняя панель с кнопкой выхода из системы, которые называют метод компонентаJSF выход из системы с ViewScoped бобом

public String logout(){ 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
    return Navigator.goTo("/index.xhtml"); 
} 

это работает хорошо, но у меня есть конкретная страница, где она терпит неудачу с этим исключением

2014-01-23T15:17:42.405+0100|WARNING: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.NullPointerException 
    at org.jboss.weld.context.beanstore.http.AbstractSessionBeanStore.getLockStore(AbstractSessionBeanStore.java:120) 
    at org.jboss.weld.context.beanstore.AttributeBeanStore.lock(AttributeBeanStore.java:219) 
    at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:97) 
    at org.jboss.weld.context.PassivatingContextWrapper$AbstractPassivatingContextWrapper.get(PassivatingContextWrapper.java:64) 
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:93) 
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:79) 
    at org.omnifaces.cdi.viewscope.ViewScopeManager$Proxy$_$$_WeldClientProxy.preDestroyView(Unknown Source) 
    at org.omnifaces.application.ViewScopeEventListener.processEvent(ViewScopeEventListener.java:56) 
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108) 

Единственная разница между этой страницей и другой заключается в том, что этот использует ViewScoped Bean, но я не понимаю, как это может быть проблемой. решения? спасибо

+0

Не могли бы вы решить эту проблему? – Theo

ответ

2

Вы пробовали это?

String path = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath() + "/index.xhtml"; 
FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
FacesContext.getCurrentInstance().getExternalContext().redirect(path); 

Это работает для меня ...

0

У меня была аналогичная проблема с NullPointerException быть выброшен с помощью Wildfly9.

Когда пользователь входит в нашу систему, мы заходим в систему, а затем мы аннулируем его предыдущие сеансы. Проблема заключается в том, что, когда мы используем CDI SessionScoped боб затем Wildfly, дает этот StackTrace:

java.lang.NullPointerException at org.jboss.weld.context.beanstore.http.AbstractSessionBeanStore.getLockStore(AbstractSessionBeanStore.java:112) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.context.beanstore.AttributeBeanStore.lock(AttributeBeanStore.java:209) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:90) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.context.PassivatingContextWrapper$AbstractPassivatingContextWrapper.get(PassivatingContextWrapper.java:76) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.get(ContextualInstanceStrategy.java:178) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] at org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49]

Я даже попробовал решение, представленное в How to hunt down obscure HA clustering bug in Wildfly 8.2.0.Final. Проблема была другая, но Stacktrace был похож, поэтому я дал ему попробовать, но без успеха.

Это не имело никакого смысла. Почему в результате аннулирования одного сеанса возникают проблемы с компонентами, связанными с сеансом, принадлежащими другому. Это в основном то же самое, что и когда один пользователь входит в систему, а также другие журналы из системы. Их сеансовые бобы не должны иметь никакого вмешательства. В качестве последней надежды я попытался выполнить код недействительности предыдущих сеансов в другом потоке, и это сработало. По какой-то неизвестной причине для меня создание нового сеанса и недействительность других в том же методе вызывает проблемы с сессионными компонентами, но их использование в другом потоке работает нормально.

Я надеюсь, что это поможет кому-то другому, который застрял в той же проблеме.

Примечание:.. Может быть, подход с самого начала был не прав, и мы должны иметь недопустимые предыдущие сессии, а затем зарегистрировать пользователь в не проверяли это один, как это было много работы, чтобы положить в

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