将自定义作业添加到jobexecutor

时间:2013-09-07 15:33:00

标签: java job-scheduling camunda

是否有可能(如果是这样:如何)将自定义作业添加到camunda BPM中的jobexecutor?我的要求是通过Timer或Loop执行与进程相关的Service。我不想直接在BPMN中对此进行建模,因为它实际上并不是流程的一部分。我可以启动只包含一个异步服务任务的其他任意进程来实现这一目标,但我更愿意直接向作业队列添加一个包含SOAP / REST / RMI调用的方法调用,而无需额外的努力。以前有人试过吗?

1 个答案:

答案 0 :(得分:7)

这是一个高级问题。 可以使用内部API创建Job。你需要提供两件事:

自定义作业处理程序:

public class CustomjobHandler implements JobHandler {

  public static final String TYPE = "customjobHandler";

    public String getType() {
      return TYPE;
    }

    public void execute(String configuration, ExecutionEntity execution, CommandContext commandContext) {
      // provide custom job execution logic
    }    
}

将作业处理程序添加到流程引擎配置中。请参阅(customJobHandlers列表)。

创建作业的命令

例如来自Java Delegate(您也可以使用自定义命令)。

public class CreateJobCommand implements Command<String> {

  public String execute(CommandContext commandContext) {

    MessageEntity message = new MessageEntity();
    message.setJobHandlerType(CustomJobHandler.TYPE);
    String config = "some string you want to pass to the hanlder";
    message.setJobHandlerConfiguration(config);

    Context
      .getCommandContext()
      .getJobManager()
      .send(message);

    return message.getId();
  }

}

这会创建一个“消息实体”,它会尽快执行。如果需要定时执行,可以创建TimerEntity。 然后,您可以在流程引擎的命令执行程序上执行该命令。

编辑:要在独立引擎中对此进行测试,您必须将CustomJobHandler添加到camunda.cfg.xml:

<property name="customJobHandlers">
 <list>
   <bean class="<FQN of CustomJobHandler>" />
 </list>
</property>