jpbm工作流框架
一: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工作流框架的更多相关文章
- 基于Spring的轻量级工作流框架
项目地址 码云:https://git.oschina.net/null_584_3382/business-flow-parent github:https://github.com/Athlizo ...
- activiti工作流框架简介
常见的工作流框架:activiti, JBPM, OSWorkflow activiti框架基于23张基础的表数据, 基于Mybatis操作数据库. JBPM框架基于18张基础的表数据, 基于hibe ...
- 工作流框架Activiti
最近在看一些项目设计方面的文章,涉及到了工作流技术,于是了解一下. 1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...
- 项目结合activiti工作流框架使用
项目结合activiti工作流框架使用: 1.项目与工作流框架的结合. 2.状态:草稿(待审批).审批中.审批通过.审批失败 3. 提交审批: 0 草稿(待审批),记录绑定工作流执行id,审批状态设置 ...
- Activiti工作流框架学习(一)——环境的搭建和数据表的了解
一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...
- .NET 5 开源工作流框架elsa技术研究
今天假期第一天,研究了.NET 5开源工作流框架elsa,现在分享给大家. 一.框架简介 elsa是一个开源的.NET Standard 工作流框架,官方网站:https://elsa-workflo ...
- 详解工作流框架Activiti的服务架构和组件
摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...
- Fastflow——基于golang的轻量级工作流框架
Fastflow 是什么?用一句话来定义它:一个 基于golang协程.支持水平扩容的分布式高性能工作流框架. 它具有以下特点: 易用性:工作流模型基于 DAG 来定义,同时还提供开箱即用的 API, ...
- Activiti工作流框架——快速上手
一.前言 最近在做公司的OA,里面有用到工作流,公司用的是 jbpm4,感觉比较老,资料有点少,就先学学 新一点的 activiti ㄟ(▔▽▔)ㄏ 首先工作流的概念是:工作流(Workfl ...
随机推荐
- vue 结合 animate.css
这里说的是vue2.0和animate.css的结合使用.其实用过就知道用法是比较简单的.但是就是刚开始使用的时候,难免有的会遇到各种问题.简单的说说我所用过并且遇过的坑. 首先是transition ...
- MySql 正则表达式简介及使用
MySql正则表达式简介及使用 by:授客 QQ:1033553122 简介 正则表达式描述了一组字符串,该字符放置于REGEXP工具后面.作用是将一个正则表达式与一个文本串进行比较. 最简单的正则表 ...
- 安卓开发_浅谈ListView(ArrayAdapter数组适配器)
列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...
- C# 程序员最常犯的 10 个错误http://www.oschina.net/translate/top-10-mistakes-that-c-sharp-programmers-make
来源:http://www.oschina.net/translate/top-10-mistakes-that-c-sharp-programmers-make 关于C# C#是达成微软公共语言运行 ...
- Sql Server Express 2005提示"failed to generate a user instance of sql server "
解决方法: 修改连接字符串“Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\mydb.mdf;Integrated Security ...
- 学习git踩坑之路
第一次使用git: 1.使用CentOS Linux release 7.3.1611 (Core),内核版本3.10.0-514.el7.x86_64 2.安装git: root权限运行:yum ...
- 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题
去掉maven前面的work offline模式
- windows10局域网实现文件共享
1.共享文件夹设置: 磁盘文件夹,鼠标右键 选择高级共享 如图,自定义选项: 控制面板中添加新用户,一定给设置一个密码(远程登录时候用) 用户: * windows键+R * \\IP地址\目录 * ...
- 在 Azure VM 中使用应用商店映像创建 HPC Pack 群集的头节点
使用 Azure 应用商店和 Azure 门户中的 Microsoft HPC Pack 2012 R2 虚拟机映像创建 HPC 群集的头节点. 此 HPC Pack VM 映像基于预安装了 HPC ...
- 【转】Spring学习---SpringIOC容器的初始化过程
[原文]https://www.toutiao.com/i6594400249429623304/ SpringIOC容器的初始化过程 简单来说,IoC容器的初始化是由refresh()方法来启动的, ...