[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-3211) Serialization of transient fields on converstion scoped components in clustered enviroment

Jay Balunas (JIRA) jira-events at lists.jboss.org
Mon Aug 4 15:26:08 EDT 2008


    [ https://jira.jboss.org/jira/browse/JBSEAM-3211?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12423545#action_12423545 ] 

Jay Balunas commented on JBSEAM-3211:
-------------------------------------

I can only reproduce a "not serializable" error in my cluster if I am putting the "PodporaProdaji" component itself in the session, or long running conversation scope.  If it is application or event scoped it works.

The "transient" entry will only help while serializing "DepozitWizardAction" not ""PodporaProdaji" which is why your manual serialization probably worked.

I will be able to tell more from the sample code.

> Serialization of transient fields on converstion scoped components in clustered enviroment
> ------------------------------------------------------------------------------------------
>
>                 Key: JBSEAM-3211
>                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3211
>             Project: Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.3.CR1
>         Environment: jboss 4.2.2.GA
> java 6 x64
> windows vista 64bit
>            Reporter: Tomaz Cerar
>
> I was debuging one of problems that has shown up on our tests when running in cluster.
> After adding some debuging code to jbossweb I have finally tracked it down and I am almost 100% sure it is a bug in Seam.
>  
> here is scenario:
> I have SFSB that runs in Conversation scope and I have injected lots of various components. 
> and some of those components aren't serializable, so I marked them transient so I wouldnt get any exceptions while serialization.
> But when I run this code with <distributable /> enabled I allways get exception Non Serializable attribute. 
> But if serialization is done manualy(just to try) everything goes trough fine.
> I have modifed jbossweb so I got better exception reporting for this scenarios(as naming which parameter), 
> as I found out that seam is trying to put also my transient field in session scope for needs of  conversation:
> error message I got was:
> {noformat}   
> 12:32:51,903 ERROR [SeamPhaseListener] [] uncaught exception
> java.lang.IllegalArgumentException: attribute: 'org.jboss.seam.CONVERSATION#12$podporaProdaji' of value: 'si.banka_koper.ws.ppbackend.PodporaProdajiCaching at 5092eb76' is not serializable!
>         at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1293)
>         at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1254)
>         at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130)
>         at com.sun.faces.context.SessionMap.put(ExternalContextImpl.java:972)
>         at org.jboss.seam.contexts.ServerConversationContext.flush(ServerConversationContext.java:298)
>         at org.jboss.seam.contexts.Contexts.flushAndDestroyContexts(Contexts.java:371)
>         at org.jboss.seam.contexts.FacesLifecycle.endRequest(FacesLifecycle.java:112)
>         at org.jboss.seam.jsf.SeamPhaseListener.afterRenderResponse(SeamPhaseListener.java:513)
>         at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:245)
>         at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:192)
>         at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:280)
>         at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at com.parsek.debug.TimingFilter.doFilter(TimingFilter.java:42)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
>         at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>         at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>         at org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
>         at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
>         at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
>         at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
>         at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
>         at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>         at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
>         at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
>         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:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
>         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>         at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
>         at java.lang.Thread.run(Thread.java:674)
> {noformat} 
>    
> as I understand seam trys to put everything that is in converstion scope in session event even it is not marked with @Out or marked transient.
> the compononent is marked only with @In and in that case I don't see  why seam sould put it in session as it can be injected anytime...
>  
> sample code:
> {code}  
>  Scope(ScopeType.CONVERSATION)
>  @Local
>  @Stateful
>  public class DepozitWizardAction implements DepozitWizard, 
>  Serializable {  private transient static final Logger log = Logger.getLogger(DepozitWizardAction.class);
>  
>  @In
>  private transient PodporaProdaji podporaProdaji;
>   
>  public void someMethod(){
>  		podporaProdaji.callSomeMethod();
>  }
>   
>  }
> {code} 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list