ConcurrentModificationException

Hi Everybody,

I am getting ConcurrentModificationException in this code.

private List<Project> populateProjectFromProjectHome(List projectHomeList) {

List<Project> returnPrjList = new ArrayList<Project>();

Set<Long> projectIds = new HashSet<Long>();

Iterator itr = projectHomeList.iterator();

while (itr.hasNext()) {

ProjectHome prjHome = (ProjectHome) itr.next();

if (returnPrjList.size()!= 0 && projectIds.contains(new Long(prjHome.getProjectId()))){

Iterator itrList=returnPrjList.iterator();

while(itrList.hasNext()){

Project prj=(Project) itrList.next();

if(prj.getProjectId()==prjHome.getProjectId()){

ProjectInputSource prjInpSrc = populateProjectInputSourceForProject(prjHome);

Set<ProjectInputSource> prjInpSource=prj.getProjectInputSources();

Iterator itr2=prjInpSource.iterator();

while(itr2.hasNext()){

ProjectInputSource pis=(ProjectInputSource)itr2.next();

if(pis.getInputSource().getIpSourceId()!= prjInpSrc.getInputSource().getIpSourceId()){

prj.getProjectInputSources().add(prjInpSrc);

}

}

Outcome outcome = populateOutcomeForProject(prjHome);

Set<Outcome> outComeSet=prj.getOutcomes();

Iterator itr3=outComeSet.iterator();

while(itr3.hasNext()){

Outcome outComeObj=(Outcome)itr3.next();

if(outComeObj.getId()!= outcome.getId()){

prj.getOutcomes().add(outcome);

}

}

}

}

}else {

Project project = new Project();

ProjectInputSource prjInpSrc = populateProjectInputSourceForProject(prjHome);

Outcome outcome = populateOutcomeForProject(prjHome);

project.setName(prjHome.getProjectName());

project.setProjectId(prjHome.getProjectId());

project.setPrjDesc(prjHome.getPrjDesc());

project.getProjectInputSources().add(prjInpSrc);

project.getOutcomes().add(outcome);

projectIds.add(new Long(prjHome.getProjectId()));

returnPrjList.add(project);

}

}

return returnPrjList;

}

And i am also sending the complete Stack Trace.

java.util.ConcurrentModificationException

at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)

at java.util.HashMap$KeyIterator.next(HashMap.java:823)

at com.mhhe.authoring.ejb.project.ProjectMaintenanceImpl.populateProjectFromProjectHome(ProjectMaintenanceImpl.java:522)

at com.mhhe.authoring.ejb.project.ProjectMaintenanceImpl.setAttributesForProjectHome(ProjectMaintenanceImpl.java:2118)

at com.mhhe.authoring.ejb.project.ProjectMaintenanceImpl.getProjectsForDiscipline(ProjectMaintenanceImpl.java:220)

at com.mhhe.authoring.ejb.project.ProjectMaintenanceBean.getProjectsForDiscipline(ProjectMaintenanceBean.java:669)

at com.mhhe.authoring.ejb.project.ProjectMaintenanceBean_edy1ik_EOImpl.getProjectsForDiscipline(ProjectMaintenanceBean_edy1ik_EOImpl.java:842)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.springframework.remoting.rmi.RmiClientInterceptorUtils.doInvoke(RmiClientInterceptorUtils.java:98)

at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:75)

at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invoke(AbstractRemoteSlsbInvokerInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)

at $Proxy33.getProjectsForDiscipline(Unknown Source)

at com.mhhe.content.authoring.presentation.web.action.project.ProjectMaintenanceHomeAction.getProjectForFourPage(ProjectMaintenanceHomeAction.java:332)

at com.mhhe.content.authoring.presentation.web.action.project.ProjectMaintenanceHomeAction.executeMe(ProjectMaintenanceHomeAction.java:174)

at com.mhhe.content.authoring.presentation.web.action.ContentBaseAction.execute(ContentBaseAction.java:52)

at com.mhhe.common.presentation.web.action.AbstractBaseAction.execute(AbstractBaseAction.java:79)

at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)

at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)

at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3214)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

Plz hel me sort out this issue.

Thanks in advance

[6109 byte] By [lavpandeya] at [2007-11-27 7:58:52]
# 1
Look up ConcurrentModificationException in the API docs.Then check your code for the reasons why such an exception could occur.
CeciNEstPasUnProgrammeura at 2007-7-12 19:40:50 > top of Java-index,Java Essentials,Java Programming...
# 2
Hint: you can't iterate over a collection with an Iterator and at the same time modify it without using the iterator.
CeciNEstPasUnProgrammeura at 2007-7-12 19:40:50 > top of Java-index,Java Essentials,Java Programming...
# 3
Oh, and please learn about the code tag: http://forum.java.sun.com/help.jspa?sec=formatting
CeciNEstPasUnProgrammeura at 2007-7-12 19:40:50 > top of Java-index,Java Essentials,Java Programming...
# 4
Hi,Thanks for your suggestion but i hav to modify theList<Project> returnPrjList=new ArrayList();individual Project objects by setting new properties.Can u suggest me any other way by which i can iterateand as well as modify the Project objects?
lavpandeya at 2007-7-12 19:40:50 > top of Java-index,Java Essentials,Java Programming...
# 5
http://java.sun.com/j2se/1.5.0/docs/api/java/util/ListIterator.html#add(E)
ejpa at 2007-7-12 19:40:50 > top of Java-index,Java Essentials,Java Programming...