State Management of Call Activities and Case Instances

I have a BPMN model and call activity that calls a CMMN model.

The management of state across the two models is not particularly intuitive. As noted in other forum posts, if a boundary event interrupts the call activity, the call activity is cancelled, but the child case instance is left in an active state. Similarly, if a case instance is terminated, the call activity is left in an active state.

Though this may be consistent with the BPMN and CMMN specs, it is clearly a gap between the two. It would be nice if the engine provided some options for configurable behavior. E.g., options to complete the call activity on terminate and terminate the case instance on cancellation of call activity.

In the meantime, per the suggestion of @roman.smirnov I have implemented an EventListener on the case terminate event that will complete the call activity.

public class CompleteCallActivityExecutionListener implements CaseExecutionListener {
  public void notify(DelegateCaseExecution ctx) throws Exception {
    CaseExecutionEntity caseExecutionEntity = (CaseExecutionEntity) ctx;
    ExecutionEntity superExecution = caseExecutionEntity.getSuperExecution();
    SubProcessActivityBehavior behavior = (SubProcessActivityBehavior) getActivityBehavior(superExecution);



And to terminate and/or close the case instance, I have implemented a Service Task and JavaDelegate which will terminate and/or close the case instance once the call activity has been cancelled/completed.

Are these solutions the preferred solutions to these scenarios? Are there alternatives that I should consider?