You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by DB...@intersoft.de on 2003/07/03 14:57:08 UTC
ConcurrentModificationException in the IterateTag class
Hi,
I did some loadtesting on a webapplication where i have several
jsp-documents, each of them containing iterate-tags.
When just one user is testing the application everything works fine, but
during the loadtest i got an exception every now and then.
The Exception looks like this:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown
Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at
de.intersoft.web.taglib.logik.IterateTag.doAfterBody(IterateTag.java:523)
at jsp_servlet._bestand.__VertragsdatenDetails._jspService
(__VertragsdatenDetails.java:3298)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:241)
at
de.intersoft.lifestream.wizard.WiControlServlet.leiteRequestWeiter(WiControlServlet.java:621)
at
de.intersoft.lifestream.wizard.WiControlServlet.service(WiControlServlet.java:311)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at
weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
at
weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
We modified the IterateTag-class slightly, but we didn't write any new
code, but instead only deleted unneccessary methods in order to have less
dependencies to other classes.
The doAfterBody Method, where the exception is throws looks like this:
public int doAfterBody() throws JspException
{
// Render the output from this iteration to the output stream
if(bodyContent != null)
{
TagUtil.writePrevious(pageContext, bodyContent.getString
());
bodyContent.clearBody();
}
// Decide whether to iterate or quit
if((lengthValue > 0) && (lengthCount >= lengthValue))
return (SKIP_BODY);
if(iterator.hasNext())
{
// THE EXCEPTION IS THROWN IN THE NEXT ROW !!!!
Object element = iterator.next();
if(element == null)
pageContext.removeAttribute(id);
else
pageContext.setAttribute(id, element);
lengthCount++;
if(indexId != null)
pageContext.setAttribute(indexId, new
Integer(getIndex()));
return (EVAL_BODY_TAG);
}
else
return (SKIP_BODY);
}
I know, that a ConcurrentModificationException occurs if for example the
underlying collection of the Iterator is changed or the Iterator itself is
changed while
you use it in a while(...)-block or for(...)-block or something else, but
as I said, we didn't write any new code, so I wonder if anyone else
experienced these ConcurrentModificationExceptions in the Iterate-class yet
???
Thanks in advance,
Dirk Bade
---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org
Re: ConcurrentModificationException in the IterateTag class
Posted by Kris Schneider <kr...@dotech.com>.
The most likely cause is that you've got an application-scoped collection (or
perhaps session-scoped) that has been modified in one thread while the iterate
tag is looping in another thread. Nothing really to do with the tag itself.
Quoting DBade@intersoft.de:
> Hi,
> I did some loadtesting on a webapplication where i have several
> jsp-documents, each of them containing iterate-tags.
> When just one user is testing the application everything works fine, but
> during the loadtest i got an exception every now and then.
> The Exception looks like this:
>
> java.util.ConcurrentModificationException
> at java.util.AbstractList$Itr.checkForComodification(Unknown
> Source)
> at java.util.AbstractList$Itr.next(Unknown Source)
> at
> de.intersoft.web.taglib.logik.IterateTag.doAfterBody(IterateTag.java:523)
> at jsp_servlet._bestand.__VertragsdatenDetails._jspService
> (__VertragsdatenDetails.java:3298)
> at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
> at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
> at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
> at
>
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:241)
> at
>
de.intersoft.lifestream.wizard.WiControlServlet.leiteRequestWeiter(WiControlServlet.java:621)
> at
> de.intersoft.lifestream.wizard.WiControlServlet.service(WiControlServlet.java:311)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
> at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
> at
>
weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
> at
> weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
>
> We modified the IterateTag-class slightly, but we didn't write any new
> code, but instead only deleted unneccessary methods in order to have less
> dependencies to other classes.
>
> The doAfterBody Method, where the exception is throws looks like this:
>
> public int doAfterBody() throws JspException
> {
>
> // Render the output from this iteration to the output stream
> if(bodyContent != null)
> {
> TagUtil.writePrevious(pageContext, bodyContent.getString
> ());
> bodyContent.clearBody();
> }
>
> // Decide whether to iterate or quit
> if((lengthValue > 0) && (lengthCount >= lengthValue))
> return (SKIP_BODY);
>
> if(iterator.hasNext())
> {
> // THE EXCEPTION IS THROWN IN THE NEXT ROW !!!!
> Object element = iterator.next();
>
> if(element == null)
> pageContext.removeAttribute(id);
> else
> pageContext.setAttribute(id, element);
> lengthCount++;
> if(indexId != null)
> pageContext.setAttribute(indexId, new
> Integer(getIndex()));
> return (EVAL_BODY_TAG);
> }
> else
> return (SKIP_BODY);
>
> }
>
> I know, that a ConcurrentModificationException occurs if for example the
> underlying collection of the Iterator is changed or the Iterator itself is
> changed while
> you use it in a while(...)-block or for(...)-block or something else, but
> as I said, we didn't write any new code, so I wonder if anyone else
> experienced these ConcurrentModificationExceptions in the Iterate-class yet
> ???
>
> Thanks in advance,
> Dirk Bade
--
Kris Schneider <ma...@dotech.com>
D.O.Tech <http://www.dotech.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org