为服务任务添加任务完成侦听器

时间:2016-07-08 09:30:02

标签: activiti bpmn

我编写了以下Service task parse handler,我的要求是为服务任务添加任务完成处理程序。如果我将这个解析处理程序用于用户任务,它工作正常。但是当我部署BPMN(我的服务器运行此解析处理程序)时,这会给我空指针异常,因为服务任务没有任务定义。

(TaskDefinition) bpmnParse.getCurrentActivity().getProperty("taskDefinition")

这样做的正确方法是什么?

public class MyServiceTaskParseHandler extends AbstractBpmnParseHandler {

private static final Log log = 

LogFactory.getLog(ServiceTskParseHandler.class);

    @Override
    protected Class<? extends BaseElement> getHandledType() {return ServiceTask.class;
    }

    @Override
    protected void executeParse(BpmnParse bpmnParse, BaseElement element) {

        TaskDefinition taskDefinition = (TaskDefinition) bpmnParse.getCurrentActivity().getProperty("taskDefinition");

        // We have to check if data publishing listener has already been associated at server startup
        TaskListener taskCompletionListener = null;
        List<TaskListener> completionListeners = taskDefinition.getTaskListener(TaskListener.EVENTNAME_COMPLETE);
        if (completionListeners != null) {
            for (TaskListener listener : completionListeners) {
                if (listener instanceof TaskCompletionListener) {
                    taskCompletionListener = listener;
                }
            }
        }
        if (taskCompletionListener == null) {
            if (log.isDebugEnabled()) {
                log.debug("Adding data publishing listener to task: " + taskDefinition.getKey());
            }
            taskDefinition.addTaskListener(TaskListener.EVENTNAME_COMPLETE, new TaskCompletionListener());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

查看用于邮件,驼峰,骡子和shell swrvice任务的默认服务Task Parse处理程序。

模块/ Activiti的引擎/ SRC /主/ JAVA /组织/ Activiti的/发动机/ IMPL / BPMN /分析器/处理器/ ServiceTaskParseHandler.java

这应该指向正确的方向。

希望这有帮助, 格雷格