也许部署流程定义的方法有很多,这里选用的是用Java代码调用工作流引擎提供的部署服务API。在这之前,假设你的Eclipse已经安装好了GPD工作流画图工具,并且学会了画出最简单的HelloWorld程序。本博客中用到的最简单的jBPM HelloWorld程序如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <process name="HelloWorld" xmlns="http://jbpm.org/4.4/jpdl">
  4. <start name="start1" g="168,60,48,48">
  5. <transition name="to HelloWorld" to="HelloWorld" g="-101,-22"/>
  6. </start>
  7. <end name="end1" g="168,432,48,48"/>
  8. <state name="HelloWorld" g="138,236,92,52">
  9. <transition name="to end1" to="end1" g="-57,-22"/>
  10. </state>
  11. </process>

该流程实例的预览图如上图所示。

当然了,你需要建立一个Java工程,这个工程可以是Java SE就够了,项目的结构和引入的包如图:

我这里用的jBPM版本是4.4,所有依赖的jar如上图所示,你需要在你的src目录下配置两个xml文件。

jbpm.cfg.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <jbpm-configuration>
  4.  
  5. <import resource="jbpm.default.cfg.xml" />
  6. <import resource="jbpm.businesscalendar.cfg.xml" />
  7. <import resource="jbpm.tx.hibernate.cfg.xml" />
  8. <import resource="jbpm.jpdl.cfg.xml" />
  9. <import resource="jbpm.bpmn.cfg.xml" />
  10. <import resource="jbpm.identity.cfg.xml" />
  11.  
  12. </jbpm-configuration>

jbpm.hibernate.cfg.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5.  
  6. <hibernate-configuration>
  7. <session-factory>
  8.  
  9. <!-- 如果是MySQL,一定要使用org.hibernate.dialect.MySQL5InnoDBDialect方言 -->
  10. <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  11. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  12. <property name="hibernate.connection.url">jdbc:mysql:///jbpm4_study</property>
  13. <property name="hibernate.connection.username">root</property>
  14. <property name="hibernate.connection.password">root</property>
  15.  
  16. <property name="hibernate.hbm2ddl.auto">update</property>
  17.  
  18. <!-- 这些映射文件是JBPM的,不能删除!!! -->
  19. <mapping resource="jbpm.repository.hbm.xml" />
  20. <mapping resource="jbpm.execution.hbm.xml" />
  21. <mapping resource="jbpm.history.hbm.xml" />
  22. <mapping resource="jbpm.task.hbm.xml" />
  23. <mapping resource="jbpm.identity.hbm.xml" />
  24.  
  25. </session-factory>
  26. </hibernate-configuration>

这时候需要你子数据库中创建上述Hibernate连接的库,创建的语法如下:

  1. mysql> create database jbpm4_study;

现在编写我们的单元测试代码:

  1. package com.springchang.jbpm01;
  2.  
  3. import org.jbpm.api.Configuration;
  4. import org.jbpm.api.ProcessEngine;
  5. import org.junit.Test;
  6.  
  7. public class MyTest01 {
  8. private static ProcessEngine processEngine; //直接将流程引擎写成静态变量
  9.  
  10. //静态代码块,获取processEngine
  11. static {
  12. Configuration cfg = new Configuration();
  13. cfg.setResource("jbpm.cfg.xml");
  14. processEngine = cfg.buildProcessEngine();
  15. }
  16.  
  17. // 1,部署流程定义文档
  18. @Test
  19. public void testDeployProcessDefinition() throws Exception {
  20. processEngine.getRepositoryService() //调用processEngine提供的接口
  21. .createDeployment()
  22. .addResourceFromClasspath("com/springchang/jbpm01/HelloWorld.jpdl.xml") //加载HelloWorld.jpdl.xml文件
  23. .addResourceFromClasspath("com/springchang/jbpm01/HelloWorld.png") //加载Helloworld.png图片
  24. .deploy(); //发布流程定义
  25. }
  26. }

这时候可以运行我们的单元测试,由于是第一次加载jBPM框架,系统需要向数据库中创建表结构,所以稍微等会儿。如果你的单元测试没有报错,这时候你的数据库就应该新建了18张以JBPM4开头的表。

  1. mysql> show tables;
  2. +-----------------------+
  3. | Tables_in_jbpm4_study |
  4. +-----------------------+
  5. | JBPM4_DEPLOYMENT |
  6. | JBPM4_DEPLOYPROP |
  7. | JBPM4_EXECUTION |
  8. | JBPM4_HIST_ACTINST |
  9. | JBPM4_HIST_DETAIL |
  10. | JBPM4_HIST_PROCINST |
  11. | JBPM4_HIST_TASK |
  12. | JBPM4_HIST_VAR |
  13. | JBPM4_ID_GROUP |
  14. | JBPM4_ID_MEMBERSHIP |
  15. | JBPM4_ID_USER |
  16. | JBPM4_JOB |
  17. | JBPM4_LOB |
  18. | JBPM4_PARTICIPATION |
  19. | JBPM4_PROPERTY |
  20. | JBPM4_SWIMLANE |
  21. | JBPM4_TASK |
  22. | JBPM4_VARIABLE |
  23. +-----------------------+
  24. rows in set (0.00 sec)

当我的HelloWorld流程部署成功之后,查询JBPM4_LOB表,可以看到如下两条记录:

  1. 10002 0 (BLOB) 12.67 KB 10001 com/springchang/jbpm01/HelloWorld.png
  2. 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. Tomcat (安装及web实现 基础)

     Tomcat服务器配置 安装:解压对应的版本就行 注意;不要把Tomcat放到有中文的和有空格的目录中 验证是否安装成功:进入安装盘的安装文件的bin目录下 执行startup bat 成功  80 ...

  2. python入门基础

    Python 入门 变量 什么是变量?变量就是变化的量,核心是"变"和"量"两个字,变就是变化,量就是衡量状态. 为什么需要变量?程序执行的本质就是一系列状态的 ...

  3. netty详解之io模型

    提起IO模型首先想到的就是同步,异步,阻塞,非阻塞这几个概念.每个概念的含义,解释,概念间的区别这些都是好理解,这里深入*nix系统讲一下IO模型. 在*nix中将IO模型分为5类. Blocking ...

  4. MyBatis多租户隔离插件开发

    在SASS的大潮流下,相信依然存在很多使用一个数据库为多个租户提供服务的场景,这个情况下一般是多个租户共用同一套表通过sql语句级别来隔离不同租户的资源,比如设置一个租户标识字段,每次查询的时候在后面 ...

  5. UVA - 11082 Matrix Decompressing(最大流+行列模型)

    题目大意:给出一个R行C列的矩阵,如今给出他的前1-R行和 && 前1-C列和,问这个矩阵原来是如何的,要求每一个元素大小在1-20之间 解题思路:将每一行连接到超级源点,容量为该行的 ...

  6. iOS_4_表情排列

    终于效果图: BeyondViewController.h // // BeyondViewController.h // 04_表情排列 // // Created by beyond on 14- ...

  7. 【Android】定位与解决anr错误记录

    问题描写叙述 cocos2d-x游戏项目androidproject接入sdk.支付成功后,java代码回调lua方法.产生了anr. 怎样定位anr? watermark/2/text/aHR0cD ...

  8. webAPP踩坑记录

    最近公司突然给我们下了一个任务  一个星期要做出一个系统网站 外加手机app   2个同事负责 web开发  我负责手机app 的开发 今天终于初级版本做完了,记录一下手机app踩过的坑与优化之路 用 ...

  9. this问题

    this问题 弹出层是一种很常见的页面显示部件,利用require js的模块化可以使部分功能组件重用性更高.以弹出层为例,探讨关于this的问题 首先来看这样一段代码 Html部分代码 <bo ...

  10. sqlser 2005 使用执行计划来优化你的sql

    一:sqlserver 执行计划介绍    sqlserver 执行计是在sqlser manager studio 工具中打开,是检查一条sql执行效率的工具.建议配合SET STATISTICS ...