一:JBPM是什么?有什么用?能解决什么问题?

现实生活中有很多需要走一些流程的过程,比如请假流程,报销流程等,使用工作流框架,即可写一个流程即可,添加流程时不在繁琐的建立新的各种配置。

1:jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。

2:他可以使用 JPdl详细定义状态图的每个部分,如起始,结束状态,状态之间的转换等。

3:JBPM还有一个特点就是他使用  Hibernate  来管理他的数据库,他会在数据库中建立十八张表,项目中的流程都存在于这18张表中。不仅如此,他还提供了各个数据库的执行脚本

二:基本操作

1:以请假为例说明其基本操作

1:添加Jar包,提供三个核心配置文件

核心配置文件-----jbpm.cfg.xml
hibernate框架配置文件-----jbpm.hibernate.cfg.xml
日志配置文件-----logging.properties

2:加载发布流程定义:公司中的管理员通过jBPM的designer插件设计了一套请假的流程是什么样子的。

.3:对于流程的基本操作

3.1)部署流程

 NewDeployment deployment = processEngine.getRepositoryService().createDeployment();
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("D:\\room\\jbpm\\process\\hello.zip")));
deployment.addResourcesFromZipInputStream(zipInputStream);
String id = deployment.deploy();
System.out.println(id);

3.2)删除流程

 String deploymentId = "1";
processEngine.getRepositoryService().deleteDeployment(deploymentId);

3.3)查询流程

 ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
long count = query.count();
System.out.println("当前系统流程定义的数量 = " + count);
List<ProcessDefinition> list = query.list();

3.4)获取一次流程对应的文档(xml文件以及png图片)

 Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId);
for(String name:names){
System.out.println(name);
} //获得一次部署对应的文件输入流
String resourceName = "helloworld.jpdl.xml";
//获得部署对应的输入流
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
//通过此输出流将文件保存到本地磁盘
OutputStream out = new FileOutputStream(new File("d:\\" + resourceName));
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
out.close();
in.close();

4 启动流程:现在可以请假了!!

     String processDefinitionId = "请假流程-2";
ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceById(processDefinitionId);

5 处理任务:

5.1查询我可以处理的任务

 String userId = "王五";
//获取任务查询对象
TaskQuery query = processEngine.getTaskService().createTaskQuery();
query.assignee(userId);//添加过滤条件
List<Task> list = query.list();

5.2 办理任务

     String taskId = "50001";
processEngine.getTaskService().completeTask(taskId);

6 记录流程的相关状态

5:在操作过程中常用的Service

1)processEngine.getRepositoryService()----流程定义的部署,删除,查询,获得流程定义文档
2)processEngine.getExecutionService()-----启动一个流程实例,跳转到下一步
3)processEngine.getTaskService()----------查询我的任务列表,办理任务

6:在炒作过程中常用的查询对象

1)流程定义查询对象---processEngine.getRepositoryService().createProcessDefinitionQuery();
2)流程实例查询对象---processEngine.getExecutionService().createProcessInstanceQuery();
3)任务查询对象-------processEngine.getTaskService().createTaskQuery();
4)部署查询对象-------processEngine.getRepositoryService().createDeploymentQuery();

7:jBPM中的及格对象

1)Deployment----部署对象,对应就是一次部署
2)Execution-----执行对象
3)ProcessDefinition----流程定义对象,一个流程的步骤说明
4)ProcessInstance---流程实例对象,其实就是一个特殊的执行对象,特指从流程开始到结束的最大分支
5)Task----任务对象

二:Myeclipse2017集成JBPM7框架。

1:登陆官网  http://downloads.jboss.org/jbpm/release/7.0.0.Final/  下载  jbpm7 -full 压缩包

2:在Myeclipse2017安装路径【D:\Mycelipse2017\install】下新建文件夹【jpbm7-plugins】

3)在安装路径下的dropins文件夹下【D:\Mycelipse2017\install\dropins】新建  【jbpm.link】文件,内容为

path=D:\\Mycelipse2017\\install\\jpbm7-plugins

4)将【jbpm-installer-7.0.0.Final.zip】解压下的【jbpm-installer\lib 】文件夹下,找到找到org.drools.updatesite-7.0.0.Final.zip  将此文件解压 复制【 features 】和【 plugins 】文件到第2步【jbpm7-plugins】文件夹下

5)将j【bpm-installer\lib 】文件夹下【jbpm-7.0.0.Final-bin.zip】解压,新建并复制到【D:\Mycelipse2017\jbpm7.Final-bin\jbpm-7.0.0.Final-bin 】文件夹下

6)重启Myeclipse2017,window——>preferences——>jBPM,然后添加刚刚在【D:\Mycelipse2017\jbpm7.Final-bin\jbpm-7.0.0.Final-bin】文件夹下的内容,结果如图

7)点击Apply——>OK

8)  新建jBPM工程验证即可。

三:如何在SSH项目中整合  jbpm 并使用。

1)对于jar包,原有的SSH项目中对于jpbm所依赖的15个jar包其实已经包含了10个,我们只需再考五个即可。

2)配置文件:原来的三个只需拷一个【 jbpm.cfg.xml 】,其他的由其他进行配置,

  是jbpm.hibernate.cfg.xml

所以在beans.xml文件中配置如下内容即可

     <!-- 本地会话工厂bean -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 注入hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<!-- hibernate映射文件的位置 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:cn/xqc/moder/domain</value>
</list>
</property>
<!-- 新加的 strat -->
<!-- 加载jbpm jar包中的hbm映射文件 -->
<property name="mappingJarLocations">
<list>
<value>/WEB-INF/lib/jbpm.jar</value>
</list>
</property>
<!-- 新加的 end -->
</bean>

    注:Tomact  与  jbpm的EL表达式的包冲突的问题。

3)配置jbpm与Spring整合

整合后我们要将jbpm的控制权交给Spring管理。所以在beans.xml文件中添加如下内容

     <!-- 配置jbpm和spring框架整合的核心类 -->
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
<!-- 指定jbpm框架的核心配置文件 -->
<property name="jbpmCfg" value="jbpm.cfg.xml"/>
</bean> <!-- 配置ProcessEngine对象 交由Spring进行管理 -->
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"></bean>

并且修改我们刚刚拷贝的【jbpm.cfg.xml】文件修改如下

 <?xml version="1.0" encoding="UTF-8"?>

 <jbpm-configuration>

   <import resource="jbpm.default.cfg.xml" />
<import resource="jbpm.businesscalendar.cfg.xml" />
<!-- 将其改为 jbpm.tx.spring.cfg.xml
<import resource="jbpm.tx.hibernate.cfg.xml" /> -->
<import resource="jbpm.tx.spring.cfg.xml"></import>
<import resource="jbpm.jpdl.cfg.xml" />
<import resource="jbpm.bpmn.cfg.xml" />
<import resource="jbpm.identity.cfg.xml" /> <!-- Job executor is excluded for running the example test cases. -->
<!-- To enable timers and messages in production use, this should be included. -->
<!--
<import resource="jbpm.jobexecutor.cfg.xml" />
--> </jbpm-configuration>

4)可以新建一个  Class 让其获取  ProcessEngine 对象测试项目是否整合完成。还有一个可以看一下jbpm的那18张表是不是在数据库中已经创建了。如果创建了,基本就没问题了。

     @Resource
private ProcessEngine processEngine;

5)然后就可以操作  Service 进行流程控制了。

jpbm工作流框架的更多相关文章

  1. 基于Spring的轻量级工作流框架

    项目地址 码云:https://git.oschina.net/null_584_3382/business-flow-parent github:https://github.com/Athlizo ...

  2. activiti工作流框架简介

    常见的工作流框架:activiti, JBPM, OSWorkflow activiti框架基于23张基础的表数据, 基于Mybatis操作数据库. JBPM框架基于18张基础的表数据, 基于hibe ...

  3. 工作流框架Activiti

    最近在看一些项目设计方面的文章,涉及到了工作流技术,于是了解一下. 1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...

  4. 项目结合activiti工作流框架使用

    项目结合activiti工作流框架使用: 1.项目与工作流框架的结合. 2.状态:草稿(待审批).审批中.审批通过.审批失败 3. 提交审批: 0 草稿(待审批),记录绑定工作流执行id,审批状态设置 ...

  5. Activiti工作流框架学习(一)——环境的搭建和数据表的了解

    一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...

  6. .NET 5 开源工作流框架elsa技术研究

    今天假期第一天,研究了.NET 5开源工作流框架elsa,现在分享给大家. 一.框架简介 elsa是一个开源的.NET Standard 工作流框架,官方网站:https://elsa-workflo ...

  7. 详解工作流框架Activiti的服务架构和组件

    摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...

  8. Fastflow——基于golang的轻量级工作流框架

    Fastflow 是什么?用一句话来定义它:一个 基于golang协程.支持水平扩容的分布式高性能工作流框架. 它具有以下特点: 易用性:工作流模型基于 DAG 来定义,同时还提供开箱即用的 API, ...

  9. Activiti工作流框架——快速上手

        一.前言 最近在做公司的OA,里面有用到工作流,公司用的是 jbpm4,感觉比较老,资料有点少,就先学学 新一点的 activiti  ㄟ(▔▽▔)ㄏ 首先工作流的概念是:工作流(Workfl ...

随机推荐

  1. 【代码笔记】iOS-UITableView上的button点击事件

    代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController < ...

  2. mpvue最佳实践 , 美团出的一个小程序框架

    看手机微信,看到说美团出了1个小程序框架,  mpvue 搜下来试试,看了网上的一个对比 ----------------- 以下为引用 我们对微信小程序.mpvue.WePY 这三个开发框架的主要能 ...

  3. ionic 上拉菜单(ActionSheet)安装和iOS样式不一样

    ISO中的界面是这样的: 然而,Android中的界面是这样的: 代码如下: HTML部分: <body ng-app="starter" ng-controller=&qu ...

  4. 用VisualAssist在Visual Studio上设置快捷键快速编程

    一  在Visual Studio上安装VisualAssist工具: 链接:https://pan.baidu.com/s/1uaeRFTvY4p7LNoDvQFEU5A 提取码:j1ws 安装后, ...

  5. 13 款惊艳的 Node.js 框架——第2部分

    [编者按]本文作者为 Peter Wayner,主要介绍13款至精至简的 Node.js 框架,帮助你简化高速网站.丰富 API 以及实时应用的开发流程.本文系国内 ITOM 管理平台 OneAPM ...

  6. 调研getfit

    Gitfit实际是一个提供私人教练的服务,其主要业务有三种,“局部减脂”每天0.5-1小时,对局部高强度的刺激,快速达到塑形目地,不需要复杂器械,0基础也能跟上训练进度,并提供咨询师.营养师团队.专属 ...

  7. MemSQL 架构初探

    MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...

  8. IIS日志导致磁盘被占满

    某服务器只部署了个IIS,应用目录都在D盘,可C盘97.5GB空间却被占满了. 将系统文件,隐藏文件全部显示,再选中所有的C盘文件及文件夹查看容量只有19GB. 既然只部署了IIS,那自然就怀疑到了I ...

  9. Security Software Engineer

    Security Software Engineer Are you excited to be part of the VR revolution and work on cutting edge ...

  10. Linux运维之shell脚本基础知识

    1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...