protected RequestedAction onExecuteWorkItem(WorkItem workItem) throws Exception {
		workItem.release();

		if (!workItem.isValid())
			return Scheduler.CONTINUE_ACTION;

		if (!workItem.isEmpty()) {
			// NOTE 3 execute workItem, maybe execute activity or other callback
			if (!workItem.execute(this, this.bookmarkManager))
				return Scheduler.YIELD_SILENTLY_ACTION;
		}

		if (workItem.getWorkflowAbortException() != null) {
			this.abortWorkflowInstance(workItem.getWorkflowAbortException());
			return Scheduler.CONTINUE_ACTION;
		}

		// NOTE 4 post workItem
		workItem.postProcess(this);

		if (workItem.getExceptionToPropagate() != null)
			this.propagateException(workItem);
		if (workItem.getExceptionToPropagate() != null)
			return new Scheduler.NotifyUnhandledExceptionAction(
					workItem.getExceptionToPropagate(),
					workItem.getOriginalExceptionSource());

		return Scheduler.CONTINUE_ACTION;
	}