也许部署流程定义的方法有很多,这里选用的是用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学习之部署流程定义的更多相关文章

  1. Activiti 部署流程定义及相关的表(classpath部署、zip部署)

    package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...

  2. activiti自定义流程之整合(四):整合自定义表单部署流程定义

    综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功. 正因为如此,在创建了流程模型之 ...

  3. activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring ...

  4. activiti自己定义流程之整合(四):整合自己定义表单部署流程定义

    综合前几篇博文内容.我想在整合这一部分中应该会有非常多模块会跳过不讲,就如自己定义表单的表单列表那一块,由于这些模块在整合的过程中都差点儿没有什么修改,再多讲也是反复无用功. 正由于如此,在创建了流程 ...

  5. activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码

    activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...

  6. activiti基础--1------------------------生成.bpmn和.png以及部署流程定义

    helloworld.dbmn <?xml version="1.0" encoding="UTF-8"?> <definitions xml ...

  7. activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建         (2)创建流程模型:activiti自己定义流程之Spr ...

  8. jbpm部署流程定义到MySql报乱码解决方案

    问题起因: 我在使用ant将流程定义和流程相关资源部署到JBPM数据库中的时候,报了下面一个错误. 错误提示,大概是: 11:33:40,781 ERROR JDBCExceptionReporter ...

  9. JBPM学习(五):流程变量

    1.启动流程实例 // 启动流程实例 @Test public void startProcessInstance() { // 使用指定key的最新版本的流程定义启动流程实例 ProcessInst ...

随机推荐

  1. 好好写代码吧,没事别瞎B去创业!

    知乎上看到这个问题 正好最近想写篇关于此的文章,于是就回答了一波. 也贴到这里来,回答如下 : 本问题简直为我量身定制,做为一个正在创业中的苦逼少年,说说我是如何从鼓吹怂恿身边人创业转换成反对创业的. ...

  2. form表单提交和ajax提交优先级

    form中若定义action,那么,ajax将不能执行.form默认提交的请求优先级高于ajax

  3. 简单了解Markdown

    在Github的readme.md文件的编辑中,開始渐渐的接触Markdown.如今简单系统叙述一下Markdown的语法. Markdown是一种能够使用普通文本编辑器编写的标记语言.通过类似HTM ...

  4. swift手记-4

    // // ViewController.swift // learn4 // // Created by myhaspl on 16/1/23. // Copyright (c) 2016年 myh ...

  5. Android View动画效果—透明效果,旋转效果(二)

    一:动画效果 方法一:动画效果用AlphaAnimation类.直接加入 AlphaAnimation aa = new AlphaAnimation(0,1); //设置透明度 aa.setDura ...

  6. 关于在Windows下Composer下载安装Yii2.0

    先是composer的安装,主要有两个方式,一个直接下载安装包安装,Composer-steup.exe文件,第二种直接下载composer.phar文件,用php去运行这个文件可以一样起到作用,之后 ...

  7. mac与centos下redis的安装与配置

    前言 最近在用redis,下面简单写一下mac和centos下redis的安装与配置方法. 安装 mac下面 安装命令:brew intall redis 运行命令:brew services sta ...

  8. Parcel:常见技术栈的集成方式

    前言 Parcel 是什么 Parcel 是一个前端构建工具,Parcel 官网 将它定义为极速零配置的Web应用打包工具.没错,又是一个构建工具,你一定会想,为什么前端的构建工具层出不穷,搞那么多工 ...

  9. DeepLearning.ai学习笔记(三)结构化机器学习项目--week1 机器学习策略

    一.为什么是ML策略 如上图示,假如我们在构建一个喵咪分类器,数据集就是上面几个图,训练之后准确率达到90%.虽然看起来挺高的,但是这显然并不具一般性,因为数据集太少了.那么此时可以想到的ML策略有哪 ...

  10. Linux 运行级别

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/47 运行级别 不同运行级别的描述 运行级别0:系统停机状态,系统 ...