@SuppressWarnings("unchecked")
 public void timerFires(ActivityExecution execution, String signalName, Object signalData)
     throws Exception {
   PvmActivity timerActivity = execution.getActivity();
   boolean isInterrupting = (Boolean) timerActivity.getProperty("isInterrupting");
   List<ActivityExecution> recyclableExecutions = null;
   if (isInterrupting) {
     recyclableExecutions = removeAllExecutions(execution);
   } else {
     recyclableExecutions = Collections.EMPTY_LIST;
   }
   execution.takeAll(timerActivity.getOutgoingTransitions(), recyclableExecutions);
 }
  @SuppressWarnings("unchecked")
  public void lastExecutionEnded(ActivityExecution execution) {

    ActivityExecution outgoingExecution = execution.getParent().createExecution();
    outgoingExecution.setConcurrent(false);
    ((InterpretableExecution) outgoingExecution)
        .setActivity((ActivityImpl) execution.getActivity());

    execution.setConcurrent(false);
    execution.setActive(false);
    ((InterpretableExecution) execution).setEventScope(true);

    List<PvmTransition> outgoingTransitions = execution.getActivity().getOutgoingTransitions();
    if (outgoingTransitions.isEmpty()) {
      outgoingExecution.end();
    } else {
      outgoingExecution.takeAll(outgoingTransitions, Collections.EMPTY_LIST);
    }
  }