jBPM 4.4 入门指南

jBPM 4.4 入门指南
jBPM 4.4 入门指南

1.工作流与工作流管理系统

1.1. 工作流(Work Flow)

工作流就是工作流程的计算机模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的方式就是工作流。

公司内采用纸张表单,手工传递的方式,一级一级审批签字,工作效率低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。

作为一个成熟稳定的工作流产品,不仅提供日常办公和关键业务流程智能化管理,而且能根据公司的特殊实际要求轻松方便地随时定制各种流程,并可实现不同角色不同的跟踪、查询、统计、打印等强大功能

1.2.工作流管理系统(Workflow Management System)

工作流管理系统(WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持:

1.定义工作流:包括具体的活动、规则等

2.运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度

3.运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程

序工具交互的功能。

一、定义工作流

二、执行工作流

1.3.什么地方使用工作流技术

OA中的审批流转的功能,其作用是能按照指定的流程(步骤)流转要审批的表单(就像流水线一样)。有如下问题:

1,流程有很多。

2,不同的公司,流程的具体步骤是不一样的,有时还需要增加新流程或修改现有流程。

3,流程的管理是由系统的管理员完成的(不是程序员)。

像这样的应用,就需要使用流程管理系统了。

1.4.采用工作流管理系统的优点

1.提高系统的柔性,适应业务流程的变化

2.实现更好的业务过程控制,提高顾客服务质量

3.降低系统开发和维护成本

常见的工作流框架有:Jbpm、OSWorkflow、ActiveBPEL、YAWL等

OA(办公自动化)主要技术之一就是工作流。

2.jBPM4入门与准备

2.1. jBPM介绍

jBPM 即java Business Process Management,是基于java的业务流程管理系统,它是一组J2SE组件,可以作为J2EE应用集群部署。jBPM是公开源代码项目。jBPM 是市面上相当流行的一款开源工作流引擎,引擎底层基于Active Diagram模型。作为jBoss的一个子项目,它使用了hibernate,因此可以很好的支持主流数据库。

官方主页:https://www.360docs.net/doc/9112218843.html,/jbpm

本文档对应的版本为:jBPM4.4

1,jBPM4.4使用Hibernate3.3.1作为引擎的持久框架。

2,jBPM4.4共有18张表。

2.2. jBPM3与jBPM4的区别说明

2.3. 准备环境1:安装流程设计器插件(Graphical Process Designer)

1,jBPM4.4包含了一个图形化设计流程的工具(GPD),它是eclipse插件,是用来设计jPDL 的图形化流程的,支持的版本为Eclipse3.5。

2,插件所在的路径为:install/src/gpd/jbpm-gpd-site.zip。

3,安装方法:在eclipse3.5中点击help->install new software->work with->add->Archive,选择jbpm4插件的安装包install/src/gpd/jbpm-gpd-site.zip 进行安装。安装完成后进行重新启动Eclipse。(在User Guide文档的2.11.2节中有详细说明)。

4,查看是否成功安装了插件:Window Preference中是否有Jboss jBPM项。

(通过实验,发现不可以使用把插件目录直接放到dropins下面的方法)

5,流程定义文件的xsd文件的路径为:JBPM_HOME/src/jpdl-4.4.xsd

2.4. 准备环境2:准备jBPM开发环境

先新建Eclipse工程(Java Project)。

2.4.1.添加jBPM的jar包

1,JBPM_HOME/jbpm.jar(核心包)

2,JBPM_HOME/lib/目录中的所有jar包,以下jar包可以不添加:hsqldb.jar, postgresql.jar, mysql-connector-java.jar, servlet-api.jar, junit.jar。其中junit.jar一定不要添加,因为是3.8.2版本,与我们使用的junit4有冲突。

3,所使用的数据库对应的驱动的jar包。

2.4.2.添加配置文件并修改配置文件内容

1,配置文件可以从JBPM_HOME/examples/src/中拷贝:jbpm.cfg.xml、

logging.properties、jbpm.hibernate.cfg.xml、jbpm.tx.hibernate.cfg.xml。

2,修改logging.properties中的日志输出级别为W ARNING:修改配置

java.util.logging.ConsoleHandler.level=WARNING

3,修改jbpm.hibernate.cfg.xml中的数据库连接信息。如果使用MySql,使用的方言一定要是org.hibernate.dialect.MySQL5InnoDBDialect。(如使用MySQLDialect,就会在流程实例结束时抛异常:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails

(`jbpm44_20101028/jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE`

FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))。)

4,创建数据库表。使用Hibernate的自动建表,在jbpm.hibernate.cfg.xml中配置:hibernate.hbm2ddl.auto=update。

说明:如果要改变jbpm.hibernate.cfg.xml的文件名称,需要做:1、从JBPM_HOME/src/中拷贝jbpm.tx.hibernate.cfg.xml放到工程的src/下,然后进行修改。2、修改jbpm.tx.hibernate.cfg.xml中的hibernate主配置文件的路径配置(指定的是相对于classpath的相对路径)。

3.API与实体与表的说明

3.1. 核心API

Interacting with jBPM occurs through services. The service interfaces can be obtained from the ProcessEngine which is build from a Configuration. A ProcessEngine is thread safe and can be stored in a static member field.

使用默认的配置文件生成Configuration并构建ProcessEngine:

或是使用指定的配置文件(要放到classPath下):

说明:jBPM自己有一个IOC容器。Process engine objects defined in the configuration can also be retrieved by type (processEngine.get(Class)) or by name (processEngine.get(String))。

各种Service的作用:

3.2. 实体、实体之间的关系、表(了解一下就可以)

4.系统的学习

4.1. 管理流程(定义)

所有的流程定义的操作都是使用RepositoryService实现的。

相关的两个类:Deployment与ProcessDefinition:

1,Deployment表示流程定义文档,可以添加一些文件:.jpdl.xml与.png与.class等。

2,ProcessDefinition表示流程定义对象,流程定义包含多个Activity与多个Transition,流程定义对象是由.jpdl.xml文件解析得到的。

3,jBPM4只存储流程定义文档中的文件,使用时才解析出ProcessDefinition对象。(jBPM3也存储解析后的ProcessDefinition对象)

4.1.1.部署流程定义

4.1.1.1. 示例代码1:流程定义有关文件在classpath中

String deploymentId = processEngine.getRepositoryService() .createDeployment()

.addResourceFromClasspath("process/test.jpdl.xml")/

.addResourceFromClasspath("process/test.jpdl.xml")

.deploy();

4.1.1.2. 示例代码2:一次添加多个流程定义有关文件(要先打成

zip包)

String deploymentId = processEngine.getRepositoryService() .createDeployment()

.addResourcesFromZipInputStream(zipInputStream)

.deploy();

4.1.1.3. 说明

方法:RepositoryService.createDeployment() : NewDeployment

说明:

1,NewDeployment.addResourceFromClasspath(resource); 可以调用多次以添加多个文件。文件重复添加也不会报错。

2,再调用.addResourceFromInputStream(resourceName, inputStream)添加一个文件(使用InputStream)

3,.addResourcesFromZipInputStream(zipInputStream)添加一个zip文件,里面有文件夹也没关系。就相当于一次添加了多个文件

4,以上方法可以在一起调用。

5,一个文件添加多次,则都会存储,但只是一个流程定义。

6,如果name指定为中文,则key就会为一个汉字变为一个"_"。

4.1.2.查询流程定义

RepositoryService().createProcessDefinitionQuery()

说明:

1,调用.list() 查询一个列表,或调用.uniqueResult() 查询一个唯一的结果。

2,排序:.orderAsc(ProcessDefinitionQuery.PROPERTY_NAME),其中属性名为常量

要完成的功能:

1,查询所有

2,查询所有最新的版本(要先查询出所有,再自己处理,只保留最新的版本)

4.1.2.1. 示例代码1:查询所有流程定义

// 1,构建查询

ProcessDefinitionQuery pdQuery = processEngine.getRepositoryService() .createProcessDefinitionQuery()//

.orderAsc(ProcessDefinitionQuery.PROPERTY_NAME)//

.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION);

// 2,查询出总数量与数据列表

long count = pdQuery.count();

List list = pdQuery.page(0, 100).list();// 分页:取

出前100条记录

// 3,显示结果

System.out.println(count);

for (ProcessDefinition pd : list) {

System.out.println("id=" + pd.getId()//

+ ",deploymentId=" + pd.getDeploymentId()//

+ ",name=" + pd.getName()//

+ ",version=" + pd.getVersion()//

+ ",key=" + pd.getKey()); //

}

4.1.2.2. 示例代码2:查询所有最新版本的流程定义列表

// 1,查询出所有流程定义

List all = processEngine.getRepositoryService()// .createProcessDefinitionQuery()//

.list();

// 2,对结果进行过滤,不同的流程定义名称只保留最新的版本

Map map = new HashMap();

for (ProcessDefinition pd : all) {

ProcessDefinition pdInMap = map.get(pd.getName());

if (pdInMap == null) {

map.put(pd.getName(), pd);

} else {

if (pd.getVersion() > pdInMap.getVersion()) {

map.put(pd.getName(), pd);

}

}

}

Collection result = map.values();

// 3,显示结果

for (ProcessDefinition pd : result) {

System.out.println("id=" + pd.getId()//

+ ",deploymentId=" + pd.getDeploymentId()//

+ ",name=" + pd.getName()//

+ ",version=" + pd.getVersion()//

+ ",key=" + pd.getKey());

}

4.1.3.删除流程定义

4.1.3.1. 示例代码1:删除流程定义

repositoryService.deleteDeployment(deploymentId);

4.1.3.2. 示例代码2:删除流程定义,并删除关联的流程实例与历

史信息

repositoryService.deleteDeploymentCascade(deploymentId);

4.1.3.3. 示例代码3:删除指定名称的所有版本

// 1,查询出指定名称的所有流程定义列表

List list = processEngine.getRepositoryService()// .createProcessDefinitionQuery()//

.processDefinitionName("test")//

.list();

// 2,循环删除

for (ProcessDefinition pd : list) {

processEngine.getRepositoryService().deleteDeploymentCascade(pd.g etDeploymentId());

}

4.1.4.获取文件内容

4.1.4.1. 示例代码

InputStream in = repositoryService.getResourceAsStream(deploymentId, resourceName);

4.1.4.2. 说明

1,resourceName是相对路径,或是部署时指定的名称。

2,如部署时使用.addResourceFromClasspath("cn/itcast/test.jpdl.xml"),则获取时指定名称为:cn/itcast/test.jpdl.xml。如果是zip,则是在zip中的一个相对于根的相对路径。

4.1.

5.获取某节点的坐标

repositoryService.getActivityCoordinates(processDefinitionId, activityName);

4.2. 执行流程(实例)

要使用到的Service有:ExecutionService与TaskService。

4.2.1.启动流程实例

4.2.1.1. 示例代码1:使用指定key的最新版本启动流程实例

// 流程定义的key

String processDefinitionKey = "费用报销流程";

// 启动流程实例

ProcessInstance pi = processEngine.getExecutionService()//

.startProcessInstanceByKey(processDefinitionKey);

// 显示信息

System.out.println("id=" + pi.getId()//

+ ",name=" + pi.getName()//

+ ",key=" + pi.getKey()//

+ ",state=" + pi.getState());

4.2.1.2. 示例代码2:使用指定key的最新版本启动流程实例,并

设置一些流程变量

// 流程定义的key

String processDefinitionKey = "费用报销流程";

Map variables = new HashMap(); variables.put("金额", 1000);

variables.put("申请人", "张三");

// 启动流程实例

ProcessInstance pi = processEngine.getExecutionService()//

.startProcessInstanceByKey(processDefinitionKey, variables);

// 显示信息

System.out.println("id=" + pi.getId()//

+ ",name=" + pi.getName()//

+ ",key=" + pi.getKey()//

+ ",state=" + pi.getState());

4.2.1.3. 说明

1,ExecutionService.startProcessInstanceById(processDefinitionId),使用唯一的pdId查询并启动

2,ExecutionService.startProcessInstanceById(processDefinitionId, variables),可设置变量

3,ExecutionService.startProcessInstanceByKey(processDefinitionKey),使用指定key(name)的最新的版本启动

4,ExecutionService.startProcessInstanceByKey(processDefinitionKey, variables),可设置变量

说明:流程实例创建后,直接就到开始节点后的第一个节点,不会在开始节点停留。

4.2.2.获取个人任务列表:

方式1:TaskService().findPersonalTasks(userId);

方式2,TaskService().createTaskQuery()//

.assignee(userId)//

.page(0, 1000)//

.list();

4.2.3.办理任务(完成任务)

TaskService().completeTask(taskId);

4.2.4.获取流程变量

1,TaskService.getVariable(taskId, variableName);

2,ExecutionService.getVariable(executionId, variableName);

4.2.

5.拾取任务

1,TaskService.takeTask(taskId, userId),如果任务有assignee,则会抛异常。2,processEngine.getTaskService().assignTask(taskId, userId),转交任务给其他人,(如果任务有assignee,则执行这个方法代表重新分配。也可以把assignee设为null表示组任务没有人办理了)

4.3. 设计流程(画流程图)

4.3.1.Transition

1,一个活动中可以指定一个或多个Transition(Start中只能有一个,End中没有)

2,如果只有一个,则可以不指定名称(名称是null)

3,如果有多个,则要分别指定唯一的名称

4,signal时,如果没有指定signalName/transitionName,则代表要使用没有名称的Transition,如果没有无名称的Transition,就报错。

5,signal时,可以传递一个参数signalName/outcome,代表使用指定的Transition离开,如果没有,就报错。

6,完成任务时,completeTask()将使用默认的Transiton,completeTask(String, String)将使用指定的Transition。

4.3.2.活动(节点)

4.3.2.1. 预定义活动

4.3.2.1.1.Start(开始活动)

用于指明流程的入口。在一个流程定义中有且只能有一个Start活动。在Start活动有必须且只能有一个Transition。流程实例启动后会自动离开开始节点。

4.3.2.1.2.End(结束活动)

End、EndError、EndCancel 结束节点后两个表示不同的状态

4.3.2.1.3.Task(任务活动)

分配任务:

1,actor=#{String型的变量}

2,AssignmentHandler,需要在元素中写子元素。

a)指定的类要实现AssignmentHandler接口

b)在其中可以使用Assignable.setAssignee(String),分配个人任务。

可以不指定assignee,也不会向下执行,而是等待。

4.3.2.1.4.Decision(判断活动)

1,使用expression,如:expr="#{'to state2'}"

2,使用Handler,要实现DecisionHandler接口

3,如果同时配置了expression与Handler,则expression有效,忽略Handler。

4.3.2.1.

5.Fork / Join(分支/ 聚合活动)

测试时要注意:

1,pi.findActiveActivityNames()可以使用,但要保证是最新状态,也就是要先getById一下。2,流程实例执行完后,用ExecutionService就查不到了

4.3.2.1.6.State(状态活动)

4.3.2.2. 自定义节点:Custom

1,在元素中指定class属性为指定的类。

2,这个类要实现ExternalActivityBehaviour接口,其中有两个方法:

1,execute(ActivityExecution),节点的功能代码

2,signal(ActivityExecution, String, Map),在当前节点等待时,外部发信号时的行为3,在execute()方法中,可以调用以下方法对流程进行控制

1,ActivityExecution.waitForSignal(),在当前节点等待。

2,ActivityExecution.takeDefaultTransition(),使用默认的Transition离开,当前节点中定义的第一个为默认的。

3,ActivityExecution.take(String transitionName),使用指定的Transition离开

4,ActivityExecution.end(),结束流程实例

4,也可以实现ActivityBehaviour接口,只有一个方法execute(ActivityExecution),这样就不能等待,否则signal时会有类转换异常。

4.3.3.事件

4.3.3.1. 事件种类(有多少种事件)

4.3.3.2. 为事件配置动作(事件触发时做什么事)

1,在根元素中,或在节点元素中,使用元素指定事件,其中event属性代表事件的类型。

2,在中用子元素,指定处理的类,要求指定的类要实现EventListener接口

3,事件类型:

a)元素放在根元素()中,可以指定event为start或end,表示流程的

开始与结束。

b)元素放在节点元素中,可以指定event为start或end,表示节点的进入与离开

c)在Start节点中只有end事件,在End节点中只有start事件。

d)在元素中直接写,就是配置事件。(因为在这里

只有一个事件,所以不用写on与类型)

e)在元素中还可以配置assign事件,是在分配任务时触发的。

5.附录

5.1. 常见问题说明

5.1.1.自行控制事务

1,修改jbpm.tx.hibernate.cfg.xml

f)不自行管理事务:去掉

g)让Jbpm使用SessionFactory.getCurrentSession():修改为

current="true" />

2,配置可以使用SessionFactory.getCurrentSession(),在jbpm.hibernate.cfg.xml 中配置:thread

3,要使用同一个SessionFactory,且都要使用SessionFactory.getCurrentSession() 获取Session:

h)同一个SessionFactory:SessionFactory sf = processEngine.get(SessionFactory.class)

i)在BaseDaoImpl 中增加:

i.getSession() { return HibernateUtils.getSessionFactory().getCurrentSession(); }

ii.getProcessEngine(){ return org.jbpm.api.Configuration.getProcessEngine(); }

4,统一的打开与提交或回滚事务:使用OpenSessionInViewFilter 控制事务。

5.1.2.启动Tomcat时(使用的是MyEclipse自带的Tomcat,

是 6.0的版本),报错:Caused by: https://www.360docs.net/doc/9112218843.html,ng.LinkageError: loader constraints violated when linking javax/el/ExpressionFactory class

at org.apache.jsp.WEB_https://www.360docs.net/doc/9112218843.html,erAction.loginUI_jsp._jspInit(loginUI_jsp.java:39) at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)

at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:159)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)

... 40 more

说明:原因是Jbpm的juel.jar, juel-engine.jar, juel-impl.jar包和Tomcat6.0中的el-api.jar 包冲突了。

有三个解决办法:

1,方法一:在MyEclipse的Preferences -> MyEclipse -> Application Servers -> Tomcat -> ..

-> Paths 中配置Append to classpath,选中juel.jar, juel-engine.jar, juel-impl.jar 这三个jar包就可以了。

2,方法二:将juel.jar, juel-engine.jar, juel-impl.jar 这三个包复制到tomcat6下lib/ 中,并删除原来的el-api.jar,

切记还要把工程中WEB-INF\lib 下的juel.jar, juel-engine.jar, juel-impl.jar 删除,不然还是要冲突。

3,方法三:换成tomcat5.5,就没有问题了。

5.1.3.完成流程实例中的最后一个任务时(任务实例结束

时),或删除流程定义级联删除流程实例时,报错如下:

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`itcastoa_20100909/jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))

解决办法:把方言设为MySQL5InnoDBDialect,不能是MySQLDialect。

5.2. 其他说明

1,Jbpm4的所有实体的数据库中用的主键都long型。

2,各种Service中的查询为createXxQuery(),调用list()查询一个列表,或调用uniqueResult()查询一个唯一的结果

3,查询支持分页,方法为:xxQuery.count() 与xxQuery.page(int, int).list()。

4,以下都是String型:

1,deploymentId

2,processDefinitionId

3,executionId

4,taskId

jBPM4

1,可以不画结束节点

2,结束节点可以有多个

Activiti工作流入门详解完整教学教程

Activiti入门教程详解完整教程 1.A ctiviti介绍 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。 Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss JBPM的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。 1.1工作流引擎 ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。 1.2BPMN 业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

2.准备环境 2.1Activiti软件环境 1)JDK1.6或者更高版本 2)支持的数据库有:h2,mysql,oracle,mysql,db2等 3)支持Activiti运行的jar包,可以通过maven依赖引入 4)开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本2.2安装流程设计器(eclipse插件) 1)打开Help →Install New Software →Add 输入Name: Activiti Designer Location: https://www.360docs.net/doc/9112218843.html,/designer/update/ 输入完成后,单击OK按钮等待下载完成后安装。 安装完成后在菜单选项中会出现Activiti的目录选项

jBPM开发入门指南(1)

环境准备 1、安装JDK 所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。 2、安装Ant Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。 安装方法: ( 1 )先下载:https://www.360docs.net/doc/9112218843.html,/dist/ant/binaries/,选一个如: apache-ant-1.6.5-bin.zip 。 ( 2 )解压到 D:\ant (当然其他目录也可以)。 ( 3 )设置如下系统变量: ANT_HOME=d:\ant 。 ( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。 3、安装Eclipse Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.2 安装jBPM jBPM 的下载地址:https://www.360docs.net/doc/9112218843.html,/products/jbpm/downloads ●JBoss jBPM 是jBPM 的软件包 ●JBoss jBPM Starters Kit 是一个综合包,它包括了jBPM 软件包、开发插件、一个配置好了的基于JBoss 的jBPM 示例、一些数据库配置文件示例。 ●JBoss jBPM Process Designer Plugin 是辅助开发jBPM 的Eclipse 插件。 ●JBoss jBPM BPEL Extension jBPM 关于BPEL 的扩展包 本指南选择下载:JBoss jBPM Starters Kit 。下载后解压到D:\jbpm-starters-kit-3.1 ,目录下含有五个子目录: ●jbpm jBPM 的软件包 ●jbpm-bpel 只含有一个网页

jbpm和shark工作流引擎对比

jbpm和shark工作流引擎对比 Xpdl:xml process definition language? Bpel:Business Process execution language? Jpdl:JBoss Jpbm Process definition language.

三亠 -出 1 (shark '^ B f Q M ) “tpcrfwwr 一 WfPmcrw 寥w ^C C E 王亍s- l t l l c -p =8 fe. n 2 Q ? su E wurhlt 1: 纟 - ory "&□.At vnsMk - uriflg jiubkd ehbunKk F t h 4- B c pruccan ^y t l i w &s.g n a l l l ) ^d 」2=-l £.x n ??=e *§9 mzr W n^ecIH ?- 一 dcunptF: nrinm 4 二-ring priority 二- 3g S u s - =Hat proc? uatm: FnxcfsFtl =J4lllh_og u cum- sutci) r M ^J C I F E J ,&d ?rcwinwO umin ?Ej ?r i - Mlm 一as- M K C d n i ) 亍 m E p whi fpenu =一一 —Jtiap :Tun??lu^::u~c 一 g JH*【 c.s-y 』。.:乂 ring bvi-yfuunc: ■王 £ l k .3 ?"『ring -2 l -x 2n : s z i n ? 2l -=^l -5-^ -]C 3.=V\3&dscBtAud r 卫 mmF. 二? H 4U ? ^u d l ,u n - ^urw sWtc : ?3a w daU “ NmeV flocs d H n : A . l _ ? I g 工 i ?亍1 £ ? ? 2 ??f& V j.i I s v v p g .gnugEvcfltAJidh ^evnerc-JJCy: ctring *l 3c c s l - 5 -il r g d remircc ndmc : K 3

工作流与JBPM开发实例精解

1.工作流与JBPM 开发实例 前几天发了一篇文章,没几个人看也没人留言,看来我这功夫差的还是远啊,今天来一个实际点的吧。可能上回的废话太多。说说这个jbpm应该怎么来用。 首先当你想学一个框架的时候一定是你要有项目来用他了,OK,那么你项目当中的流程是什么你应该清楚吧,那么当你清楚了这些的时候我们就开始我们这个最简单的例子吧。 假如我们现在有这么一个例子,公司员工想报销点出差费,那么他要将他的申请提交给他的第一级领导——部门主管去审批,然后部门主管审批完了之后还要交给这个部门主管的上级公司老总进行审批。那么针对这个简单的流程,我们应该从哪里下手呢? 首先第一件事情就是写流程定义文件,那么这个文件我们用什么来写呢,他就是一个符合某个语法的xml文件,幸运的是jbpm给我们提供了一个集成的开发环境让我们来用。 首先去官网上下一个jbpm-jpdl-suite-3.2.GA包,解压后你会发现他里面有一个designer文件夹,那个里面就是我们写流程定义文件的开发环境,他是一个eclipse的插件,但是好像他给我们的那个eclipse版本有问题,建议大家从新下一个eclipse-SDK-3.2.1-win32.zip这个版本的eclipse,然后覆盖他给我们提供的那个。 准备工作做完了,那么我们就开始吧,首先我们打开解压目录下的designer 文件夹中的designer.bat文件,他弹出一个eclipse,然后我们就用这个东西来开发我们的流程定义文件了。 打开之后你就会看见一个他的小例子,不过我们不去用他,我们自己新建一个工程。右键-new-other-jBoss jbpm-process project。这个时候你会看见他弹出一个对话框,输入你的工程名字,然后点击next,这个时候你会发现他已经把jbpm加载进去了,记住要选中Generate simple ......。 工程建立完了,我们开始建立我们的流程定义文件。在工程里面你会发现src/main/jpdl这个source folder,然后你会看见他里面已经有了一个流程定义文件了,但是我们不去用他的,我们自己建立一个,右键src/main/jpdl,然后new-other-jBoss jbpm-process definition。这个时候他就会弹出一个对话框,起一个你要写的流程定义文件的名字输入进去,OK,可以了。这个时候你打开你建立的那个文件夹,里面就有processdefinition.xml文件,ok,打开他。 在右面的图里面你就可以看到一张什么都没有的白纸,我们看看这部分左面的那些东西,什么start啊,end啊,tasknode啊,fork啊,join啊。那我们来解释一下这是个什么东西呢,我们看看我们的需求,员工要写一个报销单,然

Activiti工作流入门详解完整教程

A c t i v i t i工作流入门详 解完整教程 Prepared on 24 November 2020

Activiti入门教程详解完整教程 1.Activiti介绍 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。 Activiti基于Apache许可的开源BPM平台,创始人TomBaeyens是JBossJBPM 的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。 1.1工作流引擎 ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。 1.2BPMN 业务流程建模与标注(BusinessProcessModelandNotation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(BusinessProcessDiagram) 2.准备环境 2.1Activiti软件环境 1)或者更高版本 2)支持的数据库有:h2,mysql,oracle,mysql,db2等 3)支持Activiti运行的jar包,可以通过maven依赖引入 4)开发环境为或者以上版本,myeclipse为版本 安装流程设计器(eclipse插件) 1)打开HelpInstallNewSoftwareAdd

输入Name:ActivitiDesigner designer/update/ 输入完成后,单击OK按钮等待下载完成后安装。 安装完成后在菜单选项中会出现Activiti的目录选项 设置eclipseactivit插件的画流程图选项 打开菜单Windows-->Preferences-->Activiti-->Save下流程图片的生成方式 勾选上Createprocessdefinitionimagewhensavingthediagram操作,勾选上这个操作后在画流程图后保存eclipse会自动生成对应的流程图片。 准备开发环境 Activiti依赖 在eclipse左边工作栏右键New选择创建MavenProject项目,创建一个名为ActivitiTest的项目 点击Finish完成。 右键项目选择Properties,选择ProjectFacets勾选上图中的选项,点击Apply,再点击OK 然后将项目转换成web项目,右键项目选择Properties,在ProjectFacets中做如下勾选,然后点击Appy应用和OK确定 然后右键项目Properties,选择DeploymentAssembly,将test相关目录Remove掉之保留main下面需要发布的内容,如下图 然后点击Appply和OK 然后在文件中添加以下依赖

jBPM4.4详细讲解

jBPM4.4 一、什么是jBPM JBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。同时它还能被部署在任何一款JAVA应用服务器上。 java Business Process Management :工作流,工作流引擎 注:记得j小写,因为j代表java,与Log4j中j一样 工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。 jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布 2.0,并在这天加入了JBOSS组织-→被RedHat公司 二、能干什么 提供工作流的实现,帮助更好的进行BPM 三、jBPM有什么,简介jBPM的Service API 各种服务 1:ProcessEngine:流程引擎。并不负责具体的业务,而是用于获取各种Service。 2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。 3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。 4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。 5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。比如:历史流程实例,历史活动实例等。 6:IdentityService:用于操作用户、用户组以及成员关系的服务 7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。 四、Myeclipse8.5 搭配开发环境 1.jbpm-4.4.zip 下载完 2.myeclipse→help→Myeclipse Configuration Center →add……. 3.找到\jbpm- 4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件 4.记得不要联网安装,不要选source文件 5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径 6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把 Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉 项目中就不要再导上面三个包 五、修改配置文件 1、将example中的下列配置文件拷贝到java项目的src目录下: jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、 jBPM.mail.templates.xml、process_forms.css 2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的 hibernate.cfg.xml,这里,要修改为连接我们的数据库。 oracle.jdbc.driver.OracleDriver

jbpm数据库说明

jBPM,全称是Java Business Process Management,是一种基于J2EE 的轻量级 工作流管理系统。 一、介绍下大背景工作流的应用市场部分内容就不提了。首先提一下目前工作流域 的两种主流方向 1、workflow 。 代表osworkflow 等。 workflow 的特点为:其主要侧重于对流程的处理模型方面,也就是说它关注的重心是流程的处理 2、BPM商业逻辑流程模型 BPM的重心为商业逻辑流程模型的处理 其中以JBPM为代表 这是两者最大的区别,也就是切入点不同。不过对我们实际应用来说,选哪个区别都不是很大说到工作流就要提到WFM组织,这个组织是国际上一些厂商组成的一个工作流的组织,该组织给出了一个他们自己定义的工作流的定义,及XPDL语义。 该定义将工作流的定义包括为至少以下五部分内容: 1、工作流过程活动 2、转移信息 3、参与者声明 4、外部应用程序声明 5、相关数据 并给出了标准的语法来描述上述元数据 1:workflow process 2:activity 3:transition 4:application 5:date field 由于JBPM不符合上述语法定义,因此JBPM是不符合该WFM规范的不过上述每部分内容在JBPM都有自己的定义来描述 二、JBPM流程的一个基本的处理步骤 1、加载(发布)流程定义 2、启动流程 3、处理任务 4、记录流程的相关状态 1、加载(发布)流程定义 这个意思是,我们通过jbpm 的designer 插件,或者是用其他工具,制定出processDefinition (可以是String ,可以是包文件,也可以是流数据等),然后将其加载到应用中的过程。这个加载可以是写入内存中,或者是直接 写入数据库等 2、启动流程

JBPM工作流表结构的详解

注:红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义. 整体说明: JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST 流程活动(节点)实例表 JBPM4_HIST_DETAIL 流程历史详细表 JBPM4_HIST_PROCINST 流程实例历史表 JBPM4_HIST_TASK 流程任务实例历史表 JBPM4_HIST_VAR 流程变量(上下文)历史表 JBPM4_ID_GROUP 组表 JBPM4_ID_MEMBERSHIP 用户角色表 JBPM4_ID_USER 用户表 JBPM4_JOB 定时表 JBPM4_LOB 存储表 JBPM4_PARTICIPATION 参与者表 JBPM4_SWIMLANE 泳道表 JBPM4_TASK 任务表 JBPM4_VARIABLE 上下文表 红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义. 发布一个流程deploy后 jbpm4_deployment新增一条记录 jbpm4_deployprop新增三条记录 jbpm4_lob 新增一条记录 开始一个流程startProcessInstanceByKey后 jbpm4_execution新增一条记录 jbpm4_hist_actinst 新增一条记录 jbpm4_hist_procinst新增一条记录 jbpm4_hist_task新增一条记录 jbpm4_task 新增一条记录 流程定义相关的布署信息就存储在(1)JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP及(3)JBPM4_LOB中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP 多三条,

Activiti5基于jBPM4的开源工作流系统10分钟入门指南

https://www.360docs.net/doc/9112218843.html, 觉得activiti设计得简单而强大,尝试翻译一下他的10分钟入门指南: 10分钟入门指南 通过一个(非常简单的)业务流程,介绍一些基本的Activiti工作流感念和API接口。 使用案例 这个用例叫干脆(straightfoward):有一个公司,暂且叫它BPMCorp。在BPMCorp内部,会计部门每个月都要写一份财务报告给公司的股东。但在发送给所有股东之前必须经过上级部门的批准。下面涉及的所有文件及代码片段均可以通过Activiti分发的examples范例包中找到,请查看包 https://www.360docs.net/doc/9112218843.html,ertask的内容。 流程图 如上所述的业务流程可以使用Activiti的可视化流程编辑器 Activiti Modeler查看及编辑。使用BPMN2.0的标准符号则如下图所示: 这里没有什么特殊的东西,图中看到的是一个none start event(左边的圆圈),其次是两个user tasks:"撰写财务报告"和”批准财务报告",以 none end event (右边边框加粗型的圆圈)结束。XML表示 上述业务流程的XML表示形式如下所示(FinancialReportProcess.bpmn20.xml). 流程中包含一些主要的元素(通过点击链接可以查看更详细的BPMN 2.0 元素的说明): ?none start event 让我们认识到要开始一个流程。 ?user tasks声明一个基于用户操作的流程任务. 注意第一个任务是分派用户组accountancy的, 而第二个任务是分派到用户组management的. 查看分派用户任务章节可以得到更多怎样分派任务到用户或组的信息。

jBPM 4.4 入门指南

1.工作流与工作流管理系统 1.1. 工作流(Work Flow) 工作流就是工作流程的计算机模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的方式就是工作流。 公司内采用纸张表单,手工传递的方式,一级一级审批签字,工作效率低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。 作为一个成熟稳定的工作流产品,不仅提供日常办公和关键业务流程智能化管理,而且能根据公司的特殊实际要求轻松方便地随时定制各种流程,并可实现不同角色不同的跟踪、查询、统计、打印等强大功能 1.2.工作流管理系统(Workflow Management System) 工作流管理系统(WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持: 1.定义工作流:包括具体的活动、规则等 2.运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度 3.运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程 序工具交互的功能。 一、定义工作流 二、执行工作流

jBPM

jBPM-jPDL学习笔记—框架设计简介(一) 概述: jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 jPDL是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。 jPDL可以部署于Java语言的任何应用环境下,JavaSE Application(Swing/SWT)、JavaEE Application(Application Server) jPDL分发包组成 目前jPDL的最新版本是3.2.2,您可以在以下地址: https://www.360docs.net/doc/9112218843.html,/jbossjbpm/jpdl_downloads/ 获得官方下载包。下载包分为两种,一种是标准包(jbpm-jpdl-3.2.2.zip)只有20M左右;一种是套件包(jbpm-jpdl-suite-3.2.2.zip)将近80M。两者最大的区别是套装包自带一个已经配置好的jboss服务,下载解压缩后,可直接运行。 jPDL的核心程序包(jbpm-jpdl.jar) 它是一个典型的jar文件,它涵盖对流程定义和运行时流程实例上下文环境的操作API。在最简化的业务流程样例中,jPDL将流程定义存储与XML格式的定义文件中,在运行时载入内存,在内存里记录完整的业务实例和执行过程的环境变量,并完成全部操作。显然,在实际应用中,流程信息必须被持久化的存储于数据库中。jPDL使用了Hibernate作为其对象持久化的API。 Graphical Process Designer插件(jbpm-jpdl-designer-3.1.2.zip) 它是一个基于Eclipse的图型编辑插件。使用它可以对业务流程进行可视化的定制,而无须手动编辑XML文件。该插件还提供了流程定义上传功能,可以将新定义的流程发布到在线运行的jPDL系统上。

jbpm工作流入门教程

jbpm工作流入门教程 1.jBPM的简单介绍 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。 参考 https://www.360docs.net/doc/9112218843.html,/products/jbpm 2.jBPM和myeclipse的冲突 当eclipse安装了myeclipse和jBPM时候,可能有冲突,具体表现在jBPM 的流程设计器不能在eclipse中使用。 3.Hibernate连接mysql数据库的一般参数 下面的配置参数,根据需要可以修改: jbpmtest是mysql中的schema的名字; GBK是字符集,可以根据需要修改; username=root,mysql数据库的用户名是root; password=mysql,mysql数据库的用户密码是mysql; hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncoding= GBK

https://www.360docs.net/doc/9112218843.html,ername=root hibernate.connection.password=mysql hibernate.show_sql=true hibernate.c3p0.min_size=1 hibernate.c3p0.max_size=3 4.Hibernate连接Oracle数据库的一般参数 hibernate.dialect=org.hibernate.dialect.Oracle9Dialect hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl https://www.360docs.net/doc/9112218843.html,ername =jbpm hibernate.connection.password=jbpm 5.为jBPM创建数据库表等内容 5.1.为mysql创建数据库以及数据内容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema(); JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema(); 这2个语针对mysq有效. 5.2.为oralce创建数据库以及数据内容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();

JBPM源码浅析

JBPM源码浅析 关键字: jbpm workflow 工作流 离职啦,工作交接中,记录一下。 就如同了解Servlet规范、Servlet容器设计和实现一样,学会一种workflow 的建模、引擎设计和实现也是必备的。工作流这东西是业务系统的一个核心模块,现在的大多数企业业务系统大多数是业务驱动的,如新闻行业采编发、制造业的采供销、金融保险的审批等,协同OA就不用说了。BPM、ESB、SOA现在很火啊! 下面的总结肯定欠成熟,70%合理就不错啦,看到这篇blog的朋友,一定要批判接受哦。 当前我指的JBPM是3.2版本,因为从JBPM2.0到3.0,其API从package到class 都完全重新设计了,以及其背后的建模思想和架构。在2.0版本里,是按照Spring+Hibernate那种Transaction Script方式组织的,OO的概念比较弱,里面是大量的interface、impl、service。而3.0版本,完全按Domain Model方式组织,Hibernate透明持久化,它是我见到的O/R Mapping最优雅的应用。 在当前的3.2版本里,其整体架构可以这么去理解:领域对象,如ProcessDefinition、ProcessInstance、Node、Token、Transition等,都是Rich Model,里面的方法主要是处理业务,以及建立领域对象之间的关联,持久化则完全放在XXXSession中,如TaskMgmtSession,GraphSession等,也可以认为这些XXXSession是DAO,负责处理持久化。另外, org.jbpm.persistence.db.DbPersistenceService这些类相当于最底层的数据库Helper类。总之,JBPM的技术架构非常清晰易懂,也是非常典型的Domain Driven Design,在这种架构中,分层的概念被弱化了。 上面是从架构的角度看待JBPM设计,其引擎设计和实现,则隐藏在架构下。了解其引擎设计思想,我的建议是,先仔细读读JBPM的User Guide第四章Graph Oriented Programming,专门探讨流程建模的理论,里面附带了一个微型的JBPM 实现,几乎包括流程建模的绝大部分,如顺序流、并行、分支等: https://www.360docs.net/doc/9112218843.html,/jbpm/gop/jbpm.gop.zip,我建议研读JBPM源码前,先把这个理解透,JBPM的流程引擎核心代码和它非常相似,包括类名,只是扩展了一些。 我用代码统计工具统计了一下,JBPM源码总共4w多行,除去注释和空行,约2万6千行。需要我们hack的核心、比较难、代码多的类约40个(共400多),反正它花了我整四天的时间,现在基本都弄清楚了。我主要是通过一个请假流程的部署、创建、任务执行来动态debug、静态查看的。JBPM源码中最难读懂的那部分是引擎调度,也就是org.jbpm.graph相关的几个包,最重要的是GraphElement和其子类Transition等、Node及其子类Fork等、ExecuteContext 和Token。而引擎调度这部分, JBPM附带了一个微型JBPM实现,我在前面介绍

2020年(BPM业务流程管理)jbpm工作流全程笔记

(BPM业务流程管理)jbpm工作流全程笔记

1.工作流 <1>工作流(Workflow):就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。 <2>工作流就是工作流程的计算机化,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。 <3>通俗的说,就是多个人在一起合作完成某件事情。 <4>工作流可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。并实现数据的规范化录入、查询、统计和存档。OA(办公自动化)主要技术之一就是工作流。 2.工作流管理系统(WorkflowManagementSystem,WfMS) <1>主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。 <2>工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持: ①定义工作流:包括具体的活动、规则等; ②运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度; ③运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。 3.JBPM,全称是JavaBusinessProcessManagement <1>JBPM是一种基于J2EE的轻量级工作流管理系统,jBPM是公开源代码项目,官方主页为:http:///jbossjbpm <2>Jbpm的使用 **步骤 *编写流程定义(定义规则); *部署流程定义到系统中; *执行流程(使用指定的流程定义); ①编写流程定义 举例:员工报销费用的流程描述:员工需要先填写报销单据;交给其经理进行审批;审批(通过)后到财务去领款。 以上流程由三个步骤组成,每个步骤即是一个任务,分别由一个角色执行。应该使用jBPM提供的JPDL (jBPMProcessDefinitionLanguage)来描述这个流程,这样使用了jBPM的系统才能看的懂。jPDL:是一种直观的流程语言,可以使用任务、等待状态、定时器、自动化动作等等图形化地表示流程。jPDL 认为一个商务流程可以被看作是一个UML状态图。

相关主题
相关文档
最新文档