Hi,

We have a complex process with multiple sub-processes, tasks and multiple child 
tokens in the subprocesses.

We found that GraphSession.deleteProcessInstance() method is unable to delete 
the process instance.
It falls short on following points:
1) It is not deleting the taskinstances, though it creates the query but it is 
never executed.
2) It is not deleting the sub-process and their child tokens, which are not 
refered by "token.getSubProcessInstance".

Here is an updated version of deleteProcessInstance() that works for us:

  | public void deleteProcessInstance(ProcessInstance processInstance, boolean 
includeTasks, boolean includeJobs) {
  |         if (processInstance==null) throw new JbpmException("processInstance 
is null in JbpmSession.deleteProcessInstance()");
  |         try {
  |           // find the tokens
  |           Query query = 
session.getNamedQuery("GraphSession.findTokensForProcessInstance");
  |           query.setEntity("processInstance", processInstance);
  |           List tokens = query.list();
  |           
  |           // deleteSubProcesses
  |           Iterator iter = tokens.iterator();
  |           while (iter.hasNext()) {
  |             Token token = (Token) iter.next();
  |             deleteSubProcesses(token);
  | 
  |           }
  | 
  |           // jobs
  |           if (includeJobs) {
  |             query = 
session.getNamedQuery("GraphSession.deleteJobsForProcessInstance");
  |             query.setEntity("processInstance", processInstance);
  |             query.executeUpdate();
  |           }
  |           
  |           // tasks
  |           if (includeTasks) {
  |             query = 
session.getNamedQuery("GraphSession.findTaskInstanceIdsForProcessInstance");
  |             query.setEntity("processInstance", processInstance);
  |             List taskInstances = query.list();
  |             if(taskInstances.size()>0){
  |                     List<Long> taskInstancesId = new ArrayList<Long>();
  |                     for(Object ti: taskInstances)
  |                     {
  |                             taskInstancesId.add(((TaskInstance)ti).getId());
  |                     }
  |                     query = 
session.getNamedQuery("GraphSession.deleteTaskInstancesById");
  |                     
query.setParameterList("taskInstanceIds",taskInstancesId);
  |                     query.executeUpdate();
  |             }
  |             
  |             
  |           }
  |            
  |           // delete the logs for all the process instance's tokens
  |           query = session.getNamedQuery("GraphSession.selectLogsForTokens");
  |           query.setParameterList("tokens", tokens);
  |           List logs = query.list();
  |           iter = logs.iterator();
  |           while (iter.hasNext()) {
  |             session.delete(iter.next());
  |           }
  |           
  |           iter = tokens.iterator();
  |           while(iter.hasNext()){
  |               Token token = (Token)iter.next();
  |               if(processInstance.getRootToken().getId()!= token.getId())
  |               session.delete(token);
  |           }
  |               
  | 
  | 
  |           // then delete the process instance
  |           session.delete(processInstance);
  |           
  |         } catch (Exception e) {
  |           e.printStackTrace(); 
  |           log.error(e);
  |           throw new JbpmException("couldn't delete process instance '" + 
processInstance.getId() + "'", e);
  |         } 
  |       }
  | 

The "ProcessSession.findSubprocessByToken" query is as follows:

  |  select pi
  |       from org.jbpm.graph.exe.ProcessInstance as pi
  |       where pi.superProcessToken = :token
  | 

Hope it helps... I have not checked Jira for any such known issues, please let 
me know if I need to raise this ticket.

Regards,
Jitendra

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3984006#3984006

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3984006
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to