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]
>
>

Reply via email to