`
jbpm-x
  • 浏览: 48043 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

jBpm的Event

阅读更多

作者:胡长城

    在阅读此篇文档的时候,首先需要对jBpm有些了解。好歹知道jBpm最主要的基本元素就是三个:StateActionTransition

       State相当于我们通常所说的Task,而Transition则有根XPDLTransition很类似了。那么Action呢?

       jBpm我想,其最大的特色就是提供了一套比较简单但是很实用的EventAction)处理机制。不过,这套Event依然还有很多缺陷,比如不能自定义Event Type(这个通常是有些用处的),不能热部署(或插入)等等,而且只适合后台程序调用的执行。

      

       jBpm jPDL所描述的主要几个元素,大多都可以挂Action(一个或多个),除了End-State(结束位置)。相应信息规则可以参考http://jbpm.org/2/jpdl.html (最好首先仔细读读)。

      

       jBpm描述这样的许可:在流程运行的不同时期、不同地点,可能会激活特定的Event。而这特定的Event是由一系列类型相的Action组成的。jBpm提供这些Action底层接口,而开发者可以根据这个接口,来实现具体的执行体

<o:p> </o:p>

       这个最基本的接口就是org.jbpm.delegation.ActionHandler

public interface ActionHandler {<o:p></o:p>

  void execute( ExecutionContext executionContext );<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

       jBpm提供了一些EventType(很不爽的是,开发者必须遵循这些EventType),即使你在你个流程定义xml文件中没有为某一个元素(比如Transtion)中的Action指明类型,但是在流程定义加载的时候,会将这些没有指明的Action,根据其当前所在的元素,而赋予默认的类型。

       下面这个例子,是TransitionImplTranstion所对应的对象)所为其下的Action提供了默认“动作类型”

  public EventType getDefaultEventType() {<o:p></o:p>

    return EventType.TRANSITION;<o:p></o:p>

  }<o:p></o:p>

<o:p> </o:p>

       那么,jBpm提供了哪些Event类型呢?

       具体可以参考一下 EventType类的javadoc

             http://jbpm.org/2/javadoc/org/jbpm/model/definition/EventType.html

      

       那么这些的action是在哪儿调用的,以及如何调用的呢?

       比如,一个state元素允许定义三种EventTypeSTATE_ENTERSTATE_AFTER_ASSIGNMENTSTATE_LEAVE

       那么引擎在执行时,当一个token transition移到其所连接的State,并被这个State所接受的时候,其就会激活这个State对象的acceptToken方法(参见StateImpl类)。而在这个acceptToken方法中,就需要执行 EventTypeSTATE_ENTERSTATE_AFTER_ASSIGNMENT的所有Action

<o:p> </o:p>

    下框显示了如何调用action的执行:

  public void acceptToken(ExecutionContextImpl executionContext) <o:p></o:p>

throws ExecutionException {<o:p></o:p>

    ······ <o:p></o:p>

    executeActions( EventType.STATE_ENTER, executionContext );<o:p></o:p>

    ······<o:p></o:p>

    executeActions( EventType.STATE_AFTER_ASSIGNMENT, executionContext );<o:p></o:p>

  }<o:p></o:p>

说到这儿,估计即使我不说了,想来也可以猜到jBpm是如何处理的···

下面让我们来看看着个executeActions方法,其是在ElementImpl这个基类中。

public void executeActions( EventType eventType, <o:p></o:p>

ExecutionContextImpl executionContext ) throws DelegationException {   <o:p></o:p>

TokenImpl token  = (TokenImpl) executionContext.getToken();<o:p></o:p>

Iterator iter = actions.iterator();<o:p></o:p>

        while (iter.hasNext()) {<o:p></o:p>

            ActionImpl action = (ActionImpl) iter.next();<o:p></o:p>

      if ( eventType == action.getEventType() ) {<o:p></o:p>

        action.execute( executionContext );<o:p></o:p>

      }<o:p></o:p>

        }<o:p></o:p>

  }<o:p></o:p>

 


分享到:
评论

相关推荐

    jbpm3.2表说明

    JBPM_EVENT JBPM_EVENT FK_EVENT_PROCDEF PROCESSDEFINITION_ 一个流程可能会有很多EVENT时间 JBPM_TASK JBPM_TASK FK_TASK_PROCDEF PROCESSDEFINITION_ 一个流程可能有多个task JBPM_MODULEDEFINITION JBPM_...

    JBPM数据库表说明.doc

    1.5 JBPM_EVENT:流程事件表 5 1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类) 6 1.7 JBPM_TASK:流程任务表 6 1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表...

    jbpmName.rar_event_jbpm

    JBPM_EVENT 事件表 处理进入或者离开事件 JBPM_EXCEPTIONHANDLER 异常处理表 JBPM_ID_GROUP 用户组表 JBPM_ID_MEMBERSHIP 用户成员表 表现用户和组之间的多对多关系 JBPM_ID_PERMISSIONS 用户权限表 JBPM_ID_...

    JBPM数据库表说明 jbpm 工作流 详细到每一个字段,不要下载分

    1.5 JBPM_EVENT:流程事件表 5 1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类) 6 1.7 JBPM_TASK:流程任务表 6 1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程...

    jbpm 事件与动作的含义解释以及代码配置

    当流程进入、离开某个节点,或执行某个转换的时候,可以发出相应的事件,针对这些事件,我们可以编写Action类,来执行某些动作。 利用Action完成自动节点 所谓自动节点,即当流程进入节点之后,执行了某些动作,...

    jbpm安装及使用方法

    jbpm提供了灵活的action ,当流程执行,token 进入node和transition时,会触发相应的一些event(事件)。在这些event上附上我们自己写的action,就会带动action 的执行。action里是我们自己的相关java操作代码,非常...

    JBPM工作流开发指南

    3.3.11 event(事件) 20 3.3.12 action(动作) 20 3.3.13 script(脚本) 22 3.3.14 expression(表达式) 23 3.3.15 variable(变量) 23 3.3.16 handler(句柄) 23 3.3.17 timer(定时器) 24 3.3.18 create-timer(创建...

    JBPM帮助文档供大家学习

    org.jbpm.api.listener interfaces for implementing event listeners, which represent runtime behaviour that can be associated as listeners to process events. org.jbpm.api.model common process execution...

    jbpm各种表单之间的关系

    流程配置类数据库表 JBPM_NODE:流程节点表 JBPM_ TRANSITION:流程迁移表 JBPM_ACTION:流程动作表 JBPM_EVENT:流程事件表

    深入浅出jBPM完整版part1

    5.3.1 duedate.........................................137 5.3.2 repeat ...........................................137 5.3.3 transition......................................138 5.3.4 cancel-event.........

    Activiti5 jbpm 工作流 数据库 表结构.docx

    1.2.19 表名:ACT_RU_EVENT_SUBSCR (运行时事件) 14 1.2.20 表名:ACT_RU_EXECUTION (运行时流程执行实例) 14 1.2.21 表名:ACT_RU_IDENTITYLINK(身份联系) 15 1.2.22 表名:ACT_RU_JOB(运行中的任务) 15 1.2.23 ...

    camel-jbpm:骆驼JBPM组件

    流程操作: START_PROCESS,ABORT_PROCESS_INSTANCE,SIGNAL_EVENT,GET_PROCESS_INSTANCE,GET_PROCESS_INSTANCES 规则运算: FIRE_ALL_RULES,GET_FACT_COUNT,GET_GLOBAL,SET_GLOBAL 工作项操作: ABORT_WORK_...

    深入浅出jBPM完整版part2

    5.3.1 duedate.........................................137 5.3.2 repeat ...........................................137 5.3.3 transition......................................138 5.3.4 cancel-event.........

    应用jBPM4解决中国特色的流程需求

    1.jBPM4的特点jBPM是JBoss众多开源项目中的一个工作流开源项目,也是目前应用最广泛的工作流项目。...基于观察者模式的Event-Listener机制在jBPM4中活动节点对象ActivityImpl、转移对象TransitionImp

    Mastering JBoss Drools 6 for Developers_And_SourceCode.zip

    This book will also cover the relationship between Drools and jBPM, which allows you to enrich your applications by using Business Processes. You will be briefly introduced to the concept of complex ...

    承元工作流系统功能简介

     系统提供易用和可扩展的开发接口,通过Event(事件)、Action(动作)关联机制可以很方便扩展新的功能。 五、运行环境 1、操作系统:支持Windows、Linux、Solaris、AIX和HP-UX等主流操作系统。 2、应用服务器:支持...

    Activiti6.0教程例子下载

    &lt;endEvent id="theEnd" /&gt; 这里对部分代码进行解释。 1) 文件的开头部分,这里的id对于Activiti来说, 应该叫做key。创建流程实例时,会根据此id来得到这个流程。 2) 开始流程。 3) 顺序流(就是连接各个...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................

Global site tag (gtag.js) - Google Analytics