[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-3211) Serialization of transient fields on converstion scoped components in clustered enviroment
Tomaz Cerar (JIRA)
jira-events at lists.jboss.org
Tue Aug 5 04:00:56 EDT 2008
[ https://jira.jboss.org/jira/browse/JBSEAM-3211?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12423592#action_12423592 ]
Tomaz Cerar commented on JBSEAM-3211:
-------------------------------------
Hi,
yes I wasn't very detailed what PodporaProdaji is, it is a MBean bind in JNDI and I have one @Startup component in which I lookup it in JNDI and outject it to app scope
sample code how I do that:
@Startup
@Scope(value = ScopeType.APPLICATION)
@Name("environment")
public class Environment implements Serializable {
private static final Logger log = Logger.getLogger(Environment.class);
@Out
private PodporaProdaji podporaProdaji;
@Create
public void init() {
log.info("seting up default enviroment services....");
...
podporaProdaji = getPodporaProdaji();
.....
.....
}
public static PodporaProdaji getPodporaProdaji() {
PodporaProdaji pp = null;
try {
InitialContext ic = new InitialContext();
pp = (PodporaProdaji) ic.lookup("PodporaProdaji");
ic.close();
} catch (NamingException e) {
log.error(e.getMessage(), e);
}
return pp;
}
....
....
}
this is called on startup and lookups mbean in jndi and Outjects it to application scope so all other components can access it with @In
If you want I can put together sample code so you could easier reproduce exception
> 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