JBoss AS 7.1.3 - Serializing AsyncResult results in "java.io.NotSerializableException: org.jboss.as.ejb3.component.interceptors.AsyncFutureInterceptorFactory$1$1"
jmsjr Oct 3, 2013 9:58 AMJBoss AS 7.1.3
Using @Asychronous EJB method invocations where the method returns has Future<String> as the method's return signature ...and code returns new AsyncResult<String>("somevalue").
The call to the asynchronous method is from a JSF @ViewScoped bean, so that the Future<String> is serialized in the JSF view state, and the JSF state saving method is set to client
This, however, results in the exception below. Why was the anonymous class not Serializable ? Was there a reason to do so ? It simply prevents any Future<V> to be serialized. I need it to be serialized so that I can call the Future<String>.isDone() on a subsequent post back to the same view.
If I change the JSF state saving method to server, or I use @Sessionscoped bean, the exception does not occur .. That is only because the view state is not YET being serialized .. well not until it is needed to be passivated. When it is passivated, then the exception occurs as well.
11:45:16,756 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-localhost/127.0.0.1:8080-1) Error Rendering View[/progress.xhtml]: javax.faces.FacesException: java.io.NotSerializableException: org.jboss.as.ejb3.component.interceptors.AsyncFutureInterceptorFactory$1$1
at com.sun.faces.renderkit.ResponseStateManagerImpl.getViewState(ResponseStateManagerImpl.java:137) [jsf-impl-2.1.11-jbossorg-3.jar:]
at javax.faces.application.StateManager.getViewState(StateManager.java:555) [jboss-jsf-api_2.1_spec-2.0.4.Final.jar:2.0.4.Final]
at com.sun.faces.context.PartialViewContextImpl.renderState(PartialViewContextImpl.java:416) [jsf-impl-2.1.11-jbossorg-3.jar:]
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:300) [jsf-impl-2.1.11-jbossorg-3.jar:]
at org.richfaces.context.ExtendedPartialViewContextImpl.processPartial(ExtendedPartialViewContextImpl.java:199) [richfaces-core-impl-4.2.3.Final.jar:4.2.3.Final]
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:981) [jboss-jsf-api_2.1_spec-2.0.4.Final.jar:2.0.4.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) [jboss-jsf-api_2.1_spec-2.0.4.Final.jar:2.0.4.Final]
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:409) [jsf-impl-2.1.11-jbossorg-3.jar:]
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) [jsf-impl-2.1.11-jbossorg-3.jar:]
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.4.Final.jar:2.0.4.Final]
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.11-jbossorg-3.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.11-jbossorg-3.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.11-jbossorg-3.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.4.Final.jar:2.0.4.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.17.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.17.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) [jbossweb-7.0.17.Final.jar:]