AnsweredAssumed Answered

java.util.ConcurrentModificationException

Question asked by hardik.thakkar1 on Aug 28, 2014
Latest reply on Oct 1, 2014 by hardik.thakkar1
Hello,

I am getting below exception while running code from Web-app. Please help.

SEVERE: Servlet.service() for servlet appServlet threw exception
java.util.ConcurrentModificationException
   at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
   at java.util.HashMap$ValueIterator.next(HashMap.java:822)
   at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:210)
   at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:137)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:66)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
   at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
   at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
   at org.activiti.engine.impl.RepositoryServiceImpl.deploy(RepositoryServiceImpl.java:78)
   at org.activiti.engine.impl.repository.DeploymentBuilderImpl.deploy(DeploymentBuilderImpl.java:156)
   at com.rbos.marketrisk.controllers.TestActivitiController.executeWorkflow(TestActivitiController.java:48)
   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:597)

Code:

// Create Activiti process engine
      ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

      // Get Activiti services
      RepositoryService repositoryService = processEngine
            .getRepositoryService();
      RuntimeService runtimeService = processEngine.getRuntimeService();

      // Deploy the process definition
      repositoryService.createDeployment()
            .addClasspathResource("FinancialReportProcess.bpmn20.xml")
            .deploy();

      // Start a process instance
      String procId = runtimeService.startProcessInstanceByKey(
            "financialReport").getId();

      // Get the first task
      TaskService taskService = processEngine.getTaskService();
      List<Task> tasks = taskService.createTaskQuery()
            .taskCandidateGroup("accountancy").list();
      for (Task task : tasks) {
         System.out
               .println("Following task is available for accountancy group: "
                     + task.getName());

         // claim it
         taskService.claim(task.getId(), "fozzie");
      }

      // Verify Fozzie can now retrieve the task
      tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();
      for (Task task : tasks) {
         System.out.println("Task for fozzie: " + task.getName());

         // Complete the task
         taskService.complete(task.getId());
      }

      System.out.println("Number of tasks for fozzie: "
            + taskService.createTaskQuery().taskAssignee("fozzie").count());

      // Retrieve and claim the second task
      tasks = taskService.createTaskQuery().taskCandidateGroup("management")
            .list();
      for (Task task : tasks) {
         System.out
               .println("Following task is available for accountancy group: "
                     + task.getName());
         taskService.claim(task.getId(), "kermit");
      }

      // Completing the second task ends the process
      for (Task task : tasks) {
         taskService.complete(task.getId());
      }

      // verify that the process is actually finished
      HistoryService historyService = processEngine.getHistoryService();
      HistoricProcessInstance historicProcessInstance = historyService
            .createHistoricProcessInstanceQuery().processInstanceId(procId)
            .singleResult();
      System.out.println("Process instance end time: "
            + historicProcessInstance.getEndTime());

Outcomes