什么是JBPM?

   全称是Java Business Process Management(业务流程管理),它是覆盖一业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。它给我们提供流程逻辑的定义方法,给我们提供根据流程逻辑来调度业务对象的功能。能使我们避免在代码中硬编码流程逻辑,因为硬编码的逻辑难于理解和复用,并且非常容易受到变化的影响,维护起来极度困难。

   注意:JBPM中是工作流中的一种,其它的还有activiti、OSWorkflow等等。

JBPM安装配置

   开发环境:Eclipse+GPD插件+tomcat

   安装过程:

   1、下载并安装Eclipse3.x、jbpm4.x、tomcat6.x

   2、安装GPD插件(eclipse图形化流程设计器):"eclipse->help->Install New Software...->add->Archive",选择jbpm安装目录install/src/gdp目录下的jbpm-gpd-site.zip进行安装。安装成功后,配置jbpm运行环境"eclipse->Preference->JBoss jBPM->Runtime Location->add"选择jbpm的安装目录。

   3、配置JPDL xml的schema:"eclipse->Preference->XML->XML Catalog->add->File System"选择jbpm安装目录下的src中的jpdl-4.x.xsd

   4、导入开发用的jbpm jar包(包含jbpm安装目录中的jbpm.jar和lib下的所有包,最好建立User Libary)

   5、建立配置文件jbpm.cfg.xml和jbpm.hibernate.cfg.xml:若不知怎么写可参看jbpm安装目录中examples/src中的,然后根据自己需要修改即可。

  6、设计自己的流程定义和Java类,正式开发

JBPM开发步骤

   1、业务人员进行业务分析,建立process definition(其实是活动图)。

   2、根据业务人员建立的process definition建立JBPM的流程定义(即*.jpdl.xml文件)。

   3、开发人员编写流程处理代码

   4、开发人员,或者系统管理员进行流程部署,通常情况下系统都会有流程发布的UI。    

   5、用户进行流程操作。

JBPM实例

1、管理流程定义

  • 部署流程定义

    String deploymentId=repositroyService.createDeployment().addResourceFromClasspath("asdf.jpdl.xml").deploy();

  • 查询流程定义:List<ProcessDefinition> list=repositroyService.createProcessDefinitionQuery().list();

  • 删除流程定义:repositroyService.deleteDeploymentCascade(deploymentId);  

2、管理流程实例:

  • 发起新流程:ProcessInstance pi=executionService.startProcessInstanceByKey("test",map);

  • 执行等待的流程:pi=executionService.signalExecutionById(pi.getId());

  • 查看流程实例:List<ProcessInstance> list=executionService.createProcessInstanceQuery().list();

  • 终止流程实例:executionService.endProcessInstance(pi.getId(),"终结理由");

  • 删除流程实例:executionService.deleteProcessInstanceCascade(pi.getId());

3、查询当前任务实例:executionService.findProcessInstanceById("test.1001");

4、查询角色任务:taskService.findPersonalTasks("科长");

5、完成提交:taskService.completeTask("2001");

JBPM核心对象

101204710.jpg

Configuration和ProcessEngine

   Configuration是jbpm的配置文件管理对象即资源加载对象,负责加载jbpm的各种配置,如数据库连接配置,身份认证,jpdl等相关配置。

   ProcessEngine是一个服务工厂,有点类似hibernate的sessionFactory,负责创建jbpm的每个服务。

   1、ProcessEngine通过Configuration类构建,Configuration以单例模式获取ProcessEngine对象

   2、ProcessEngine是线程安全的,所有的线程和请求都可以使用同一个ProcessEngine对象

   3、ProcessEngine processEngine=Configuration.getProcessEngine();

JBPM服务

1、RepositoryService:流程资源服务接口。提供对流程定义的部署、查询、删除和流程图查看等操作。

2、ExecutionService:流程执行服务接口。提供启动流程实例、推进、删除等操作。

3、TaskService:人工任务服务接口。提供对任务的创建、提交、查询、保存、删除等操作。

4、HistoryService:流程历史服务接口。提供对任务的管理操作。提供对流程历史库中流程实例、历史活动实例等记录的查询。

5、ManagementService:流程管理接口,通常用来管理Job(异步服务)。

6、IdentityService:身份认证服务接口。提供对流程用户、用户组管理。

JBPM流程变量

1、流程实例变量ProcessInstance

添加变量:

Map<String,Object> avriable=new HashMap<String,Object>();

variable.put("userId","001");

variable.put("userName","tom");

ProcessInstance processInstance=executionService.startProcessInstanceByKey("test",variable);

获取变量:

String userId=executionService.getVariable("test.3001","userId").toString();

修改变量:

executionService.setVariable("test.3001","userId","10098");

移除变量:流程结束,便移除了流程变量。

2、任务变量Task

添加变量:

Map<String,Object> avriable=new HashMap<String,Object>();

variable.put("taskUserId","001");

variable.put("taskUserName","tom");

taskService.setVariable("5004",variable);

获取变量:

String userId=taskService.getVariable("5004","taskUserName");

移除变量:

3、变量作用域,两种变量之间的关系。

任务变量与流程变量:流程变量>任务变量

流程变量与流程变量:不同的流程实例变量不能互相访问。

任务变量与任务变量:不同任务的任务变量不能互相访问。

JBPM EL表达式

1、JBPM使用EL表达式获取变量${name}

2、使用EL表达式执行对象方法

流程定义语言JPDL

JPDL(JBoss jBPM Process Definition Language)是构建于jBPM构架上的流程语言之一。在JPDL中提供了任务(task)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)...等术语,并通过图型化的流程定义,很直观地描述业务流程。

JPDL常用活动(Activity)节点

1、控制流程的活动:能改变流程状态的活动

  • Start(开始活动)

  • End(结束活动)

  • Decision(判断活动)

  • Fork-join(分支活动);

  • sub-process(子流程)

  • State(状态活动)

  • Task(人工任务活动)

2、原子活动:并不会对流程进行调度,而是执行相关代码。

  • java

  • script

  • sql

  • hql

  • email

JBPM Task人工任务活动

1、任务分配的几种方式

  • Assignee

  • Candidate-groups

  • assingmentHander

  • Swimlanes

2、表单属性form

113032819.jpg