public static void performTransition( ActivityInstanceBean activityInstance, TransitionTarget transitionTarget, boolean complete) { ExecutionPlan plan = new ExecutionPlan(transitionTarget); plan.assertNoOtherActiveActivities(); ModelManager mm = ModelManagerFactory.getCurrent(); IActivity target = mm.findActivity(transitionTarget.getModelOid(), transitionTarget.getActivityRuntimeOid()); if (target == null) { throw new ObjectNotFoundException( BpmRuntimeError.MDL_UNKNOWN_ACTIVITY_IN_MODEL.raise( transitionTarget.getActivityRuntimeOid(), transitionTarget.getModelOid())); } BpmRuntimeEnvironment rtEnv = PropertyLayerProviderInterceptor.getCurrent(); ExecutionPlan oldPlan = rtEnv.getExecutionPlan(); try { rtEnv.setExecutionPlan(plan); if (complete) { ActivityInstanceUtils.complete(activityInstance, null, null, true); } else { long rootOid = plan.getRootActivityInstanceOid(); if (rootOid != activityInstance.getOID()) { activityInstance = ActivityInstanceUtils.lock(rootOid); } ActivityInstanceUtils.abortActivityInstance(activityInstance); } } finally { rtEnv.setExecutionPlan(oldPlan); } }