[ 
https://issues.apache.org/jira/browse/TAP5-1557?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13054968#comment-13054968
 ] 

Josh Canfield commented on TAP5-1557:
-------------------------------------

Calls to Session.getAttributeNames is not thread safe in all application server 
session implementations.

The above exception looks like it's being run in Tomcat 5.5 because the session 
attributes are being stored in a Hashtable. In Tomcat 6 this should be gone 
because the session attributes are stores in an ConcurrentHashMap.

Jetty 7 is using a HashMap so it's probably still going to be a problem there.

AbstractSessionPersistentFieldStrategy uses getAttributeNames in two places 
which could possibly be removed by inspecting the page/components instead of 
the session.


> ConcurrentModificationException in PersistentFieldManagerImpl
> -------------------------------------------------------------
>
>                 Key: TAP5-1557
>                 URL: https://issues.apache.org/jira/browse/TAP5-1557
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.3.0, 5.2.5
>            Reporter: Josh Canfield
>            Assignee: Josh Canfield
>
> Caused by: java.util.ConcurrentModificationException
>  at java.util.Hashtable$Enumerator.next(Hashtable.java:1031)
>  at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:101)
>  at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:67)
>  at 
> org.apache.catalina.cluster.session.DeltaSession.getAttributeNames(DeltaSession.java:1046)
>  at 
> org.apache.catalina.cluster.session.DeltaSessionFacade.getAttributeNames(DeltaSessionFacade.java:121)
>  at 
> org.apache.tapestry5.internal.services.SessionImpl.getAttributeNames(SessionImpl.java:77)
>  at 
> org.apache.tapestry5.internal.services.AbstractSessionPersistentFieldStrategy.gatherFieldChanges(AbstractSessionPersistentFieldStrategy.java:55)
>  at 
> org.apache.tapestry5.internal.services.PersistentFieldManagerImpl.gatherChanges(PersistentFieldManagerImpl.java:62)
>  at 
> $PersistentFieldManager_12fe8a643a9.gatherChanges($PersistentFieldManager_12fe8a643a9.java)
>  at 
> org.apache.tapestry5.internal.structure.PageImpl.getFieldChange(PageImpl.java:206)
>  at 
> org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.getFieldChange(InternalComponentResourcesImpl.java:176)
>  at 
> org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.hasFieldChange(InternalComponentResourcesImpl.java:186)
>  at 
> org.apache.tapestry5.internal.transform.PersistWorker$PersistentFieldConduit.restoreStateAtPageAttach(PersistWorker.java:80)
>  at 
> org.apache.tapestry5.internal.transform.PersistWorker$PersistentFieldConduit.access$000(PersistWorker.java:38)
>  at 
> org.apache.tapestry5.internal.transform.PersistWorker$PersistentFieldConduit$1.restoreStateBeforePageAttach(PersistWorker.java:61)
>  at 
> org.apache.tapestry5.internal.structure.PageImpl.attached(PageImpl.java:184)
>  at 
> org.apache.tapestry5.internal.services.NonPoolingRequestPageCacheImpl.get(NonPoolingRequestPageCacheImpl.java:78)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to