You stick to your code. However, update your code part such that when
create  your ArrayList, do it as Collections.synchronizedList(new
ArrayList(...)).

Also, you must be removing or updating object directly inside your list
object which is why you're getting this error. Try to get a reference to
Iterator from your ArrayList object and invoke "remove" or "add" methods via
the Iterator to get away from the ConcurrentModificationException.

HTH

Eduardo


On Wed, Feb 27, 2008 at 5:48 AM, Othon Reyes Sanchez <[EMAIL PROTECTED]>
wrote:

> do you know a collection that is thread safe?
>
>
> On Tue, Feb 26, 2008 at 12:42 PM, Randy Burgess <[EMAIL PROTECTED]>
> wrote:
>
> > I believe this exception occurs when you try and modify an ArrayList
> while
> > iterating over said list. ArrayList is not thread safe.
> >
> > Regards,
> > Randy Burgess
> > Sr. Web Applications Developer
> > Nuvox Communications
> >
> >
> >
> > > From: Othon Reyes Sanchez <[EMAIL PROTECTED]>
> > > Reply-To: Struts Users Mailing List <user@struts.apache.org>
> > > Date: Tue, 26 Feb 2008 12:39:40 -0600
> > > To: <user@struts.apache.org>
> > > Subject: java.util.ConcurrentModificationException at
> IteratorComponent
> > >
> > > I get the following exception when i do some stress test with jmeter.
> > >> java.util.ConcurrentModificationException
> > >>       at java.util.AbstractList$Itr.checkForComodification(Unknown
> > Source)
> > >>       at java.util.AbstractList$Itr.next(Unknown Source)
> > >>       at org.apache.struts2.components.IteratorComponent.end(
> > > IteratorComponent.java:246)
> > >>       at org.apache.struts2.views.jsp.IteratorTag.doAfterBody(
> > > IteratorTag.java:68)
> > >>       at
> > >
> >
> org.apache.jsp.jupiters2.archivo.jsp.expediente.frmPrestamo_jsp._jspx_meth_s_0
> > > 05fiterator_005f0
> > > (frmPrestamo_jsp.java:1595)
> > >>       at
> > >
> >
> org.apache.jsp.jupiters2.archivo.jsp.expediente.frmPrestamo_jsp._jspx_meth_s_0
> > > 05fform_005f0
> > > (frmPrestamo_jsp.java:640)
> > >>       at
> > >
> >
> org.apache.jsp.jupiters2.archivo.jsp.expediente.frmPrestamo_jsp._jspService
> > > (frmPrestamo_jsp.java:186)
> > >>       at org.apache.jasper.runtime.HttpJspBase.service(
> HttpJspBase.java
> > > :98)
> > >>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > >>       at org.apache.jasper.servlet.JspServletWrapper.service(
> > > JspServletWrapper.java:328)
> > >>       at org.apache.jasper.servlet.JspServlet.serviceJspFile(
> > > JspServlet.java:315)
> > >>       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java
> > :265)
> > >>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > >>       at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> > > ApplicationFilterChain.java:269)
> > >>       at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> > > ApplicationFilterChain.java:188)
> > >>       at org.apache.catalina.core.ApplicationDispatcher.invoke(
> > > ApplicationDispatcher.java:691)
> > >>       at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(
> > > ApplicationDispatcher.java:469)
> > >>       at org.apache.catalina.core.ApplicationDispatcher.doForward(
> > > ApplicationDispatcher.java:403)
> > >>       at org.apache.catalina.core.ApplicationDispatcher.forward(
> > > ApplicationDispatcher.java:301)
> > >>       at
> > org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(
> > > ServletDispatcherResult.java:139)
> > >>       at org.apache.struts2.dispatcher.StrutsResultSupport.execute(
> > > StrutsResultSupport.java:178)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(
> > > DefaultActionInvocation.java:348)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:253)
> > >>       at
> > >
> >
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept
> > (
> > > DefaultWorkflowInterceptor.java:221)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > > MethodFilterInterceptor.java:86)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > > com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(
> > > ValidationInterceptor.java:150)
> > >>       at
> > >
> >
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIn
> > > tercept
> > > (AnnotationValidationInterceptor.java:48)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > > MethodFilterInterceptor.java:86)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept
> > (
> > > ConversionErrorInterceptor.java:123)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> > > ParametersInterceptor.java:167)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > > MethodFilterInterceptor.java:86)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> >
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(
> > > StaticParametersInterceptor.java:105)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at org.apache.struts2.interceptor.CheckboxInterceptor.intercept
> (
> > > CheckboxInterceptor.java:83)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept
> > (
> > > FileUploadInterceptor.java:207)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(
> > > ModelDrivenInterceptor.java:74)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> >
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept
> > (
> > > ScopedModelDrivenInterceptor.java:127)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(
> > > ProfilingActivationInterceptor.java:107)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(
> > > DebuggingInterceptor.java:206)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept
> > > (ChainingInterceptor.java:115)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(
> > > I18nInterceptor.java:143)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(
> > > PrepareInterceptor.java:121)
> > >>       at
> > > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > > MethodFilterInterceptor.java:86)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > org.apache.struts2.interceptor.ServletConfigInterceptor.intercept
> > > (ServletConfigInterceptor.java:170)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept
> > (
> > > AliasInterceptor.java:123)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at
> > >
> >
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(
> > > ExceptionMappingInterceptor.java:176)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:224)
> > >>       at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> > > DefaultActionInvocation.java:223)
> > >>       at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> > > UtilTimerStack.java:455)
> > >>       at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> > > DefaultActionInvocation.java:221)
> > >>       at org.apache.struts2.impl.StrutsActionProxy.execute(
> > > StrutsActionProxy.java:50)
> > >>       at org.apache.struts2.dispatcher.Dispatcher.serviceAction(
> > > Dispatcher.java:504)
> > >>       at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(
> > > FilterDispatcher.java:419)
> > >>       at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> > > ApplicationFilterChain.java:215)
> > >>       at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> > > ApplicationFilterChain.java:188)
> > >>       at org.apache.catalina.core.StandardWrapperValve.invoke(
> > > StandardWrapperValve.java:210)
> > >>       at org.apache.catalina.core.StandardContextValve.invoke(
> > > StandardContextValve.java:174)
> > >>       at org.apache.catalina.core.StandardHostValve.invoke(
> > > StandardHostValve.java:127)
> > >>       at org.apache.catalina.valves.ErrorReportValve.invoke(
> > > ErrorReportValve.java:117)
> > >>       at org.apache.catalina.core.StandardEngineValve.invoke(
> > > StandardEngineValve.java:108)
> > >>       at org.apache.catalina.connector.CoyoteAdapter.service(
> > > CoyoteAdapter.java:151)
> > >>       at org.apache.coyote.http11.Http11Processor.process(
> > > Http11Processor.java:870)
> > >>       at
> > >
> >
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processCon
> > > nection
> > > (Http11BaseProtocol.java:665)
> > >>       at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> > > PoolTcpEndpoint.java:528)
> > >>       at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
> > > LeaderFollowerWorkerThread.java:81)
> > >>       at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> > > ThreadPool.java:685)
> > >>       at java.lang.Thread.run(Unknown Source)
> > >> I tried with different test plans and with different number of
> > > threads/users in my test but basically i get this exception since 50
> > users.
> > >> I do the following in my test paln:
> > >> Enter to the page
> > >> Lookup for some data with an autocompleter
> > >> Input another data in a textbox
> > >> insert the previous information in a list that is a property of the
> > action
> > > related to the page( in my code ia have an action per page)
> > >> The list is displayed in a <table> in my page using <s:iterator>
> > >> Delete the item recently added to the list.
> > >> By the way  my action is in the session.
> > >> Maybe the problem is my code, so please i want your opinion about
> this
> > > situation. I have made another stress test in webapps without struts2
> > and i
> > > never had this exception.
> >
> >
> >
> > This email and any attachments ("Message") may contain legally
> privileged
> > and/or confidential information.  If you are not the addressee, or if
> this
> > Message has been addressed to you in error, you are not authorized to
> read,
> > copy, or distribute it, and we ask that you please delete it (including
> all
> > copies) and notify the sender by return email.  Delivery of this Message
> to
> > any person other than the intended recipient(s) shall not be deemed a
> waiver
> > of confidentiality and/or a privilege.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>



-- 
Eduardo Dela Rosa

Reply via email to