[
https://issues.apache.org/jira/browse/PORTLETBRIDGE-99?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12772062#action_12772062
]
Michael Freedman commented on PORTLETBRIDGE-99:
-----------------------------------------------
Can you clarify your last comment? Once you "hack" the bridge by marking the
RequestScopeListener as serializable -- does it still cause the
IllegalArgumentException to be thrown? Or are you finding that you are hitting
other objects that are also getting added to the session that throw this
exception? If the former, is there a different stack trace than the original
you provided -- though I am confused why you would still get this exception
once its marked serializable. One possibility is that we should also have a
null constructor?
FYI... in a perfect world this attribute would not be replication/distributed.
The purpose of this attribute is to act as a sentinel. The set of Bridge
requestScopes are managed in the Application scope -- this was done for two
reasons:
a) because this scopeManager is managing (caching) the container's request
scope objects which have no expectation of being serializable/distributed it
was thought better to not store this data in the session.
b) the bridge can easily manage (removing) all its scopes (for shutdown)
when the application terminates.
The "sentinel" on the session works as follows:
a) the object holds a string that contains a request scope prefix for this
user session (all request scopes managed by the bridge contain N levels of
prefixing to allow removal of groups of scopes).
b) implements the session listener interface so that when the session is
being removed and hence this attribute -- we are notified so we can remove the
corresponding entries in the application scope.
I.e. since we can't/don't migrate the actual bridge request scopes managed in
the app scope it would be best if we don't migrate this session attribute -- is
there anyway to disable it from being migrated? I think some servers merely
don't migrate those attrs that don't implement Serializable (without throwing
an exception) but that obviously isn't the case here. All I can think of is to
write a sessionPassivateListener which would remove the attribute, delegate,
then add it back. But I suspect that the actual passivation doesn't occur in
the listener notification process and hence this wouldn't work.
If we have to make this thing serializable -- the servlet spec implies it only
needs to be marked serializable as there is no requirement the container use
the Java serialization process/mechanism. Hence I would have figured it would
have worked from your attempt above. Please send me additional information so
we can figure this out.
> RequestScopeListener not Serializable
> -------------------------------------
>
> Key: PORTLETBRIDGE-99
> URL: https://issues.apache.org/jira/browse/PORTLETBRIDGE-99
> Project: MyFaces Portlet Bridge
> Issue Type: Bug
> Components: Impl
> Affects Versions: 1.0.0-beta
> Environment: eXo PC 2.0.5 under JBoss AS 4.2.3, using both MyFaces
> 1.2.7 and JBoss embebed Mojarra
> Reporter: Fernando Silva Lozano
>
> I get lots of erros on JBoss AS log such as:
> 13:51:03,110 ERROR [STDERR] java.lang.IllegalArgumentException:
> java.io.NotSerializableException:
> org.apache.myfaces.portlet.faces.bridge.BridgeImpl$RequestScopeListener
> 13:51:03,110 ERROR [STDERR] at
> org.jgroups.Message.setObject(Message.java:281)
> 13:51:03,110 ERROR [STDERR] at org.jgroups.Message.<init>(Message.java:141)
> 13:51:03,110 ERROR [STDERR] at
> org.exoplatform.frameworks.portletcontainer.portalframework.replication.SessionReplicator.send(SessionReplicator.java:103)
> 13:51:03,110 ERROR [STDERR] at
> org.exoplatform.frameworks.portletcontainer.portalframework.filters.PortalFrameworkFilter.doFilter(PortalFrameworkFilter.java:114)
> 13:51:03,110 ERROR [STDERR] at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 13:51:03,111 ERROR [STDERR] at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 13:51:03,111 ERROR [STDERR] at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
> 13:51:03,111 ERROR [STDERR] at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> 13:51:03,111 ERROR [STDERR] at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> 13:51:03,111 ERROR [STDERR] at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
> 13:51:03,112 ERROR [STDERR] at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> 13:51:03,112 ERROR [STDERR] at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
> 13:51:03,112 ERROR [STDERR] at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> 13:51:03,112 ERROR [STDERR] at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> 13:51:03,112 ERROR [STDERR] at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> 13:51:03,112 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
> I think it is self-explanatory: every object stored on the user HTTP session
> should be serializable, and one of the objects put there by the bridge (an
> inner class of BridgeImpl) isn't.
> I rated as Major because I suppose this will prevent my JSF portlet to work
> correctly in a clustered container.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.