JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

一、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

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 

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

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

③ 配置JBPM运行时

1) 打开window — preferences

1) 选择 JBoss jBPM –> Runtime Locations

2) 点击 Add…

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

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

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

④ 在目录中添加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工作流(一)——实现一个简单的工作流例子详解编程语言

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 


 

 四、JBPM开发步骤详解

 ① 引入JAR文件

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

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

 


 

② 创建配置文件

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言


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

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 

 JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

并生成jbpmtest.jpdl.xml文件:

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 


 五、关键代码

① 创建表18张

[http://www.cnblogs.com/a757956132/p/4774188.html]表的详细说明

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言


②获取工作流引擎

1
2
3
4
5
6
ProcessEngine processEngine=
new
 Configuration().setResource(“jbpm.cfg.xml”).buildProcessEngine();
   
  
@Test
  
public
 void test01(){
      
System.out.println(processEngine);
  
}

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

③部署流程定义

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);
    
}

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 

④启动流程实例

1
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());
 
}

JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

 

⑤查看任务列表

1
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());
       
}
   
}

  JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

⑥查看当前任务所在点

1
2
3
4
5
@Test
    
public
 void findSelect(){
        
String name = processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId(
“jbpmtest.80001”
).uniqueResult().findActiveActivityNames().toString();
        
System.out.println(name);
    
}

  JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

⑦办理任务

1
2
3
4
5
@Test
  
public
 void testCompleteTask(){
      
processEngine.getTaskService().completeTask(
“10002”
);
      
System.out.println(
“OK”
);
  
}

  


 

六、流程管理 

 ①查询所有流程定义

 

1
ProcessEngine pro=Configuration.getProcessEngine();  

 

1
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());
         
         
    
}
}

  JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

②查询最新版的流程定义

 

1
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()); // 所属的部署对象 
                
        
}
    
}

  JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

③根据id删除

注:deleteDeploymentCascade级联删除

 

1
2
3
4
5
@Test
    
public
 void delById(){
        
pro.getRepositoryService().deleteDeploymentCascade(
“1”
);
        
System.out.println(
“del ok!!!”
);
    
}

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

1
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 部署 

 JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

1
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);
 
    
}

  JBPM工作流(一)——实现一个简单的工作流例子详解编程语言

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12137.html

(0)
上一篇 2021年7月19日 14:25
下一篇 2021年7月19日 14:25

相关推荐

发表回复

登录后才能评论