一.工作流程
工作流(工作流) :“在部分或整个业务流程的计算机应用环境中实现自动化”
l简单来说,就是用程序管理工作流程,以表格审核和任务处理为主体,实现办公室自动化
工作流帮助器管理业务流程,业务操作保持不变。 工作流是通知流程,哪个角色负责执行任务
典型应用:工作流技术是办公自动化项目的典型标志
主流工作流引擎:
OSWorkflow:OSWorkflow是一个灵活的工作流引擎,旨在集成到企业APP应用程序中。 提供了许多持久的API支持,包括EJB、Hibernate和JDBC。 OSWorkflow还可以与Spring集成。
OFBiz (大型):OFBiz是一个非常有名的开源项目,基于最新的J2EE/XML规范和技术标准,提供大中型企业级、跨平台、跨数据库和跨APP服务OFBiz最大的特点是OFBiz提供了一系列组件和工具来开发基于Java的web APP应用程序。 包括实体引擎、服务引擎、消息引擎、工作流引擎、规则引擎等。
JPM (轻量级) jBpm是一个灵活、可扩展的工作流管理系统。 作为jBpm运行时服务器输入的业务流程以简单而强大的语言表示,并打包在流程文件中。 JMP将工作流APP应用程序开发的便利性与卓越的企业APP应用程序集成(EAI )能力相结合。 JMP包含web APP应用程序和调度程序。 JMP是一组J2SE组件,可以部署为J2EE APP应用程序群集。
JPM使用XML结构的流程描述语言JPDL来描述工作流,JBPM使用Hibernate作为持久层工具。
JBPM的最新版本是JBPM6,目前主流企业版本是4.4,JBPM从版本5分流。 JBPM 5和JBPM4截然不同,它们是由Activity的原始JBPM4团队开发的。
jbpm演示
1、通过Java applet流程设计器设计假期流程,保存holiday.zip文件
2、启动示例自带tomcat程序(配置JAVA_HOME )
web appsmy jbpm4- consolewe B- INFclasses修改jbpm.hibernate.CFG.XML配置jdbc连接参数
3、通过admin登录,上传发布流程---启动实例
4、用员工登录,填写假期申请
5、以部门经理身份登录并进行审批
可以从JBPM中得知
1、目前的业务流程是什么?
2、目前的业务流程有哪些环节? 运行到哪个环境?
3、这个环节由谁来完成?
4、以具体身份用户身份登录,完成应对任务
二、JBPM快速启动(开发环境准备)
下载jbpm 4.4 zip软件包
API文档: jBPM 4.4 API.chm
1) 安装 gpd 设计器 (Graphical Process Designer (GPD))
通常企业在设计业务流程时,要通过绘图工作完成
安装环境: eclipse 3.5----需要myeclipse 8.5以上
步骤:
1 .单击myeclipse帮助中的myeclipse configuration center
2、添加站点选择本地压缩包安装 installsrcGPDjbpm-GPD-site.zip
3、右键点击所有添加到配置文件
4、点击应用8更改按钮提交8处更新,安装完成后提示myeclipse重新启动
在窗口首选项中查看jBoss jbpm选项的证明时,“安装成功”
在创建新项目、创建新的JBPM4 ProcessDefinition和使用GPD设计假期流程时,将生成xxx.jpdl.xml文件,同时生成png图像。 要手动配置xml,必须配置添加架构提示* srcjpdl-4.4.xsd。
2) 搭建开发环境 导入jar包和配置文件
导入jbpm.jar核心jar
导入lib/*.j
ar(不导入 servlet-api.jar、 junit.jar、 slf4j相关所有jar)导入slf4j 替换jar
导入配置文件:
src导入log4j.properties日志配置文件
JBPM_HOME/examples/src/jbpm.cfg.xml、jbpm.hibernate.cfg.xml
配置jbpm.hibernate.cfg.xml jdbc的数据库连接参数
注:**使用org.hibernate.dialect.MySQLDialect方言会有流程结束异常问题
** 使用 org.hibernate.dialect.MySQL5InnoDBDialect替换方言
运行后会创建 jbpm18张数据表
// 只需要加载jbpm 核心配置文件 jbpm.cfg.xml
Configuration configuration = new Configuration();
// 获得jbpm流程引擎(完成建表)
configuration.buildProcessEngine();
三、流程定义设计和部署
1、 设计流程
使用gpd设计器设计, 可以手写xml 编写流程
2、 发布流程定义(将流程定义交给jbpm管理 )
获得RepositoryService ---- processEngine.getRepositoryService();
通过 NewDeployment进行流程发布
addResourceFromClasspath添加类路径资源
addResourcesFromZipInputStream添加压缩包文件
数据表操作
流程定义发布操作数据表流程
1、 先从 jbpm4_property 属性表 获得下次操作数据id(value每次加10000)
2、 向jbpm4_deployment(发布表) 插入 1条数据
3、 向jbpm4_lob (发布资源表) 插入n条数据 (多少个文件就插入多少条)
4、 向jbpm4_deployprop(发布流程信息表) 插入 4条数据
5、 更新jbpm4_property 下次数据表操作 id + 10000
3、 对发布流程定义 进行查询
通过ProcessDefinitionQuery查询流程定义信息
l repositoryService.createProcessDefinitionQuery()
• processDefinitionId(processDefinitionId)
• processDefinitionKey(key)
• processDefinitionName(name)
• processDefinitionNameLike(name)
• page(firstResult, maxResults)
• orderAsc(property)
• orderDesc(property)
通常查询根据jbpm4_deployprop 表中属性进行查询
Pdid是全局唯一的标识
Pdkey流程定义关键字,允许重复 (查询结果不唯一)
<process> 元素通过key 指定key值,如果没有执行,默认name将作为key值processDefinitionName(name)通过发布name 查询
4、 查询流程定义相关资源 (图片查询)
l RepositoryService
getResourceAsStream(deploymentId,resourceName)
5、 删除流程定义
通过 流程发布 id (deploymentid) 删除
repositoryService.deleteDeployment(deploymentId);(不能有关联)
repositoryService.deleteDeploymentCascade(deploymentId);
通过 流程key 进行删除 (先通过key 查询 deploymentId, 再删除)
四、流程实例的操作
ProcessDefinition 流程定义 和 ProcessInstance 流程实例的关系
一个业务流程,编写一个jpdl描述文件,发布到jbpm中产生一个ProcessDefinition对象,需要人取操作该流程,每次流程操作,可以理解为一个ProcessInstance对象,一个流程定义可以对应很多个流程实例
1、 启动流程实例
需要 ExecutionService 进行实例运行操作
executionService.startProcessInstanceById(pdId);通过流程id
executionService.startProcessInstanceByKey(pdKey);通过流程key
启动实例数据表操作
1)、向 jbpm4_execution (流程实例执行表)表插入一条数据,代表一个实例正在运行
* 只存放 正在运行的 流程实例信息
2)、向 jbpm4_hist_procinst表(流程实例运行历史记录) 插入一条数据,记录运行实例历史
3)、如果有任务 向 jbpm4_task(任务表,当流程运行任务节点) 插入数据 记录任务
4)、向jbpm4_hist_task(任务历史记录表) 插入数据 记录任务历史
5)、向jbpm4_hist_actinst (流程活动历史记录 )流程活动历史表插入数据
**jbpm4_hist_actinst 可以存放所有活动信息,活动并不是只有任务
注意:如果用key值启动流程,key值不一定是唯一的(使用key启动,启动版本最高那个实例LONGVAL_列)
2、 流程向后一步
不管当前在什么类型 活动节点, 都可以通过 ExecutionService提供 signalExecutionById使当前流程,流转向下一个节点 executionService.signalExecutionById("holiday.50001","to 部门经理审批"); 作用将 holiday.50001业务流程,流转到 to部门经理审批 的 < transition>
3、 中止流程
executionService.endProcessInstance("holiday.70001",ProcessInstance.STATE_ENDED);
4、 通过任务的指定用户,办理任务----查看流程运行到哪个任务
5、 实际开发中 不会直接将任务向后一步,而需要通过特定用户(负责任)来办理任务
查询 某个人的个人任务列表 ,为JBPM中 Task指定负责人,由该人来完成任务
通过 gpd插件,将task指定 Assignment--- Type:assignee --- Expression 指定负责人
通过 TaskQuery 查看某人的个人任务
6 .办理个人任务
通过 TaskService 提供complateTask(taskId) 完成任务
小结:
JBPM就是第三方工作流框架,作用就是帮助程序管理业务流程
1、 流程定义 GPD设计
2、 创建JBPM表核心对象 ProcessEngine 流程引擎
3、 流程引擎 提供常见Service操作
RepositoryService 操作流程定义 ----- ProcessDefinitionQuery
ExecutionService 操作流程实例 ------ ProcessInstanceQuery
TaskService 操作流程任务 ------ TaskQuery