学习jpdl-2

开始状态:

<!ELEMENT start-state ( description?, transition+ ) >

<!ATTLIST start-state name  CDATA #REQUIRED

                      swimlane CDATA #IMPLIED >

dtd fragment for start-state

开始状态是一个过程中的唯一状态,所有的过程实例从这里开始,注意在过程实例开始的时刻你能够把变量放在过程当中了。另外重点的概念是你能够有多个从开始状态出发的变迁,这样的话,就需要你指定哪个变迁是你启动过程实例时候需要执行的。

milestone

<!ELEMENT milestone ( description?, action*, transition ) >

<!ATTLIST milestone name  CDATA #REQUIRED>

dtd fragment for a milestone

 

一个 milestone 是一种特殊的状态,它用来处理两个并发事件中的同步的作用。一个 milestone 可以被应用在下面情形:一条执行路径需要等待另外一个执行路径上的事件。如果 milestone 没有到达,接下来的执行就必须在 milestone 处等待,知道另外一个并发路径到达的时候,才可继续执行。如果 milestone 已经到达了(条件具备了),接下来的执行就是通过这个 milestone 状态。关于 milestone 的更多信息和图形请参看工作流模式。一个 milestone 与一或多个 actions (用信号通知 milestones 到达)相关联。那些 actions 能够用默认 ActionHandler org.jbpm.delegation.action.MilestoneReachdActionHandler 在流程中建模。所以 actions (发信号给 jbpm 引擎告诉它一个 milestone 已经到达)能够像下面这样在 processdefition.xml 中调度:

  ...

  <milestone name="theMilestone">

    <transition to="stateAfterMilestone" />

  </milestone>

  ...

  <state name="stateBeforeReachingMilestone" swimlane="initiator">

    <transition to="stateAfterReachingMilestone">

       <action>

          <delegation class="org.jbpm.delegation.action.MilestoneReachedActionHandler">theMilestone</delegation>

      </action>

    </transition>

  </state>

  ...

modelling a milestone in the processdefinition.xml

 

process-state:

<!ELEMENT process-state ( description?, delegation, action*, transition+ ) >

<!ATTLIST process-state name CDATA #REQUIRED>

dtd fragment for a process-state

一个 process-state 符合父过程的 invocation 。父过程执行到一个 procee-state 时候就开始一个子过程的执行。过程残留在 process-state 中用以子过程的持续。当一个子过程完成后,就从一个 process-state 中离开了。

Decision:

<!ELEMENT decision ( description?, delegation, action*, transition+ ) >

<!ATTLIST decision name CDATA #REQUIRED>

dtd fragment for a decision

一个 decision 用以决定在多个执行路径中哪个才可以被执行。如果你是一个程序员,把它可以理解成 if-then=else 结构即可,当然。一个 decision 能够具有许多离开的变迁。

需要注意的是一个 decision 对某个情况建模,在这里工作流引擎根据上下文( =variables )和一些其他外部资源决定哪个路由可以被接受。作为可供选择的(可以替代的做法),你设计从一个状态出发具备多个变迁。在那种情况下, jbpm 客户端必须通过调用以一个选择变迁名字作为一个参数的 endOfState 方法决定哪个变迁被执行。

Fork (分支):

<!ELEMENT fork ( description?, delegation ?, action*, transition+ ) >

<!ATTLIST fork name               CDATA #REQUIRED

               corresponding-join CDATA #IMPLIED>

dtd fragment for a fork

这个比较好理解,定义一般普通的 fork 行为一般是通过 ForkHandler 接口。但是默认行为(当在 fork 中没有 delegetion 时候)是 fork 的每个变迁都将获得一个子 token 。所以仅仅对一些高级外来的并发,你才需要实现 ForkHandler.

一般情况下,一个 fork 会有一个相关的 join 。这个 join 定义个并发的 block 。默认下 fork join 仅支持严格的嵌套,并且默认情况不支持绕过并发 block 边界的变迁。

public interface ForkHandler {

  void fork( ForkContext forkContext ) throws ExecutionException;

}

the ForkHandler interface

 

join

<!ELEMENT join ( description?, delegation?, action*, transition ) >

<!ATTLIST join name               CDATA #REQUIRED

               corresponding-fork CDATA #IMPLIED>

dtd fragment for a join

 

一个 fork joins 用于多条路径执行,用 JoinHandler 接口指定普通的 join 行为。但是默认情况下(没有 delegation )是所有 fork 上的子 token 合并。最后 token 到达 join 将会触发父 token 最后引发 join 上的离开变迁。所以仅仅高级外来的并发你才需要实现 JoinHandler.

约束:一个 join 只能有一个离开变迁。

public interface JoinHandler {

   void join( JoinContext joinContext ) throws ExecutionException;

}

the JoinHandler interface

 

结束状态:

<!ELEMENT end-state EMPTY >

<!ATTLIST end-state name CDATA #REQUIRED>

dtd fragment for end-state

一个过程定义有一个精确的结束状态。当一个过程实例执行到一个结束状态时候,这个过程实例就结束了。

 

变迁( transition ):

<!ELEMENT transition ( action* )>

<!ATTLIST transition name CDATA #IMPLIED

                      to   CDATA #REQUIRED>

dtd fragment for a transition

变迁用来指定节点之间的连接。变迁元素应该放在 node 里面,那么这个变迁就会从这个节点出离开。

 

Action

<!ELEMENT action ( delegation ) >

<!ATTLIST action event-type (process-start|process-end|

                             state-enter|state-leave|state-after-assignment|

                             milestone-enter|milestone-leave|

                             decision-enter|decision-leave|

                             fork-enter|fork-every-leave|

                             join-every-enter|join-leave|

                             transition) #IMPLIED>

dtd fragment for an action

一个 action 是一段 java 代码。在过程执行期间在一些事件基础之上 action 在工作流引擎上执行。

Action 总是被定义成一个过程定义元素( process-definition, state, transition, decision, ... )的子元素。当 action 执行的时候,父元素会在过程执行时候外加一些事件类型来定义精确时刻。可以想象得到,一个 action 的可能事件类型依赖于 action 被包含进去的元素。 事件类型名字( event-type-names )被暗示出是他们应用到的元素(理解有误)。 javadoc 中有事件类型,可以进行查看。

 

public interface ActionHandler {

  void execute( ExecutionContext executionContext );

}

the ActionHandler interface

 

delegation

<!ELEMENT delegation ( #PCDATA ) >

<!ATTLIST delegation class CDATA #REQUIRED>

dtd fragment for a delegation

解释在约束元素和 delegation 类必须实现的接口之间的关联。

四、其他 process archive 文件

当一个 process archive 被部署, processdefinition.xml 将被解析并且把信息存储到 jbpm 数据库中去。所有其他的文件或者被存储在数据库中或者文件系统,与被创建的过程定义相关联。作为一 jbpm api 的客户端你能够通过 ExecutionReadService.getFile( Long processDefinitionId, String fileName ) 访问这些文件。

一个 process archive 和一个过程定义( process definition )之间的区别参看 versioning mechanism

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值