You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Michael Heinen <mh...@googlemail.com> on 2010/04/09 09:31:00 UTC

ConcurrentModificationException in RequestMap.getAttributeNames

Hi,

I found followoing exception a few times in my tomcat log after running 
a JMeter stresstest some hours with a few hundred users.
Any ideas about a ConcurrentModificationException during 
RequestMap.getAttributeNames() ?

[2010-04-07 09:00:59,653] http-8080-6 [ERROR] 
[6799FA3FDEBB49F294E54657DB099957] servlets.FacesServletWrapper service: 
Caught exception in the FacesServletWrapper:
javax.servlet.ServletException: java.util.ConcurrentModificationException
     at 
javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:549)
     at 
javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:293)
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187)
     at 
com.foo.client.web.servlets.FacesServletWrapper.service(FacesServletWrapper.java:124)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
     at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
     at 
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:384)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
com.foo.client.web.filters.LoginFilter.doFilter(LoginFilter.java:183)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
com.foo.client.web.filters.EncodingFilter.doFilter(EncodingFilter.java:49)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at com.foo.client.web.filters.TimerFilter.doFilter(TimerFilter.java:71)
     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:233)
     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
     at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
     at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
     at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:619)
Caused by: javax.faces.FacesException: 
java.util.ConcurrentModificationException
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:166)
     at 
javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
     at 
javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
     at 
javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
     at 
javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
     at 
javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
     at 
org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:226)
     at 
org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463)
     at 
org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
     at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
     at 
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
     at 
org.apache.myfaces.custom.ppr.PPRLifecycleWrapper.execute(PPRLifecycleWrapper.java:68)
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:178)
     ... 32 more
Caused by: java.util.ConcurrentModificationException
     at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
     at java.util.HashMap$KeyIterator.next(HashMap.java:828)
     at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:101)
     at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:67)
     at 
org.apache.catalina.connector.Request.getAttributeNames(Request.java:962)
     at 
org.apache.catalina.connector.RequestFacade.getAttributeNames(RequestFacade.java:278)
     at 
org.apache.myfaces.context.servlet.RequestMap.getAttributeNames(RequestMap.java:66)
     at 
org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:196)
     at 
org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:194)
     at 
org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
     at 
org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
     at 
org.apache.myfaces.util.AbstractAttributeMap$KeySet.iterator(AbstractAttributeMap.java:177)
     at 
org.richfaces.component.ClonedObjectResolver.resolveCloned(ClonedObjectResolver.java:92)
     at 
org.richfaces.component.ClonedObjectResolver.getValue(ClonedObjectResolver.java:61)
     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
     at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
     at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
     at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
     at 
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
     at 
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
     at 
javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:236)
     at 
javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1176)
     at 
javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1251)
     at 
org.apache.myfaces.custom.htmlTag.AbstractHtmlTag.isRendered(AbstractHtmlTag.java:84)
     at 
org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processChildren(AbstractHtmlDataList.java:149)
     at 
org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processValidators(AbstractHtmlDataList.java:108)
     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
     at javax.faces.component.UIForm.processValidators(UIForm.java:82)
     at 
org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447)
     at 
org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:44)
     at 
javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:163)
     ... 48 more

I do not start a new thread during request processing and therefore I 
don't have any idea about the concurrent modification on Request level.

Is this rather an application issue, a myfaces issue, a richfaces issue 
or a tomcat issue?
I can't reproduce this manually of course.

Environment:
myFaces 1.2.8
richfaces 3.3.3
jsps, no facelets
Tomcat 6.0.24
jdk 1.6.0.16

Michael


Re: ConcurrentModificationException in RequestMap.getAttributeNames

Posted by Jakob Korherr <ja...@gmail.com>.
Good question. MyFaces does not start any thread, as far as I know. On
richfaces I don't know.

Maybe it is some tomcat thread who accesses the request map. Or maybe it is
even the test environment.

Anyway, I'd say as long as this is no production problem, I would ignore it.

Regards,
Jakob

2010/4/9 Michael Heinen <mh...@googlemail.com>

> Thanks Jakob for the analysis.
>
> But what is "another thread"?
> Do you know whether myFaces (or richfaces) starts another thread?
> I don't think that any other thrid party libs are involved here.
> Any instant ideas for this?
>
> It's not a real problem so far because it occurred during a load test only.
>
> Michael
>
>
> Am 09.04.2010 11:57, schrieb Jakob Korherr:
>
>  Hi Michael,
>>
>> I just took a look at this problem and it seems to be one of tomcat. I
>> also
>> checked out the tomcat 6.0.24 branch to find the code that causes the
>> exception.
>>
>> The main problem is that the request map is altered during it is processed
>> with an Iterator in org.apache.catalina.util.Enumerator -->
>> java.util.ConcurrentModificationException.
>>
>> Here is some code from tomcat that shows this conclusion:
>>
>> org.apache.catalina.connector.Request.getAttributeNames looks like this:
>>
>> public Enumeration getAttributeNames() {
>>     // cut for clarity
>>     return new Enumerator(attributes.keySet(), true);
>> }
>>
>> So this code wants to create a new Enumerator with the keySet of the
>> request
>> attributes. It also tells the Enumerator to clone the keySet before
>> generating the Iterator internally. The code that does the cloning can be
>> found in org.apache.catalina.util.Enumerator:
>>
>> public Enumerator(Iterator iterator, boolean clone) {
>>         super();
>>         if (!clone) {
>>             this.iterator = iterator;
>>         } else {
>>             List list = new ArrayList();
>>             while (iterator.hasNext()) {
>>                 list.add(iterator.next());  // line 101: this is the place
>> where the ConcurrentModificationException happens
>>             }
>>             this.iterator = list.iterator();
>>         }
>>     }
>>
>> So the constructor goes through the given Iterator (from the keySet of the
>> request map) and creates an ArrayList out of it. The problem is now that
>> if
>> another thread alters the request map during this creation, you will get
>> the
>> ConcurrentModificationException. Of course, this is very rare and
>> furthermore I guess the cloning was added to minimize the chance of a
>> ConcurrentModificationException, but it still can happen.
>>
>> If you really want to eleminate this problem, thread synchronizing has to
>> be
>> introduced here.
>>
>> Regards,
>> Jakob
>>
>>
>> 2010/4/9 Michael Heinen<mh...@googlemail.com>
>>
>>
>>
>>> Hi,
>>>
>>> I found followoing exception a few times in my tomcat log after running a
>>> JMeter stresstest some hours with a few hundred users.
>>> Any ideas about a ConcurrentModificationException during
>>> RequestMap.getAttributeNames() ?
>>>
>>> [2010-04-07 09:00:59,653] http-8080-6 [ERROR]
>>> [6799FA3FDEBB49F294E54657DB099957] servlets.FacesServletWrapper service:
>>> Caught exception in the FacesServletWrapper:
>>> javax.servlet.ServletException: java.util.ConcurrentModificationException
>>>    at
>>>
>>> javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:549)
>>>    at
>>>
>>> javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:293)
>>>    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187)
>>>    at
>>>
>>> com.foo.client.web.servlets.FacesServletWrapper.service(FacesServletWrapper.java:124)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>    at
>>> org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
>>>    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
>>>    at
>>>
>>> org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
>>>    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>    at
>>>
>>> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:384)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>    at
>>> com.foo.client.web.filters.LoginFilter.doFilter(LoginFilter.java:183)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>    at
>>>
>>> com.foo.client.web.filters.EncodingFilter.doFilter(EncodingFilter.java:49)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>>    at
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>>    at
>>> com.foo.client.web.filters.TimerFilter.doFilter(TimerFilter.java:71)
>>>    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:233)
>>>    at
>>>
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>>    at
>>>
>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
>>>    at
>>>
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>>    at
>>>
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>>    at
>>>
>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>>    at
>>>
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>>>    at
>>>
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
>>>    at
>>>
>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
>>>    at
>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>>>    at java.lang.Thread.run(Thread.java:619)
>>> Caused by: javax.faces.FacesException:
>>> java.util.ConcurrentModificationException
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:166)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>>    at
>>> org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:226)
>>>    at
>>>
>>> org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463)
>>>    at
>>>
>>> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
>>>    at
>>>
>>> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
>>>    at
>>> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>>>    at
>>>
>>> org.apache.myfaces.custom.ppr.PPRLifecycleWrapper.execute(PPRLifecycleWrapper.java:68)
>>>    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:178)
>>>    ... 32 more
>>> Caused by: java.util.ConcurrentModificationException
>>>    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
>>>    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
>>>    at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:101)
>>>    at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:67)
>>>    at
>>> org.apache.catalina.connector.Request.getAttributeNames(Request.java:962)
>>>    at
>>>
>>> org.apache.catalina.connector.RequestFacade.getAttributeNames(RequestFacade.java:278)
>>>    at
>>>
>>> org.apache.myfaces.context.servlet.RequestMap.getAttributeNames(RequestMap.java:66)
>>>    at
>>>
>>> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:196)
>>>    at
>>>
>>> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:194)
>>>    at
>>>
>>> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>>>    at
>>>
>>> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>>>    at
>>>
>>> org.apache.myfaces.util.AbstractAttributeMap$KeySet.iterator(AbstractAttributeMap.java:177)
>>>    at
>>>
>>> org.richfaces.component.ClonedObjectResolver.resolveCloned(ClonedObjectResolver.java:92)
>>>    at
>>>
>>> org.richfaces.component.ClonedObjectResolver.getValue(ClonedObjectResolver.java:61)
>>>    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>>>    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>>>    at
>>>
>>> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
>>>    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
>>>    at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
>>>    at
>>> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
>>>    at
>>>
>>> org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
>>>    at
>>>
>>> javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:236)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1176)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1251)
>>>    at
>>>
>>> org.apache.myfaces.custom.htmlTag.AbstractHtmlTag.isRendered(AbstractHtmlTag.java:84)
>>>    at
>>>
>>> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processChildren(AbstractHtmlDataList.java:149)
>>>    at
>>>
>>> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processValidators(AbstractHtmlDataList.java:108)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>>    at
>>>
>>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>>    at javax.faces.component.UIForm.processValidators(UIForm.java:82)
>>>    at
>>>
>>> org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447)
>>>    at
>>>
>>> org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:44)
>>>    at
>>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:163)
>>>    ... 48 more
>>>
>>> I do not start a new thread during request processing and therefore I
>>> don't
>>> have any idea about the concurrent modification on Request level.
>>>
>>> Is this rather an application issue, a myfaces issue, a richfaces issue
>>> or
>>> a tomcat issue?
>>> I can't reproduce this manually of course.
>>>
>>> Environment:
>>> myFaces 1.2.8
>>> richfaces 3.3.3
>>> jsps, no facelets
>>> Tomcat 6.0.24
>>> jdk 1.6.0.16
>>>
>>> Michael
>>>
>>>
>>>
>>>
>>
>>
>>
>
>


-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Re: ConcurrentModificationException in RequestMap.getAttributeNames

Posted by Michael Heinen <mh...@googlemail.com>.
Thanks Jakob for the analysis.

But what is "another thread"?
Do you know whether myFaces (or richfaces) starts another thread?
I don't think that any other thrid party libs are involved here.
Any instant ideas for this?

It's not a real problem so far because it occurred during a load test only.

Michael


Am 09.04.2010 11:57, schrieb Jakob Korherr:
> Hi Michael,
>
> I just took a look at this problem and it seems to be one of tomcat. I also
> checked out the tomcat 6.0.24 branch to find the code that causes the
> exception.
>
> The main problem is that the request map is altered during it is processed
> with an Iterator in org.apache.catalina.util.Enumerator -->
> java.util.ConcurrentModificationException.
>
> Here is some code from tomcat that shows this conclusion:
>
> org.apache.catalina.connector.Request.getAttributeNames looks like this:
>
> public Enumeration getAttributeNames() {
>      // cut for clarity
>      return new Enumerator(attributes.keySet(), true);
> }
>
> So this code wants to create a new Enumerator with the keySet of the request
> attributes. It also tells the Enumerator to clone the keySet before
> generating the Iterator internally. The code that does the cloning can be
> found in org.apache.catalina.util.Enumerator:
>
> public Enumerator(Iterator iterator, boolean clone) {
>          super();
>          if (!clone) {
>              this.iterator = iterator;
>          } else {
>              List list = new ArrayList();
>              while (iterator.hasNext()) {
>                  list.add(iterator.next());  // line 101: this is the place
> where the ConcurrentModificationException happens
>              }
>              this.iterator = list.iterator();
>          }
>      }
>
> So the constructor goes through the given Iterator (from the keySet of the
> request map) and creates an ArrayList out of it. The problem is now that if
> another thread alters the request map during this creation, you will get the
> ConcurrentModificationException. Of course, this is very rare and
> furthermore I guess the cloning was added to minimize the chance of a
> ConcurrentModificationException, but it still can happen.
>
> If you really want to eleminate this problem, thread synchronizing has to be
> introduced here.
>
> Regards,
> Jakob
>
>
> 2010/4/9 Michael Heinen<mh...@googlemail.com>
>
>    
>> Hi,
>>
>> I found followoing exception a few times in my tomcat log after running a
>> JMeter stresstest some hours with a few hundred users.
>> Any ideas about a ConcurrentModificationException during
>> RequestMap.getAttributeNames() ?
>>
>> [2010-04-07 09:00:59,653] http-8080-6 [ERROR]
>> [6799FA3FDEBB49F294E54657DB099957] servlets.FacesServletWrapper service:
>> Caught exception in the FacesServletWrapper:
>> javax.servlet.ServletException: java.util.ConcurrentModificationException
>>     at
>> javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:549)
>>     at
>> javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:293)
>>     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187)
>>     at
>> com.foo.client.web.servlets.FacesServletWrapper.service(FacesServletWrapper.java:124)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>     at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
>>     at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
>>     at
>> org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
>>     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>     at
>> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:384)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>     at com.foo.client.web.filters.LoginFilter.doFilter(LoginFilter.java:183)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>     at
>> com.foo.client.web.filters.EncodingFilter.doFilter(EncodingFilter.java:49)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>     at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>     at com.foo.client.web.filters.TimerFilter.doFilter(TimerFilter.java:71)
>>     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:233)
>>     at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>     at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
>>     at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>     at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>     at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>     at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>>     at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
>>     at
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
>>     at
>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>>     at java.lang.Thread.run(Thread.java:619)
>> Caused by: javax.faces.FacesException:
>> java.util.ConcurrentModificationException
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:166)
>>     at
>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>     at
>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>     at
>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>     at
>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>>     at
>> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>>     at
>> org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:226)
>>     at
>> org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463)
>>     at
>> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
>>     at
>> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
>>     at
>> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>>     at
>> org.apache.myfaces.custom.ppr.PPRLifecycleWrapper.execute(PPRLifecycleWrapper.java:68)
>>     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:178)
>>     ... 32 more
>> Caused by: java.util.ConcurrentModificationException
>>     at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
>>     at java.util.HashMap$KeyIterator.next(HashMap.java:828)
>>     at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:101)
>>     at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:67)
>>     at
>> org.apache.catalina.connector.Request.getAttributeNames(Request.java:962)
>>     at
>> org.apache.catalina.connector.RequestFacade.getAttributeNames(RequestFacade.java:278)
>>     at
>> org.apache.myfaces.context.servlet.RequestMap.getAttributeNames(RequestMap.java:66)
>>     at
>> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:196)
>>     at
>> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:194)
>>     at
>> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>>     at
>> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>>     at
>> org.apache.myfaces.util.AbstractAttributeMap$KeySet.iterator(AbstractAttributeMap.java:177)
>>     at
>> org.richfaces.component.ClonedObjectResolver.resolveCloned(ClonedObjectResolver.java:92)
>>     at
>> org.richfaces.component.ClonedObjectResolver.getValue(ClonedObjectResolver.java:61)
>>     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>>     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>>     at
>> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
>>     at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
>>     at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
>>     at
>> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
>>     at
>> org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
>>     at
>> javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:236)
>>     at
>> javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1176)
>>     at
>> javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1251)
>>     at
>> org.apache.myfaces.custom.htmlTag.AbstractHtmlTag.isRendered(AbstractHtmlTag.java:84)
>>     at
>> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processChildren(AbstractHtmlDataList.java:149)
>>     at
>> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processValidators(AbstractHtmlDataList.java:108)
>>     at
>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>     at
>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>     at
>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>     at
>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>     at
>> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>>     at javax.faces.component.UIForm.processValidators(UIForm.java:82)
>>     at
>> org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447)
>>     at
>> org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:44)
>>     at
>> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:163)
>>     ... 48 more
>>
>> I do not start a new thread during request processing and therefore I don't
>> have any idea about the concurrent modification on Request level.
>>
>> Is this rather an application issue, a myfaces issue, a richfaces issue or
>> a tomcat issue?
>> I can't reproduce this manually of course.
>>
>> Environment:
>> myFaces 1.2.8
>> richfaces 3.3.3
>> jsps, no facelets
>> Tomcat 6.0.24
>> jdk 1.6.0.16
>>
>> Michael
>>
>>
>>      
>
>    


Re: ConcurrentModificationException in RequestMap.getAttributeNames

Posted by Jakob Korherr <ja...@gmail.com>.
Hi Michael,

I just took a look at this problem and it seems to be one of tomcat. I also
checked out the tomcat 6.0.24 branch to find the code that causes the
exception.

The main problem is that the request map is altered during it is processed
with an Iterator in org.apache.catalina.util.Enumerator -->
java.util.ConcurrentModificationException.

Here is some code from tomcat that shows this conclusion:

org.apache.catalina.connector.Request.getAttributeNames looks like this:

public Enumeration getAttributeNames() {
    // cut for clarity
    return new Enumerator(attributes.keySet(), true);
}

So this code wants to create a new Enumerator with the keySet of the request
attributes. It also tells the Enumerator to clone the keySet before
generating the Iterator internally. The code that does the cloning can be
found in org.apache.catalina.util.Enumerator:

public Enumerator(Iterator iterator, boolean clone) {
        super();
        if (!clone) {
            this.iterator = iterator;
        } else {
            List list = new ArrayList();
            while (iterator.hasNext()) {
                list.add(iterator.next());  // line 101: this is the place
where the ConcurrentModificationException happens
            }
            this.iterator = list.iterator();
        }
    }

So the constructor goes through the given Iterator (from the keySet of the
request map) and creates an ArrayList out of it. The problem is now that if
another thread alters the request map during this creation, you will get the
ConcurrentModificationException. Of course, this is very rare and
furthermore I guess the cloning was added to minimize the chance of a
ConcurrentModificationException, but it still can happen.

If you really want to eleminate this problem, thread synchronizing has to be
introduced here.

Regards,
Jakob


2010/4/9 Michael Heinen <mh...@googlemail.com>

> Hi,
>
> I found followoing exception a few times in my tomcat log after running a
> JMeter stresstest some hours with a few hundred users.
> Any ideas about a ConcurrentModificationException during
> RequestMap.getAttributeNames() ?
>
> [2010-04-07 09:00:59,653] http-8080-6 [ERROR]
> [6799FA3FDEBB49F294E54657DB099957] servlets.FacesServletWrapper service:
> Caught exception in the FacesServletWrapper:
> javax.servlet.ServletException: java.util.ConcurrentModificationException
>    at
> javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:549)
>    at
> javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:293)
>    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187)
>    at
> com.foo.client.web.servlets.FacesServletWrapper.service(FacesServletWrapper.java:124)
>    at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>    at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
>    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
>    at
> org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
>    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
>    at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>    at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>    at
> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:384)
>    at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>    at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>    at com.foo.client.web.filters.LoginFilter.doFilter(LoginFilter.java:183)
>    at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>    at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>    at
> com.foo.client.web.filters.EncodingFilter.doFilter(EncodingFilter.java:49)
>    at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>    at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>    at com.foo.client.web.filters.TimerFilter.doFilter(TimerFilter.java:71)
>    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:233)
>    at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>    at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
>    at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>    at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>    at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>    at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>    at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
>    at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
>    at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>    at java.lang.Thread.run(Thread.java:619)
> Caused by: javax.faces.FacesException:
> java.util.ConcurrentModificationException
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:166)
>    at
> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>    at
> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>    at
> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>    at
> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
>    at
> javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
>    at
> org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:226)
>    at
> org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:463)
>    at
> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
>    at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
>    at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>    at
> org.apache.myfaces.custom.ppr.PPRLifecycleWrapper.execute(PPRLifecycleWrapper.java:68)
>    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:178)
>    ... 32 more
> Caused by: java.util.ConcurrentModificationException
>    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
>    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
>    at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:101)
>    at org.apache.catalina.util.Enumerator.<init>(Enumerator.java:67)
>    at
> org.apache.catalina.connector.Request.getAttributeNames(Request.java:962)
>    at
> org.apache.catalina.connector.RequestFacade.getAttributeNames(RequestFacade.java:278)
>    at
> org.apache.myfaces.context.servlet.RequestMap.getAttributeNames(RequestMap.java:66)
>    at
> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:196)
>    at
> org.apache.myfaces.util.AbstractAttributeMap$AbstractAttributeIterator.<init>(AbstractAttributeMap.java:194)
>    at
> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>    at
> org.apache.myfaces.util.AbstractAttributeMap$KeyIterator.<init>(AbstractAttributeMap.java:224)
>    at
> org.apache.myfaces.util.AbstractAttributeMap$KeySet.iterator(AbstractAttributeMap.java:177)
>    at
> org.richfaces.component.ClonedObjectResolver.resolveCloned(ClonedObjectResolver.java:92)
>    at
> org.richfaces.component.ClonedObjectResolver.getValue(ClonedObjectResolver.java:61)
>    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
>    at
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:140)
>    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
>    at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
>    at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
>    at
> org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
>    at
> javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:236)
>    at
> javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1176)
>    at
> javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1251)
>    at
> org.apache.myfaces.custom.htmlTag.AbstractHtmlTag.isRendered(AbstractHtmlTag.java:84)
>    at
> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processChildren(AbstractHtmlDataList.java:149)
>    at
> org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processValidators(AbstractHtmlDataList.java:108)
>    at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>    at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>    at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>    at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>    at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:726)
>    at javax.faces.component.UIForm.processValidators(UIForm.java:82)
>    at
> org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:447)
>    at
> org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:44)
>    at
> javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:163)
>    ... 48 more
>
> I do not start a new thread during request processing and therefore I don't
> have any idea about the concurrent modification on Request level.
>
> Is this rather an application issue, a myfaces issue, a richfaces issue or
> a tomcat issue?
> I can't reproduce this manually of course.
>
> Environment:
> myFaces 1.2.8
> richfaces 3.3.3
> jsps, no facelets
> Tomcat 6.0.24
> jdk 1.6.0.16
>
> Michael
>
>


-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at