[
https://issues.apache.org/jira/browse/PORTLETBRIDGE-99?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12772069#action_12772069
]
Fernando Silva Lozano commented on PORTLETBRIDGE-99:
----------------------------------------------------
Michael asked:
"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."
After I marked RequestScopeListener as Serializable, another class caused the
same exception, with the same stack trace. So I went on marking more classes as
Serializable, and the exception started to happen with MyFaces core (*NOT*
portlet bridge) classes. I checked out Myfaces core and continued marking
classes as serializable, but gave up when the same exception (with same stack
trace) was thrown for an internal eXo Platform portlet container class.
if you want I can send my changes so far and the latest stack trace,but I
wonder if it's something with portlet bridge itself or with the way eXo tries
to implement clustering. I hadn't noticed before the stack trace shows
replication being managed by an eXo class and not by JBoss AS cache. Maybe we
should test with something else, say Pluto inside a clustered stand-alone
Tomcat.But I don't even know if Pluto is supposed to work on a clustered web
container.
I guess a sessionPassivateListener would work, at least the servlet spec says
it exists for these kind of scenario (replicating or passivating a session).
As far as I know both Tomcat and JBoss AS try to replicate evetything in the
HttpSession and if something can't be they throw exceptions and the current
replication transaction fails -- that is, they won't move on to the next
attribute. From previous experiences I make all session attributes serializable
as sugested (required?) by the servlet spec.
Although JBoss AS uses Tomcat's Catalina, the replication implementations are
completely different. But if you configure JBoss AS to use a TreeCacheAOP for
replication (instead of the plain TreeCache) it doesn't need serializable
attributes. This set-up is not java ee compliant, as it requires you to
instrument your classes using JBoss AOP.
> 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.