现在的位置: 首页 > 操作系统 > 正文

JBPM工作流

2020年02月10日 操作系统 ⁄ 共 4507字 ⁄ 字号 评论关闭

一、JBPM定义

JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

二、为什么用JBPM

业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被泄露。


三、JBPM环境配置详解

首先在Eclipse中配置环境。如下:

① 配置GPD(流程设计器)

Help ------> Install New Software

点击add,出现一个Add Repository

点击Archive,选择jbbm4.4/install/src/gpd/jbpm-gpd-site.zip

②选择所有插件,然后点Next即可

配置JBPM运行时

1)打开window --- preferences

1)选择 JBoss jBPM --> Runtime Locations

2)点击 Add...

3)在Add Location 对话框中,输入一个名字,比如jbpm-4.4然后点击Search...

4)在 Browse For Folder 对话框中,选择你的jbpm 根目录,然后点击 OK

在目录中添加JPDL4模式

如果你想直接编辑XML 源码, 最好是在你的XML 目录中指定一下模式(schema),这样当你在编辑流程源码的时候,可以更好的帮助你编写代码。

1)点击窗口 --> 属性(Windows --> Preferences)

2)选择XML --> 目录(XML --> XML CataLog)

3)点击添加(Add)

4)添加XML 目录(Add XML Catalog Entry)的窗口打开

5)点击map-icon 的图标下面的按钮并选择文件系统(File System)

6)在打开的对话框中, 选择jBPM 安装目录下src 文件夹中jpdl.xsd 文件

7)点击打开(Open)并且关闭所有的对话框


四、JBPM开发步骤详解

① 引入JAR文件

在jbpm4.4的解压包中根目录Jbpm的jar包还有lib文件夹中除report-engine,war包外所有jar包

注:因为Jbpm4.4是用Mysql作为DB的,如果要用Oracle作为DB需要引入相应的驱动包。


② 创建配置文件


③ 画流程图---[新建jpdl.xml文件]

并生成jbpmtest.jpdl.xml文件:


五、关键代码

① 创建表18张

[http://www.xuebuyuan.com/Linux/2017-01/139344.htm]表的详细说明


②获取工作流引擎

2

3

4

5

6

ProcessEngine processEngine=new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();

@Test

public void test01(){

System.out.println(processEngine);

}

③部署流程定义

1

2

3

4

5

6

7

8

9

@Test

public void deploy(){

String deployid = processEngine.getRepositoryService()

.createDeployment()

.addResourceFromClasspath("jbpmtest.jpdl.xml")

.addResourceFromClasspath("jbpmtest.png").deploy();

System.out.println("部署流程 id:"+deployid);

}

④启动流程实例

2

3

4

5

6

7

@Test

public void startTest(){

//启动流程实例 通过key,key是process节点中的key,如果不写,默认为name的值

ProcessInstance pi=processEngine.getExecutionService().startProcessInstanceByKey("jbpmtest");

System.out.println("start ok!");

System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId());

}

⑤查看任务列表

2

3

4

5

6

7

8

9

10

@Test

public void selectTask(){

String user="张三";

String users="王五";

List<Task> tasks = processEngine.getTaskService().findPersonalTasks(user);

for (Task task : tasks) {

System.out.println("任务ID:"+task.getId()+"\t任务名称:"+task.getName()+"\t任务办理人:"+task.getAssignee());

}

}

  

⑥查看当前任务所在点

2

3

4

5

@Test

public void findSelect(){

String name = processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpmtest.80001").uniqueResult().findActiveActivityNames().toString();

System.out.println(name);

}

  

⑦办理任务

2

3

4

5

@Test

public void testCompleteTask(){

processEngine.getTaskService().completeTask("10002");

System.out.println("OK");

}

六、流程管理

①查询所有流程定义

ProcessEngine pro=Configuration.getProcessEngine();  

2

3

4

5

6

7

8

9

10

11

@Test

public void findAll(){

List<ProcessDefinition> list = pro.getRepositoryService().createProcessDefinitionQuery().list();

for (ProcessDefinition pd : list) {

System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey:"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());

}

}

  

②查询最新版的流程定义

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@Test

public void getNewFindAll(){

//查询所有,让最大的版本排到最后面

List<ProcessDefinition> all = pro.getRepositoryService().createProcessDefinitionQuery().orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION).list();

//过滤出所有最新的版本

Map<String, ProcessDefinition> map=new HashMap<String, ProcessDefinition>();

for (ProcessDefinition pd : all) {

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

}

//显示

for (ProcessDefinition pd : map.values()) {

System.out.println("id=" + pd.getId()// 格式为:{key}-{version},用于唯一的标识一个流程定义

+ ", name=" + pd.getName()// 流程定义的名称,jpdl.xml中根元素的name属性的值

+ ", key=" + pd.getKey()// 流程定义的key,jpdl.xml中根元素的key属性的值,默认是name属性的值

+ ", version=" + pd.getVersion()// 自动生成的,同一个名称的第一个为1,以后的自动加1.

+ ", deploymentId=" + pd.getDeploymentId()); // 所属的部署对象

}

}

  

③根据id删除

注:deleteDeploymentCascade级联删除

2

3

4

5

@Test

public void delById(){

pro.getRepositoryService().deleteDeploymentCascade("1");

System.out.println("del ok!!!");

}

④删除指定key的所有版本的流程  

2

3

4

5

6

7

8

@Test

public void delByKey(){

List<ProcessDefinition> list = pro.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list();

for (ProcessDefinition pd : list) {

pro.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());

}

}

 ⑤ZIP 部署 

2

3

4

5

6

7

8

9

@Test

public void addZip(){

//部署zip格式的资源

InputStream is=this.getClass().getClassLoader().getResourceAsStream("src.zip");

ZipInputStream zs=new ZipInputStream(is);

String id= pro.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy();

System.out.println("部署成功:deploymentid:"+id);

}

  

本文永久更新链接地址:http://www.xuebuyuan.com/Linux/2017-01/139343.htm

以上就上有关JBPM工作流的相关介绍,要了解更多JBPM,JBPM工作流,编程,Linux编程,Linux Shell,Android,Android教程,JAVA,C语言,Python,HTML5内容请登录学步园。

抱歉!评论已关闭.