2015-01-16 3 views
3

Я использую OmniFaces 1.10 и Apache MyFaces 2.2.6 вместе в большом веб-приложении. Когда приложение запущено в производство, я получаю ложные исключения следующего вида на веб-сервере (Tomcat) Журнал:Отключить RestorableViewHandler в Omnifaces

java.lang.NullPointerException 
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver$5.put(ManagedBeanResolver.java:101) 
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.putInScope(ManagedBeanResolver.java:367) 
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:340) 
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:296) 
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179) 
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:147) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96) 
at org.apache.myfaces.view.facelets.tag.TagAttributeImpl.getObject(TagAttributeImpl.java:431) 
at org.apache.myfaces.view.facelets.tag.TagAttributeImpl.getBoolean(TagAttributeImpl.java:143) 
at org.apache.myfaces.view.facelets.tag.jstl.core.ChooseWhenHandler.isTestTrue(ChooseWhenHandler.java:68) 
at org.apache.myfaces.view.facelets.tag.jstl.core.ChooseHandler.apply(ChooseHandler.java:182) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:55) 
at org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:373) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:50) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 
at org.apache.myfaces.view.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:195) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46) 
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48) 
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:520) 
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:574) 
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:552) 
at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:240) 
at org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:151) 
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59) 
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48) 
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:188) 
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:477) 
at org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:80) 
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:170) 
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196) 
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 

Я уверен, что это проблема или, по крайней мере случай края в приложении (например, файл .xhtml, который неправильно использует некоторые bean-переменные), но я не могу воспроизвести его в тестовых случаях, и это также никогда не происходило с предыдущими версиями MyFaces и OmniFaces.

Само исключение, по-видимому, вызвано тем, что OmniFaces «RestorableViewHandler» пытается восстановить представление, чтобы увидеть, содержит ли он тег, который должен быть восстановлен автоматически. Когда восстановленное представление не содержит тега, оно отбрасывает (уже) восстановленное представление. Помимо очевидной проблемы с производительностью, это также вызывает это исключение NullPointerException, поэтому я не хочу этого, и поэтому я ищу способ завершить работу RestorableViewHandler. Я знаю, что когда я это сделаю, я не смогу использовать тег «enableRestorableView», но это нормально.

+1

В «RestorableViewHandler» в течение почти 2 лет ничего технически не изменяется. Я бы предположил, что проблема связана с MyFaces. Построение среднего вида должно занимать не более 0,05 ~ 0,15 мс на современном серверном оборудовании. Однако история действительно меняется, когда управляемые компоненты задействованы в построении представления (через обработчики меток и т. Д.), И эти управляемые компоненты не используются на странице с ошибкой об исключении исключения. Желание отключить его тогда понятно. – BalusC

ответ

3

Невозможно отключить его без взлома в источнике OmniFaces. В соответствии с issue 92 это было исправлено, установив <o:enableRestorableView>, устанавливая атрибут приложения широкого применения, как только он был использован где-то, так что RestorableViewHandler может решить, пытаться ли восстановить вид или нет.

Обратите внимание, что я бы предпочел динамически зарегистрировать RestorableViewHandler, однако невозможно динамически зарегистрировать ViewHandler, когда приложение уже обработало запрос раньше. It would only cause an IllegalStateException.

Исправление доступно в сегодняшних 1.11 snapshot2.1 snapshot, для пользователей 2.x).

+0

Вау, это было быстро. Большое спасибо. Есть ли временные рамки для выпуска 1.11, чтобы мы могли использовать его с помощью Maven? – Markus

+0

Когда мы чувствуем, что ему нужен релиз. – BalusC

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