JBPM-工作流引擎

一、   工作流

工作流(Workflow):就是“业务过程的部分或整体在计算机应用环境下的自动化”

l  简单的说,就是将工作的流程通过程序管理起来,以表单审核和任务办理为主体,实现办公自动化

            工作流帮助程序管理业务流程,业务操作不发生改变,工作流只是通知程序,该哪个角色进行某个 任务 

典型应用:工作流技术是OA项目典型标志 

主流工作流引擎 :

         OSWorkflow:OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业应用程序中。它提供了许多的持久化API支持包括:EJB,Hibernate,JDBC和其它。OSWorkflow还可以与Spring集成。

         OFBiz(大型): OFBiz是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

         jBpm(轻量级): jBpm是一个灵活可扩展的工作流管理系统。作为 jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中。jBmp将工作流应用开发的便利性和杰出的企业应用集成(EAI)能力结合了起来。jBmp包括一个Web应用程序和一个日程安排程序。jBmp是一组J2SE组件,可以作为J2EE应用集群部署。

 

         JBPM采用XML结构的流程描述语言JPDL来描述工作流程,并且JBPM使用Hibernate作为持久层工具。

JBPM的最新版本为 JBPM6,现在主流企业版本 为4.4,JBPM 从5版本开始分流:JBPM 5和JBPM4完全不同,ActivityJBPM4团队开发。

 

JBPM Demo 演示

1、   通过 java applet 流程设计器,设计请假流程,保存 holiday.zip 文件


2、   启动示例中自带tomcat程序(配置 JAVA_HOME)

webapps\MyJbpm4-Console\WEB-INF\classes修改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))

通常在企业设计业务流程时,通过画图作业来完成

安装环境 :需要 eclipse3.5 ---- myeclipse 8.5 以上

步骤:

1、  点击myeclipse的help中的myeclipse configuration center

   

2、选择add-site 本地压缩包安装 \install\src\gpd\jbpm-gpd-site.zip

      

  

     

 

3、  右击每一项Add to Profile

    

4、  点击Apply 8 changes按钮提交8处更新,安装完成后提示重启myeclipse


         如果在Windowpreferences看到jBoss jbpm选项证明(安装成功

 

新建工程然后新建 JBPM4 ProcessDefinition  使用 GPD 设计请假流程,即可生成 xxx.jpdl.xml文件,同步产生 png 图片,手动配置xml需要配置添加schema提示 * \src\jpdl-4.4.xsd。

 

2) 搭建开发环境 导入jar包和配置文件

         导入jbpm.jar 核心jar

         导入 lib/*.jar(不导入 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 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值