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());
 }