[
http://jira.jboss.com/jira/browse/RF-3631?page=all ]
Stanimir Stamenkov updated RF-3631:
-----------------------------------
Attachment: test-cluster-session.ear
Deploy into the the 'all' server configuration ($JBOSS_HOME/server/all/deploy),
then navigate to <
http://server/cluster-session/test.seam>. Open the same page in
10-20 windows - by Ctrl+clicking the "Test" heading link in Firefox, for
example. Watch the JBoss server console for a ConcurentModificationException error - give
it enough time to happen (e.g. 5 minutes). Here's full stack trace of the exception I
get with this example:
12:31:28,687 ERROR [JBossCacheService] externalizeSession(): exception occurred
externalizing session SessionBasedClusteredSession[id: 2682B8A2A5A776CF13C4D86E33218059
lastAccessedTime: 1212571888609 version: 289 lastOutdated: 0]
java.util.ConcurrentModificationException
at
org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator.nextEntry(AbstractLinkedMap.java:555)
at
org.apache.commons.collections.map.AbstractLinkedMap$LinkMapIterator.next(AbstractLinkedMap.java:367)
at
org.apache.commons.collections.map.AbstractHashedMap.doWriteObject(AbstractHashedMap.java:1179)
at org.apache.commons.collections.map.LRUMap.doWriteObject(LRUMap.java:380)
at org.apache.commons.collections.map.LRUMap.writeObject(LRUMap.java:364)
at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at
org.apache.commons.collections.map.AbstractHashedMap.doWriteObject(AbstractHashedMap.java:1180)
at org.apache.commons.collections.map.LRUMap.doWriteObject(LRUMap.java:380)
at org.apache.commons.collections.map.LRUMap.writeObject(LRUMap.java:364)
at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at
java.util.concurrent.ConcurrentHashMap.writeObject(ConcurrentHashMap.java:1380)
at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at
org.jboss.web.tomcat.service.session.SessionBasedClusteredSession.writeExternal(SessionBasedClusteredSession.java:175)
at
org.jboss.web.tomcat.service.session.JBossCacheService.externalizeSession(JBossCacheService.java:1027)
at
org.jboss.web.tomcat.service.session.JBossCacheService.putSession(JBossCacheService.java:316)
at
org.jboss.web.tomcat.service.session.JBossCacheClusteredSession.processSessionRepl(JBossCacheClusteredSession.java:121)
at
org.jboss.web.tomcat.service.session.JBossCacheManager.processSessionRepl(JBossCacheManager.java:1097)
at
org.jboss.web.tomcat.service.session.JBossCacheManager.storeSession(JBossCacheManager.java:652)
at
org.jboss.web.tomcat.service.session.InstantSnapshotManager.snapshot(InstantSnapshotManager.java:49)
at
org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:98)
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:595)
ConcurrentModificationException during session serialization
------------------------------------------------------------
Key: RF-3631
URL:
http://jira.jboss.com/jira/browse/RF-3631
Project: RichFaces
Issue Type: Bug
Affects Versions: 3.2.0, 3.1.5
Environment: JBboss 4.2.2.GA
Seam 2.0.2.SP1
JDK 1.5.0_15
Windows XP Pro SP2
Reporter: Stanimir Stamenkov
Attachments: test-cluster-session.ear
Concurrent requests cause java.util.ConcurrentModificationException during session
serialization in cluster environment.
I've initially posted this issue to the RichFaces users forum, but then posted to the
Clustering/JBoss, too:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=136590
where I've got feedback I'm on the right track my problem is probably caused by
the RichFaces (Ajax4Jsf) library. Basically the web session gets modified while it is
been serialized when concurrent requests are made. bstansberry(a)jboss.com have written:
"The session management layer does not prevent concurrent access to the session. The
session's internal data structures can deal with concurrency (e.g. the attribute map
is a ConcurrentHashMap) but if the objects you'll store in it are going to be accessed
concurrently, they'll need to be thread safe or have access to them
synchronized."
I've prepared minimal test case (I'm about to attach) demonstrating the problem.
I've tried it with both RichFaces 3.1.5.GA (part of Seam 2.0.2.SP1) and RichFaces
3.2.0.SR1 (which I'm using with my application).
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira