private void deleteProcessInstanceElements(final SProcessInstance processInstance)
     throws SBonitaException {
   SProcessDefinition processDefinition = null;
   try {
     processDefinition =
         processDefinitionService.getProcessDefinition(processInstance.getProcessDefinitionId());
   } catch (final SProcessDefinitionNotFoundException e) {
     // delete anyway
   }
   try {
     tokenService.deleteTokens(processInstance.getId());
   } catch (final SObjectReadException e) {
     throw new SProcessInstanceModificationException(e);
   } catch (final SObjectModificationException e) {
     throw new SProcessInstanceModificationException(e);
   }
   deleteFlowNodeInstances(processInstance.getId(), processDefinition);
   deleteDataInstancesIfNecessary(processInstance, processDefinition);
   processDocumentService.deleteDocumentsFromProcessInstance(processInstance.getId());
   deleteConnectorInstancesIfNecessary(processInstance, processDefinition);
   commentService.deleteComments(processInstance.getId());
 }