private void deleteArchivedFlowNodeInstances(final long processInstanceId) throws SFlowNodeReadException, SBonitaSearchException, SConnectorInstanceDeletionException, SFlowNodeDeletionException, SDataInstanceException { List<SAFlowNodeInstance> activityInstances; do { activityInstances = activityService.getArchivedFlowNodeInstances(processInstanceId, 0, BATCH_SIZE); final HashSet<Long> orgActivityIds = new HashSet<Long>(); final ArrayList<SAFlowNodeInstance> orgActivities = new ArrayList<SAFlowNodeInstance>(); for (final SAFlowNodeInstance activityInstance : activityInstances) { if (!orgActivityIds.contains(activityInstance.getSourceObjectId())) { orgActivityIds.add(activityInstance.getSourceObjectId()); orgActivities.add(activityInstance); } activityService.deleteArchivedFlowNodeInstance(activityInstance); } for (final SAFlowNodeInstance orgActivity : orgActivities) { deleteArchivedFlowNodeInstanceElements(orgActivity); } } while (!activityInstances.isEmpty()); }