一、      使用JBPM开发工作流的一般流程

1.       jBPM的运行需要数据库的支持,因此系统设计时要选定所用数据库。只要是Hibernate支持的数据库,jBPM就支持。数据库的初始化可以由jBPM自动完成,也可以通过ant generate.ddl任务生成SQL语句,在jBPM外部自己创建所需的表。

2.       使用jPdl定义工作流,生成processdinination.xml文件。可以采用GUI工具gpdl,但目前只支持jBPM1.0,而且bug很多。XML的DTD定义文件在jBPM下载包中。

3.       Antcreate.pde生成pde包的工作目录。将processdinination.xml文件和其它需要的文件放在指定的目录下,使用ant build.precess.archives生成pde包。pde包的格式采用jar。

4.       更改pde工作目录/src/config/jbpm.properties的相关属性,主要是设定相关的数据库连接信息。注意要将数据库的JDBC驱动放在pde工作目录的lib目录下。

5.       Antdeploy.process.archives将刚才生成的pde部署到数据库。实际上就是向数据库插入一些相关数据。

6.       利用jBPM API函数开发相应的工作流程。

二、提供的服务

JBPM为了支持相应的开发,提供了一组服务,如下图:

-管理流程定义

-部署流程定义

-删除流程定义

-查询流程定义

public class HelloTest extends TestCase {  

    ProcessEngine processEngine;      

    public setup() {
processEngine = Configuration.getProcessEngine();
} public void testDeploy(){
RepositoryService rs = processEngine.getRepositoryService(); //发布流程定义
String deploymentId=rs.createDeployment().
addResourceFromClasspath("helloworld.jpdl.xml").deploy(); //获得流程定义
List<ProcessDefinition> list=rs.createProcessDefinitionQuery().list();
System.out.println("list.size():"+list.size());
for (ProcessDefinition pd : list) {
System.out.println("pd.id:"+pd.getId());
} System.out.println("deploymentId:"+deploymentId);
//删除流程定义
rs.deleteDeploymentCascade(deploymentId);
//删除后查询流程定义
System.out.println("after del list count:" + rs.createProcessDefinitionQuery().list().size());
}
}

-管理流程实例

-发起新流程

-执行等待流程

-查看流程实例

-终止流程实例

-删除流程实例

public class ProcessInstanceTest extends TestCase {  

    ProcessEngine processEngine;  

    public ProcessInstanceTest() {
processEngine = Configuration.getProcessEngine();
}
@Override
protected void setUp() throws Exception {
processEngine.getRepositoryService().createDeployment()
.addResourceFromClasspath("helloworld.jpdl.xml").deploy();
} /**
* 流程实例state节点向下执行
*/
public void testProcessInstance(){
ExecutionService es= processEngine.getExecutionService();
//流程实例
ProcessInstance pi = es.startProcessInstanceByKey("helloworld");
//state向下执行
pi= es.signalExecutionById(pi.getId());
System.out.println("pi.isEnded"+pi.isEnded());
} /**
* 终止流程实例
*/
public void testProcessInstanceEnd(){
ExecutionService es= processEngine.getExecutionService();
//流程实例
ProcessInstance pi = es.startProcessInstanceByKey("helloworld");
//终止流程实例
es.endProcessInstance(pi.getId(), "结束流程");
} /**
* 删除流程实例
*/
public void testProcessInstanceDel(){
ExecutionService es= processEngine.getExecutionService();
//流程实例
ProcessInstance pi = es.startProcessInstanceByKey("helloworld");
//删除流程实例
es.deleteProcessInstanceCascade(pi.getId());
} /**
* 流程实例列表
*/
public void testProcessInstanceList(){
ExecutionService es= processEngine.getExecutionService();
//流程实例
ProcessInstance pi = null;
for (int i = 0; i < 10; i++) {
pi= es.startProcessInstanceByKey("helloworld");
}
//查询流程实例列表
List<ProcessInstance> list= es.createProcessInstanceQuery().list();
//输出列表数到控制台
System.out.println("list.size:"+list.size());
}
}

三、      JBPM表结构介绍

资源库和运行时表结构

1.       JBPM4_DEPLOYMENT,JBPM4_DEPLOYPROP,JBPM4_LOB存储流程定义相关的部署信息

2.       JBPM4_EXECUTION主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制

3.       JBPM4_TASK存放需要人来完成的Activities(活动),需要人来参与完成的Activity 被称为Task

4.       JBPM4_PARTICIPATION参与者表,存放参与者信息,参与者的种类有Candidate、Client、Owner、Replaced Assignee和Viewer。而具体的参与者既可以是单一用户,也可以是用户组

5.       JBPM4_SWIMLANE泳道表。SwimLane是一种Runtime Process Role。通过SwimLane,多个Task可以一次分配到同一Actor身上 JBPM4_JOB  存放的是Timer 的定义 JBPM4_VARIABLE 存的是进行时的临时变量。

历史数据库表结构

1.       JBPM4_HIST_PROCINST流程实例历史表

2.       JBPM4_HIST_ACTINST流程节点(活动)历史表

3.       JBPM4_HIST_DETAIL保存流程实例、活动实例、任务实例运行过程中历史明细数据

4.       JBPM4_HIST_VAR保存历史的流程变量数据

5.       JBPM4_HIST_TASK保存历史的任务实例记录

身份认证表

1.       JBPM4_ID_GROUP用户组表

2.       JBPM_ID_MEMBERSHIP保存用户和用户组之间的关联关系

3.       JBPM4_ID_USER用户表

这三张表很常见,基本的权限控制,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足

引擎参数表

1.       JBPM4_PROPERTY引擎参数表,记录JBPM的一些引擎参数,会保存一些初始设定的种子数据;例如引擎版本(KEY=db.version) ,ID生成器版本(KEY=next.dbid)、KEY:引擎KEY,比如next.dbid 下次执行的DBID_VERSION:版本号、VALUE:对应的引擎KEY的VALUE;

执行流程后,数据库表变化情况:

发布一个流程deploy后:

jbpm4_deployment新增一条记录

jbpm4_deployprop新增三条记录

jbpm4_lob新增两条记录

开始一个流程startProcessInstanceByKey后:

jbpm4_execution新增一条记录

jbpm4_hist_actinst新增一条记录

jbpm4_hist_procinst新增一条记录

jbpm4_hist_task新增一条记录

jbpm4_task新增一条记录

工作流--JBPM核心服务及表结构的更多相关文章

  1. Activiti工作流引擎数据库表结构

    Activiti工作流引擎数据库表结构 一.数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_ ...

  2. 工作流 jBMP4.4表结构

    (一)资源库和运行时表结构       JBPM4_DEPLOYMENT,      JBPM4_DEPLOYPROP,      JBPM4_LOB 存储流程定义相关的部署信息       JBPM ...

  3. Apache activiti5.13工作流框架的表结构详解

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  4. Activiti工作流数据库表结构

    Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_*: ...

  5. Activiti学习(二)数据表结构

    Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. l        ...

  6. activti表结构

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  7. JBPM4 常用表结构

    JBPM4 常用表结构 第一部分:表结构说明 Jbpm4 共有18张表,如下,其中红色的表为经常使用的表   一:资源库与运行时表结构 1.  JBPM4_DEPLOYMENT 流程定义表 2.  J ...

  8. JBPM4 常用表结构及其说明

    本文从表结构.操作时表的变化以及jbpm4.4各个包的作用来介绍jbpm的. 第一部分:表结构说明 Jbpm4 共有18张表,如下,其中红色的表为经常使用的表   一:资源库与运行时表结构 1.  J ...

  9. oracle erp 表结构

    BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...

随机推荐

  1. Github资源汇集

    Github资源汇集 突然发现申请博客园已经两年有余,没有发表过一篇文章,十分惭愧.言归正传,先分享一下两年来收集的部分编程资源,大部分为Github上的项目.虽然网上这样的分享已不在少数,但不如我理 ...

  2. 《java系统性能优化》--2.高速缓存

    上一节.简介了怎样发现性能瓶颈.从这节開始.我会和大家分享我在项目中做的一些性能调优工作.这个系列没有什么顺序可言,认为什么重要.就说说什么. 这节.我们聊缓存. 最開始接触缓存这个词,是学习硬件知识 ...

  3. C#中使用REDIS

    C#中使用REDIS 上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# ...

  4. jQuery小例

    jQuery小例子 使用前,请先引用jquery 1,map遍历数组   2,jQuery对象与DOM对象才做元素和互转 3,prevall与nextall 4,jquery版的星星评分控件 5,jq ...

  5. C# 语言的两个html解析器

    基于C# 语言的两个html解析器   基于C# 语言的两个html解析器 1)Html Agility Pack http://nsoup.codeplex.com/ 代码段示例: HtmlDocu ...

  6. postal邮件发送(二):Email headers,附件,图片介绍

    接上篇 http://www.cnblogs.com/mybky/p/5690567.html 1.邮件headers 除此之外,还有Reply-To,用于回复邮箱 2.邮件带有图片 邮件发送图片,p ...

  7. 雕爷:我眼中的O2O成长路径

    嗨,老周,这篇文章写给你.知道你最近正在纠结于O2O的择业分析,因为你是有极高身价的人,所以选择起来必须谨慎,选错了,不是身家那千把万的损失,更是一生荣耀的赌注和起落. “所谓战略,就是站在未来看今天 ...

  8. android 背景图片的设置

    在java文件中对控件设置背景图片 layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.bgimage)) 在设置中, ...

  9. RMAN duplicate from active 时遭遇 ORA-17627 ORA-12154

    最近在从活动数据库进行异机克隆时碰到了ORA-17629,ORA-17627,ORA-12154的错误,起初以为是一个Bug呢.Oracle Bug着实太多了,已经成了习惯性思维了.汗!错误提示是无法 ...

  10. Remoting接口测试工具

    动手写一个Remoting接口测试工具 基于.NET开发分布式系统,经常用到Remoting技术.在测试驱动开发流行的今天,如果针对分布式系统中的每个Remoting接口的每个方法都要写详细的测试脚本 ...