是否可以(如果可以:如何)在 camunda BPM 中向 jobexecutor 添加自定义作业?我的要求是通过 Timer 或 Loop 来执行一个流程相关的 Service。我不想直接在 BPMN 中对此进行建模,因为它实际上并不是流程的一部分。我可以启动仅包含一个异步服务任务的其他任意进程来实现这一点,但我更愿意直接将包含 SOAP/REST/RMI 调用的方法调用添加到作业队列,而不需要额外的努力。以前有人试过吗?
问问题
1830 次
1 回答
8
这是一个高级问题。可以使用内部 API 创建作业。你需要提供两件事:
自定义作业处理程序:
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 委托(您也可以使用自定义命令)。
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>
于 2013-09-09T09:04:12.580 回答