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#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...