![](https://csdnimg.cn/release/download_crawler_static/86753451/bg6.jpg)
方法,重写负责执行的 execute 方法,在 org/jbpm/graph/node/node.types.xml 中配置即可,当然,你可以写的更加复杂,更加业务
化的节点。
7 jBpm 的过程调度机制
7.1 吸纳自 Petri Net 思想
jBpm 的过程调度机制是吸纳了 Petri Net 的一些思想。
jBpm 采用 Token 来表示当前实例运行的位置,也利用 token 在流程各个点之间的转移来表示流程的推进,如下图所示:
当 jbpm 试图去启动一个流程的时候,首先是构造一个流程实例,并为此流程实例创建一个 Root Token,并把这个 Root Token 放
置在 Start Node 上。
以下截取部分代码实现,仅供参考。手头有 jbpm3 相应开发环境的朋友,可以打开 ProcessInstance 和 Token 这两个类。(注:
以下所有参考代码,为了突出主题,都已经将实际代码中的 event,log 等处理删除)
public ProcessInstance( ProcessDefinition processDefinition ) {
this.processDefinition = processDefinition;
this.rootToken = new Token(this);
public Token(ProcessInstance processInstance) {
this.processInstance = processInstance;
this.node = processInstance.getProcessDefinition().getStartState();
jbpm 是允许在 start-state 执行 Task 的,也允许在 start-state 创建工人任务。不过此处我们不予讨论。
7.2 Token 的推进
当 Token 已经在 Start-State 节点了,我们可以开始往前推进,来促使流程实例往前运行。对于外部操作来说,触发流程实例往
下运行的操作有两个:
(1)强制执行 ProcessInstance 的 signal 操作
(2)执行 TaskInstance 的 end 操作。
但是,这两个操作,都是通过“当前 token 的 signal 操作”来内部实现的,如下图所示: