ICEfaces-EE
  1. ICEfaces-EE
  2. IPCK-100

tabView - Non-serializable attribute exception

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.8.2.GA_P01
    • Fix Version/s: 1.8.2.GA_P02
    • Component/s: Facelet Components
    • Labels:
      None
    • Environment:
      Clustered environments
    • Affects:
      Compatibility/Configuration

      Description

      The tabView component throws the following exception when deployed in a clustered environment:

      SEVERE: Servlet.service() for servlet Persistent Faces Servlet threw exception
      java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
              at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1295)
              at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1256)
              at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130)
              at com.icesoft.faces.webapp.http.servlet.ProxyHttpSession.setAttribute(ProxyHttpSession.java:139)
              at com.icesoft.faces.webapp.http.servlet.ServletSessionAttributeMap.setAttribute(ServletSessionAttributeMap.java:52)
              at com.icesoft.faces.context.AbstractAttributeMap.put(AbstractAttributeMap.java:156)
              at com.sun.faces.mgbean.BeanManager$ScopeManager$SessionScopeHandler.handle(BeanManager.java:442)
              at com.sun.faces.mgbean.BeanManager$ScopeManager.pushToScope(BeanManager.java:417)
              at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:369)
              at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:222)
              at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
              at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
              at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
              at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
              at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
              at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
              at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
              at com.sun.facelets.el.LegacyValueBinding.getValue(LegacyValueBinding.java:56)
              at com.icesoft.faces.component.UIXhtmlComponent.getTagAttributes(UIXhtmlComponent.java:103)
              at com.icesoft.faces.renderkit.dom_html_basic.XMLRenderer.encodeBegin(XMLRenderer.java:52)
              at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:490)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:498)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:498)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:498)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:498)
              at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:498)
              at com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:281)
              at com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:158)
              at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
              at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
              at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
              at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:51)
              at com.icesoft.faces.context.View$2$1.respond(View.java:80)
              at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:233)
              at com.icesoft.faces.context.View$2.serve(View.java:114)
              at com.icesoft.faces.context.View.servePage(View.java:186)
              at com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:84)
              at com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:43)
              at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:181)
              at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:55)
              at com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:48)
              at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:55)
              at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:92)
              at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:55)
              at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:183)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
              at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
              at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
              at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
              at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
              at java.lang.Thread.run(Thread.java:619)

      To reproduce this in a non-clustered environment I added the <distributable/> tag to my applications web.xml and ran it on Tomcat with session persistence turned on (default).

        Activity

        Hide
        Arran Mccullough added a comment -

        Attached test case project files. I can provide a built war file but it is too large to attach.

        Show
        Arran Mccullough added a comment - Attached test case project files. I can provide a built war file but it is too large to attach.
        Hide
        Greg Dick added a comment -

        In general this is caused by having a session scoped bean that doesn't implement Serializable. Normally, this is in a bean in the application. In this case however, it may be something different. There is this from the salesforce case:

        e have a problem with Layout Components -> Tab View component
        We have Liferay 5.2 SP4 EE and are trying to use Tab View in one of our portlet. When we put this portlet to cluster enviroment (liferay cluster) we get error. All other component seems to work.

        Exception itself:
        Caused by: javax.el.ELException: /file:/home/dev/liferay-portal-5.2-ee-sp3/tomcat-6.0.18/temp/10-user-rights/WEB-INF/lib/icefaces-composite-comps-1.8.2.jar!/META-INF/facelet/tabView/tabView.xhtml: setAttribute: Non-serializable attribute
        at com.sun.facelets.compiler.TextInstruction.write(TextInstruction.java:50)
        at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
        at com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:356)
        at com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:365)
        at com.icesoft.faces.renderkit.dom_html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:96)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
        at com.icesoft.faces.renderkit.dom_html_basic.DomBasi

        And this seems to indicate that there is something that the TextInstruction is encountering that is not serializable to the response. A TextInstruction object is a facelets object that handles writing literal text to the responsewriter.

        Show
        Greg Dick added a comment - In general this is caused by having a session scoped bean that doesn't implement Serializable. Normally, this is in a bean in the application. In this case however, it may be something different. There is this from the salesforce case: e have a problem with Layout Components -> Tab View component We have Liferay 5.2 SP4 EE and are trying to use Tab View in one of our portlet. When we put this portlet to cluster enviroment (liferay cluster) we get error. All other component seems to work. Exception itself: Caused by: javax.el.ELException: / file:/home/dev/liferay-portal-5.2-ee-sp3/tomcat-6.0.18/temp/10-user-rights/WEB-INF/lib/icefaces-composite-comps-1.8.2.jar!/META-INF/facelet/tabView/tabView.xhtml: setAttribute: Non-serializable attribute at com.sun.facelets.compiler.TextInstruction.write(TextInstruction.java:50) at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39) at com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:356) at com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:365) at com.icesoft.faces.renderkit.dom_html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:96) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) at com.icesoft.faces.renderkit.dom_html_basic.DomBasi And this seems to indicate that there is something that the TextInstruction is encountering that is not serializable to the response. A TextInstruction object is a facelets object that handles writing literal text to the responsewriter.
        Hide
        Brad Kroeger added a comment -

        Rev 25051: Implement Serializable on session scope classes. The ComponentConfig.java class is used by the tabView component.

        Assigning to Ken as I'm not sure how we test this commit.

        Show
        Brad Kroeger added a comment - Rev 25051: Implement Serializable on session scope classes. The ComponentConfig.java class is used by the tabView component. Assigning to Ken as I'm not sure how we test this commit.
        Hide
        Ken Fyten added a comment -

        Greg, please confirm Brad's fix.

        Show
        Ken Fyten added a comment - Greg, please confirm Brad's fix.
        Hide
        Ken Fyten added a comment -

        Assign to Brad to confirm this fix. The instructions state that this can be tested using regular Tomcat 6 as follows:

        To reproduce this in a non-clustered environment I added the <distributable/> tag to my applications web.xml and ran it on Tomcat with session persistence turned on (default).

        Then look for any exceptions as noted in the JIRA in the Tomcat log.

        Show
        Ken Fyten added a comment - Assign to Brad to confirm this fix. The instructions state that this can be tested using regular Tomcat 6 as follows: To reproduce this in a non-clustered environment I added the <distributable/> tag to my applications web.xml and ran it on Tomcat with session persistence turned on (default). Then look for any exceptions as noted in the JIRA in the Tomcat log.
        Hide
        Brad Kroeger added a comment -

        I don't have NetBeans on my machine right now, to expedite things, I am assigning to Arran to test and have provided him with an updated version of the icefaces-composite-comps.jar

        Show
        Brad Kroeger added a comment - I don't have NetBeans on my machine right now, to expedite things, I am assigning to Arran to test and have provided him with an updated version of the icefaces-composite-comps.jar
        Hide
        Arran Mccullough added a comment -

        Tested the new jar file with existing test case. No exceptions are thrown so it looks like the fix has worked.

        Show
        Arran Mccullough added a comment - Tested the new jar file with existing test case. No exceptions are thrown so it looks like the fix has worked.

          People

          • Assignee:
            Arran Mccullough
            Reporter:
            Arran Mccullough
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: