2015-01-16 5 views
3

큰 웹 응용 프로그램에서 OmniFaces 1.10과 Apache MyFaces 2.2.6을 함께 사용하고 있습니다. 응용 프로그램이 생산에 실행하면, 나는 웹 서버에 다음과 같은 형식의 가짜 예외를 얻고있다 (톰캣) 로그 :Omnifaces에서 RestorableViewHandler 사용 안 함

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 파일) 테스트 케이스에서 재현 할 수 없으며 이전 버전의 MyFaces 및 OmniFaces에서도이 파일을 재현 할 수 없습니다.

OmniFaces "RestorableViewHandler"가 자동으로 복원해야하는 태그가 있는지보기 위해보기를 복원하려고하기 때문에 예외 자체가 트리거 된 것처럼 보입니다. 복원 된 뷰에 태그가 포함되어 있지 않으면 (이미) 복원 된 뷰를 버립니다. 분명한 성능 문제는 별개로,이 또한 NullPointerException을 트리거하므로이 작업을 원하지 않으므로 RestorableViewHandler를 비활성화하는 방법을 찾고 있습니다. 나는 이것을 할 때 "enableRestorableView"태그를 사용할 수 없다는 것을 알고 있지만, 괜찮습니다.

+1

'RestorableViewHandler'에서 기술적으로 거의 2 년 동안 변경된 사항은 없습니다. MyFaces 관련 문제를 추측 할 수 있습니다. 현대적인 서버 하드웨어에서 평균보기를 작성하는 데는 0,05 ~ 0,15ms를 넘지 않아야합니다. 그러나 매니지드 빈이 (태그 핸들러 등을 통해) 뷰를 빌드 할 때 뷰의 만료 된 예외 오류 페이지에서 매니지드 빈을 사용하지 않으면 실제로 스토리가 변경됩니다. 이를 사용 중지하려는 욕망은 이해할 수 있습니다. – BalusC

답변

3

OmniFaces 소스에서 해킹하지 않고는 비활성화 할 수 없습니다. issue 92에 따르면 <o:enableRestorableView>은 일단 어플리 케이 션이 사용 된 적이있는 응용 프로그램의 속성을 설정하여 RestorableViewHandler이보기를 복원할지 여부를 결정할 수 있도록 해결되었습니다.

RestorableViewHandler을 동적으로 등록하는 것이 좋지만 응용 프로그램이 이미 이전에 요청을 처리 한 경우 ViewHandler을 동적으로 등록 할 수는 없습니다. It would only cause an IllegalStateException.

수정본은 현재 1.11 snapshot (및 2.x 사용자의 경우 2.1 snapshot)에서 사용할 수 있습니다.

+0

와우, 정말 빨랐어 요. 고맙습니다. Maven을 사용할 수 있도록 1.11 릴리스의 일정이 있습니까? – Markus

+0

출시가 필요할 때. – BalusC