作者:胡长城
在阅读此篇文档的时候,首先需要对jBpm有些了解。好歹知道jBpm最主要的基本元素就是三个:State,Action,Transition
其State相当于我们通常所说的Task,而Transition则有根XPDL的Transition很类似了。那么Action呢?
jBpm我想,其最大的特色就是提供了一套比较简单但是很实用的Event(Action)处理机制。不过,这套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,根据其当前所在的元素,而赋予默认的类型。
下面这个例子,是TransitionImpl(Transtion所对应的对象)所为其下的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元素允许定义三种EventType:STATE_ENTER,STATE_AFTER_ASSIGNMENT,STATE_LEAVE。
那么引擎在执行时,当一个token 从transition移到其所连接的State,并被这个State所接受的时候,其就会激活这个State对象的acceptToken方法(参见StateImpl类)。而在这个acceptToken方法中,就需要执行 EventType为STATE_ENTER和STATE_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>
|
分享到:
相关推荐
JBPM_EVENT JBPM_EVENT FK_EVENT_PROCDEF PROCESSDEFINITION_ 一个流程可能会有很多EVENT时间 JBPM_TASK JBPM_TASK FK_TASK_PROCDEF PROCESSDEFINITION_ 一个流程可能有多个task JBPM_MODULEDEFINITION JBPM_...
### jbpm 事件与动作的含义解释以及代码配置 #### 概述 JBPM(Java Business Process Model)是一个开源的工作流引擎,它基于Java技术,能够帮助开发者轻松地设计、执行复杂的业务流程。JBPM支持多种流程控制机制...
JBPM_EVENT 事件表 处理进入或者离开事件 JBPM_EXCEPTIONHANDLER 异常处理表 JBPM_ID_GROUP 用户组表 JBPM_ID_MEMBERSHIP 用户成员表 表现用户和组之间的多对多关系 JBPM_ID_PERMISSIONS 用户权限表 JBPM_ID_...
而JBPM_ACTION的EVENT字段则与JBPM_EVENT关联,表示了动作可能触发的事件。 在流程设计中,JBPM提供了丰富的节点类型和事件处理,允许开发者定义复杂的业务逻辑。例如,决策节点(Decision)可以通过...
当遇到特定事件时,如定时器触发或异常发生,会调用JBPM_EVENT表中的事件处理逻辑。 理解这些数据库表的结构和字段,有助于开发者更好地设计、部署和调试基于JBPM的业务流程,进一步优化流程执行效率,提高系统的...
5. **事件服务**:jbpm-event.jar支持事件监听和处理,比如在流程的特定节点触发事件。 6. **其他库**:lib目录下的其他jar文件可能包含了对日志、事务管理、并发控制、序列化等的支持,它们是jbpm正常运行所必需的...
- **JBPM_EVENT**:事件表,记录流程中的事件触发情况。 - **JBPM_EXCEPTIONHANDLER**:异常处理表,记录流程执行过程中的异常处理信息。 - **JBPM_ID_GROUP**:用户组表,存储系统中的用户组信息。 - **JBPM_ID...
同时,jbpm提供了事件服务(Event Service)来处理流程中的事件,比如监听特定的流程事件并触发相应的操作。 jbpm还包括了一个规则引擎(Drools),这是Red Hat的一个规则管理系统,能够处理复杂的业务规则。在流程...
你可以利用jbpm的监听器(listener)和事件(event)机制来响应流程中的特定事件,比如在任务完成后发送通知邮件。此外,jbpm还支持流程变量的持久化,这意味着即使服务器重启,流程的状态也能恢复。 总结来说,...
- EVENT_:关联到的事件,对应JBPM_EVENT表。 - TIMERNAME_,DUEDATE_,REPEAT_:与定时器相关的设置。 5. **JBPM_DELEGATION**: - 此表未在提供的信息中直接描述,但它通常包含关于动作代理类的详细信息,用于...
1. 流程定义(Process Definition):jbpm使用BPMN 2.0(Business Process Model and Notation)标准来图形化地表示业务流程,它包含任务(Task)、事件(Event)、网关(Gateway)等元素。 2. 工作流实例(Process ...
- **EVENT_**:动作中指定的事件,与`JBPM_EVENT`表关联。 - **PROCESSDEFINITION_**:动作所属的流程模版ID,与`JBPM_PROCESSDEFINITION`表关联。 - **TIMERNAME_**:定时器的名称。 - **DUEDATE_**:定时器的到期...
这包括理解活动(Activity)、网关(Gateway)、事件(Event)等元素,以及如何通过Eclipse插件将这些元素组合成完整的流程图。 3. **jBPM 4视频教程03:管理流程实例** - 在这个阶段,学习者将接触到流程实例的...
首先,jbpm的核心概念包括流程定义(Process Definition)、任务(Task)、事件(Event)、节点(Node)和工作流实例(Process Instance)。流程定义是用BPMN 2.0标准语言编写的工作流蓝图,描述了业务流程的步骤和...
除了上述五个表,jbpm4还包含其他表格,例如用于任务管理的JBPM4_TASK,用于存储流程变量的JBPM4_VARIABLE,以及用于持久化工作流事件的JBPM4_EVENT等。这些表共同构成了jbpm4的数据模型,支持了流程的定义、执行、...
- EVENT_:动作中指定的事件,关联到JBPM_EVENT表。 - TIMERNAME_、DUEDATE_ 和 REPEAT_:与定时器相关的参数。 - TRANSITIONNAME_:动作执行后跳转的目标Transition。 - TIMERACTION_:定时器动作的代理类。 -...
#### 1.5 JBPM_EVENT 包含流程中的事件定义,如启动事件、结束事件等,用于处理流程中的特定情况。 #### 1.6 JBPM_DELEGATION 用于存储代理类信息,允许将流程中的某些任务委托给其他人或服务来执行。 #### 1.7 ...
- **EVENT_**:动作中指定的事件,与`JBPM_EVENT`表关联。 - **PROCESSDEFINITION_**:动作所在的流程模版ID,与`JBPM_PROCESSDEFINITION`表关联。 - **TIMERNAME_**:定时器名称,用于标识定时器。 - **DUEDATE_**...
主要概念包括任务(Task)、事件(Event)、网关(Gateway)和泳道(Lane)等。 2. **流程定义**:jbpm3使用XML格式的流程定义文件(.bpmn),用于存储流程模型。这些文件描述了流程的结构、顺序和条件。 3. **...
jbpm3.2.3基于Java语言,采用了Maven构建系统,其架构设计分为几个主要模块:流程定义(process definition)、流程执行(process execution)、任务管理(task management)、事件处理(event handling)以及持久...