首页 > 编程知识 正文

工作流 开源(java工作流框架jbpm)

时间:2023-05-05 05:50:31 阅读:73189 作者:4285

一.工作流程

工作流(工作流) :“在部分或整个业务流程的计算机应用环境中实现自动化”

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.xmljbpm.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 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。