jBPM学习之部署流程定义
也许部署流程定义的方法有很多,这里选用的是用Java代码调用工作流引擎提供的部署服务API。在这之前,假设你的Eclipse已经安装好了GPD工作流画图工具,并且学会了画出最简单的HelloWorld程序。本博客中用到的最简单的jBPM HelloWorld程序如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="HelloWorld" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="168,60,48,48">
<transition name="to HelloWorld" to="HelloWorld" g="-101,-22"/>
</start>
<end name="end1" g="168,432,48,48"/>
<state name="HelloWorld" g="138,236,92,52">
<transition name="to end1" to="end1" g="-57,-22"/>
</state>
</process>

该流程实例的预览图如上图所示。
当然了,你需要建立一个Java工程,这个工程可以是Java SE就够了,项目的结构和引入的包如图:

我这里用的jBPM版本是4.4,所有依赖的jar如上图所示,你需要在你的src目录下配置两个xml文件。
jbpm.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource="jbpm.default.cfg.xml" /> <import resource="jbpm.businesscalendar.cfg.xml" /> <import resource="jbpm.tx.hibernate.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.bpmn.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> </jbpm-configuration>
jbpm.hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 如果是MySQL,一定要使用org.hibernate.dialect.MySQL5InnoDBDialect方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///jbpm4_study</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 这些映射文件是JBPM的,不能删除!!! -->
<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.identity.hbm.xml" />
</session-factory>
</hibernate-configuration>
这时候需要你子数据库中创建上述Hibernate连接的库,创建的语法如下:
mysql> create database jbpm4_study;
现在编写我们的单元测试代码:
package com.springchang.jbpm01;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.junit.Test;
public class MyTest01 {
private static ProcessEngine processEngine; //直接将流程引擎写成静态变量
//静态代码块,获取processEngine
static {
Configuration cfg = new Configuration();
cfg.setResource("jbpm.cfg.xml");
processEngine = cfg.buildProcessEngine();
}
// 1,部署流程定义文档
@Test
public void testDeployProcessDefinition() throws Exception {
processEngine.getRepositoryService() //调用processEngine提供的接口
.createDeployment()
.addResourceFromClasspath("com/springchang/jbpm01/HelloWorld.jpdl.xml") //加载HelloWorld.jpdl.xml文件
.addResourceFromClasspath("com/springchang/jbpm01/HelloWorld.png") //加载Helloworld.png图片
.deploy(); //发布流程定义
}
}
这时候可以运行我们的单元测试,由于是第一次加载jBPM框架,系统需要向数据库中创建表结构,所以稍微等会儿。如果你的单元测试没有报错,这时候你的数据库就应该新建了18张以JBPM4开头的表。
mysql> show tables; +-----------------------+ | Tables_in_jbpm4_study | +-----------------------+ | JBPM4_DEPLOYMENT | | JBPM4_DEPLOYPROP | | JBPM4_EXECUTION | | JBPM4_HIST_ACTINST | | JBPM4_HIST_DETAIL | | JBPM4_HIST_PROCINST | | JBPM4_HIST_TASK | | JBPM4_HIST_VAR | | JBPM4_ID_GROUP | | JBPM4_ID_MEMBERSHIP | | JBPM4_ID_USER | | JBPM4_JOB | | JBPM4_LOB | | JBPM4_PARTICIPATION | | JBPM4_PROPERTY | | JBPM4_SWIMLANE | | JBPM4_TASK | | JBPM4_VARIABLE | +-----------------------+ rows in set (0.00 sec)
当我的HelloWorld流程部署成功之后,查询JBPM4_LOB表,可以看到如下两条记录:
10002 0 (BLOB) 12.67 KB 10001 com/springchang/jbpm01/HelloWorld.png 10003 0 (BLOB) 391 bytes 10001 com/springchang/jbpm01/HelloWorld.jpdl.xml
jBPM学习之部署流程定义的更多相关文章
- Activiti 部署流程定义及相关的表(classpath部署、zip部署)
package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...
- activiti自定义流程之整合(四):整合自定义表单部署流程定义
综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功. 正因为如此,在创建了流程模型之 ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自己定义流程之整合(四):整合自己定义表单部署流程定义
综合前几篇博文内容.我想在整合这一部分中应该会有非常多模块会跳过不讲,就如自己定义表单的表单列表那一块,由于这些模块在整合的过程中都差点儿没有什么修改,再多讲也是反复无用功. 正由于如此,在创建了流程 ...
- activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码
activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...
- activiti基础--1------------------------生成.bpmn和.png以及部署流程定义
helloworld.dbmn <?xml version="1.0" encoding="UTF-8"?> <definitions xml ...
- activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自己定义流程之Spr ...
- jbpm部署流程定义到MySql报乱码解决方案
问题起因: 我在使用ant将流程定义和流程相关资源部署到JBPM数据库中的时候,报了下面一个错误. 错误提示,大概是: 11:33:40,781 ERROR JDBCExceptionReporter ...
- JBPM学习(五):流程变量
1.启动流程实例 // 启动流程实例 @Test public void startProcessInstance() { // 使用指定key的最新版本的流程定义启动流程实例 ProcessInst ...
随机推荐
- Java代码操作SVN
package com.leadbank.oprPlatform.util;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import ...
- Material使用03 MdCardModule模块、MdInputModule模块
需求:先需要增加一个登录模块 1 创建登录模块 ng g m testLogin 1.1 将共享模块导入到登录模块中 import { NgModule } from '@angular/core'; ...
- RobotFramework自动化测试框架-移动手机自动化测试Element Attribute Should Match关键字的使用
Element Attribute Should Match 关键字用来判断元素的属性值是否和预期值匹配,该关键字接收四个参数[ locator | attr_name | match_pattern ...
- 《Linux Device Drivers》第十八章 TTY驱动程序——note
简单介绍 tty设备的名称是从过去的电传打字机缩写而来,最初是指连接到Unix系统上的物理或虚拟终端 Linux tty驱动程序的核心紧挨在标准字符设备驱动层之下,并提供了一系列的功能,作为接口被终端 ...
- 【回文】leetcode - Shortest Palindrome
题目: Shortest Palindrome Given a string S, you are allowed to convert it to a palindrome by adding ch ...
- hdu 4109 dfs+剪枝优化
求最久时间即在无环有向图里求最远路径 dfs+剪枝优化 从0节点(自己添加的)出发,0到1~n个节点之间的距离为1.mt[i]表示从0点到第i个节点眼下所得的最长路径 #include<iost ...
- 询问Spring Bott和高并发框架两个问题
这里我问两个问题,请大神告诉我. 第一个问题,如果我想用Spring Boot开发企业级的微服务,我该看哪些资料?比如数据库该如何配置?消息中间件该怎么设置?等等.或者可以推荐给我几本这方面的书. 第 ...
- 「mysql优化专题」什么是慢查询?如何通过慢查询日志优化?(10)
日志就跟人们写的日记一样,记录着过往的事情.但是人的日记是主观的(记自己想记的内容),而数据库的日志是客观的,根据记录内容分为以下好几种日志(技术文): a.错误日志:记录启动.运行或停止mysqld ...
- 「mysql优化专题」优化之路高级进阶——表的设计及优化(6)
正文:表的设计及优化(真技术文) 优化①:创建规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表,范式产生于2 ...
- 5.python函数
一.递归函数 如果一个函数在内部调用自身,那么这个函数就叫做递归函数. 1. 必须有一个明确的结束条件: 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少: 3.递归效率不高,递归层次过 ...