[jbpm-users] [JBoss jBPM] - Problems with GraphSession.deleteProcessInstance()
michaelholtzman
do-not-reply at jboss.com
Mon Nov 24 14:08:10 EST 2008
Greetings:
We need to periodically purge process instances that have ended before a certain data. There may be hundreds or thousands of instances that need to be cleaned up. The performance is very poor ... about 8 - 10 seconds PER INSTANCE.
Looking at the code (jBPM 3.1.2) I notice two things:
1 - task instances are not deleted (the delete query is not executed, which is just as well because the preceding query, findTaskInstanceIdsForProcessInstances, does not actually return a list of ids so it would fail anyway).:
| if (includeTasks) {
| query = session.getNamedQuery("GraphSession.findTaskInstanceIdsForProcessInstance");
| query.setEntity("processInstance", processInstance);
| List<?> taskInstanceIds = query.list();
|
| query = session.getNamedQuery("GraphSession.deleteTaskInstancesById");
| query.setParameterList("taskInstanceIds", taskInstanceIds);
| }
|
Fixing the findTaskInstanceIdsForProcessInstance query and inserting query.executeUpdate() results in constraint errors in the database.
2 - Deleting the process logs are done one log entry at a time
| // delete the logs for all the process instance's tokens
| if ( (tokens!=null)
| && (!tokens.isEmpty())
| ) {
| query = session.getNamedQuery("GraphSession.selectLogsForTokens");
| query.setParameterList("tokens", tokens);
| List<?> logs = query.list();
| iter = logs.iterator();
| while (iter.hasNext()) {
| session.delete(iter.next());
| }
| }
|
I'm guessing this is taking most of the execution time .... is there a way to batch delete these logs?
Thanx.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4191854#4191854
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4191854
More information about the jbpm-users
mailing list