[seam-dev] Seam 2 and JSF 2 problem

Dan Allen dan.j.allen at gmail.com
Fri Jan 15 01:18:52 EST 2010


Norman et al,

Please refer to this weld-dev (at the time webbeans-dev) thread for an
analysis of the problem.

http://lists.jboss.org/pipermail/weld-dev/2009-May/000979.html

My memory of the issue has gotten a bit fuzzy, but basically, as of JSF 2.0,
parts of the component tree are visited in the restore view phase, which
happens to resolve value expressions bound to UIData components. This
triggers a scope not active exception if a conversation-scoped bean is hit.

It's a chicken egg problem, unfortunately. There may be a way to have a
temporary conversation put in place during the time when the component tree
is walked during restore view just to avoid this problem, but I'm not 100%
sure that's the right solution.

Regardless of how we proceed, please be sure to keep this FAQ up to date.
It's important for people planning to move to JSF 2 with Seam 2.

http://seamframework.org/Documentation/DoesSeamWorkWithJSF2

Thanks,

Dan

On Wed, Jan 13, 2010 at 12:04 AM, Norman Richards <orb at nostacktrace.com>wrote:

> I've been trying to track down a problem affecting several of the Seam 2
> examples running on JBoss 6.  It appears that JSF restoreView is now
> sometimes calling EL in places it didn't in earlier JSF versions.  If that
> EL involves a conversation-scoped component, the application will fail since
> the conversation state is not active until after restoreView.
>
> Ex:
>
> /myView.xhtml contains an <h:dataTable value="#{searchResults}"  ...  etc/>
> If the component that provides searchResults does @In for a
> conversation-scoped component, like ManagedPersistenceContext, the
> application will now fail.
>
>
> Of course, the view works fine for GET requests, since there is no view
> being restored.  Is this expected behavior for JSF 2, or is it perhaps a bug
> in the restore view implementation?  I'm not familiar enough with the
> changes in JSF2 yet to know what to expect.  Here's a stack trace to give
> some context.  The key problems are around UIViewRoot.processRestoreState
> and UIData.visitTree.
>
>
>
> Exception during request processing:
> Caused by javax.servlet.ServletException with message: "@In attribute
> requires non-null value: searchService.entityManager"
>
> javax.faces.webapp.FacesServlet.service(FacesServlet.java:323)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
> org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> java.lang.Thread.run(Thread.java:637)
>
> Caused by org.jboss.seam.RequiredException with message: "@In attribute
> requires non-null value: searchService.entityManager"
>
> org.jboss.seam.Component.getValueToInject(Component.java:2338)
> org.jboss.seam.Component.injectAttributes(Component.java:1736)
> org.jboss.seam.Component.inject(Component.java:1554)
> org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61)
> org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
> org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
> org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
> org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
> actions.SearchService_$$_javassist_seam_4.getSearchResults(SearchService_$$_javassist_seam_4.java)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:597)
> org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
> org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
> org.jboss.seam.Component.callComponentMethod(Component.java:2249)
> org.jboss.seam.Component.getInstanceFromFactory(Component.java:2080)
> org.jboss.seam.Component.getInstance(Component.java:2011)
> org.jboss.seam.Component.getInstance(Component.java:1983)
> org.jboss.seam.Component.getInstance(Component.java:1977)
> org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
> org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
> org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
> org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
> javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
> com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
> org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
> org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
> com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
> javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
> javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
> javax.faces.component.UIData.getValue(UIData.java:554)
> javax.faces.component.UIData.getDataModel(UIData.java:1243)
> javax.faces.component.UIData.setRowIndex(UIData.java:447)
> javax.faces.component.UIData.visitTree(UIData.java:1179)
> javax.faces.component.UIComponent.visitTree(UIComponent.java:1454)
> javax.faces.component.UIViewRoot.processRestoreState(UIViewRoot.java:868)
> com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:197)
> org.jboss.seam.jsf.SeamStateManager.restoreView(SeamStateManager.java:76)
> com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:131)
> com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:143)
> org.jboss.seam.jsf.SeamViewHandler.restoreView(SeamViewHandler.java:93)
> com.sun.facelets.FaceletViewHandler.restoreView(FaceletViewHandler.java:316)
> com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:199)
> com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
> com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110)
> com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
> javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
> org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
> org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> java.lang.Thread.run(Thread.java:637)
>
>
>
>
> _______________________________________________
> seam-dev mailing list
> seam-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/seam-dev
>
>


-- 
Dan Allen
Senior Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597

http://mojavelinux.com
http://mojavelinux.com/seaminaction
http://www.google.com/profiles/dan.j.allen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/seam-dev/attachments/20100115/94a6a551/attachment.html 


More information about the seam-dev mailing list