JBPM4.4(1)-简单工程的搭建

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 源码下载 https://anonsvn.jboss.org/repos/jbpm/jbpm4/ JBPM是什么? jBPM是一个可扩展、灵活的流程引擎, 它可以运行在独立的服务器上或者嵌入任何Java应用中。

源码下载

https://anonsvn.jboss.org/repos/jbpm/jbpm4/

JBPM是什么?

jBPM是一个可扩展、灵活的流程引擎, 它可以运行在独立的服务器上或者嵌入任何Java应用中。

使用的解析语言:JPDL

发布

只需要把jBPM (jbpm-4.X.zip) 下载下来,然后解压到你的硬盘上的什么地方。 你将看到下面的子目录:

  • doc: 用户手册,javadoc和开发指南
  • examples: 用户手册中用到的示例流程
  • install: 用于不同环境的安装脚本
  • lib: 第三方库和一些特定的jBPM依赖库
  • src: 源代码文件
  • jbpm.jar: jBPM主库归档
  • migration: 参考开发指南

必须安装的软件

jBPM需要JDK (标准java)5或更高版本。

http://java.sun.com/javase/downloads/index.jsp

为了执行ant脚本,你需要1.7.0或更高版本的apache ant:

http://ant.apache.org/bindownload.cgi

 

安装数据库

C:\jbpm-4.4\jbpm-4.4\install\src\db\create

数据库的sql文件在这个路径下可以直接导入,也可以通过ant进行更新数据库的配置。

安装插件

网上n多教程了,不截图了,按照网上其它的配置一下吧,挺全的都。

工程创建

打开eclipse新建eclipse工程

img_25d1ad154d0249610a043bd92a2e6187.jpg

完成后将examples中的几个配置文件导进来

修改jbpm.hibernate.cfg.xml

我使用的是mysql,文件中内容如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
 
  
<? 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 >

< property name ="hibernate.dialect" > org.hibernate.dialect.MySQLInnoDBDialect </ property >
< property name ="hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >
< property name ="hibernate.connection.url" > jdbc:mysql://localhost:3306/jbpmdb </ property >
< property name ="hibernate.connection.username" > jbpm </ property >
< property name ="hibernate.connection.password" > jbpm </ property >
<!-- <property name="hibernate.hbm2ddl.auto">create-drop</property> -->
<!-- <property name="hibernate.format_sql">true</property> -->

< 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 >

新建流程定义文件如下:

img_6f4aa51f4b1bdc8b403b07f92ff770a4.jpg

是一个最简单的流程

新建TestHello.java并且继承JbpmTestCase

测试程序如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
 
  
public class TestHello extends JbpmTestCase {
String deploymentId;

protected void setUp() throws Exception {
super .setUp();

deploymentId
= repositoryService.createDeployment()
.addResourceFromClasspath(
" com/jbpm/hellojbpm.jpdl.xml " )
.deploy();
}

protected void tearDown() throws Exception {
repositoryService.deleteDeploymentCascade(deploymentId);

super .tearDown();
}

public void testHello() {
ProcessInstance processInstance
= executionService
.startProcessInstanceByKey(
" hellojbpm " );

System.out.println(
" 流程实例Id: " + processInstance.getId());
System.out
.println(
" 流程定义Id: " + processInstance.getProcessDefinitionId());

// 判断当前是否位于start节点
System.out.println( " 是否位于start节点: " + processInstance.isActive( " start " ));

// 判断当前是否位于state节点
System.out.println( " 是否位于zhangsan节点: " + processInstance.isActive( " zhangsan " ));

System.out.println(
" ------------------------>使流程继续向下执行 " );

Execution executionInA
= processInstance
.findActiveExecutionIn(
" zhangsan " );
assertNotNull(executionInA);

// 判断当前是否位于state节点

processInstance
= executionService.signalExecutionById(executionInA
.getId());
Execution executionInB
= processInstance.findActiveExecutionIn( " lishi " );
assertNotNull(executionInB);

System.out.println(
" 是否位于lishi节点: " + executionInB.isActive( " lishi " ));

processInstance
= executionService.signalExecutionById(executionInB
.getId());
Execution executionInC
= processInstance
.findActiveExecutionIn(
" wangwu " );
assertNotNull(executionInC);

System.out.println(
" 是否位于wangwu节点: " + executionInC.isActive( " wangwu " ));

}

}

运行测试junit文件

结果如下:

流程实例Id:hellojbpm.220007
流程定义Id:hellojbpm-1
是否位于start节点:false
是否位于zhangsan节点:true
------------------------>使流程继续向下执行
是否位于lishi节点:true
是否位于wangwu节点:true

流程一步一步的向下执行了,在这个示例中使用了start和state结点,在后面的示例中,会逐步深入到其它的示例中。

在运行的过程中曾经遇到过一个错误

16:53:39,280 SEV | [AbstractFlushingEventListener] Could not synchronize database state with session

org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#7]

经过查找之后是hibernate的方言指定的有问题,将

org.hibernate.dialect.MySQLDialect

修改成

org.hibernate.dialect.MySQLInnoDBDialect

问题就可以解决了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
小程序 JavaScript 数据库
小程序解析富文本html内容
小程序解析富文本html内容
163 0
|
前端开发 API 数据处理
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
1766 0
|
算法 测试技术 数据安全/隐私保护
App逆向百例|14|某旅行攻略App zzzghostsigh参数分析
App逆向百例|14|某旅行攻略App zzzghostsigh参数分析
544 0
|
Dubbo Java 应用服务中间件
SpringCloud - 简单入门与项目概览
SpringCloud - 简单入门与项目概览
182 0
|
Java API C#
Cobaltstrike4.0——记一次上头的powershell上线分析(一)
Cobaltstrike4.0——记一次上头的powershell上线分析
936 0
|
监控 安全 生物认证
【Tool】资产侦察灯塔系统ARL搭建及使用
【Tool】资产侦察灯塔系统ARL搭建及使用
2803 0
|
存储 芯片
#计算机组成原理# chapter 4-存储器-4.2主存储器 4.2.1主存储器概述&&4.2.2半导体存储芯片简介
#计算机组成原理# chapter 4-存储器-4.2主存储器 4.2.1主存储器概述&&4.2.2半导体存储芯片简介
896 0
#计算机组成原理# chapter 4-存储器-4.2主存储器 4.2.1主存储器概述&&4.2.2半导体存储芯片简介
|
JSON JavaScript 数据格式
van-tabs 组件不响应了?
本文主要讲van-tabs 组件不响应的解决方案
1441 0
|
Linux Windows
双系统删除Linux进入Grub无法启动Windows的解决方案
双系统删除Linux进入Grub无法启动Windows的解决方案
|
SQL 前端开发 关系型数据库
为什么就查了一行数据,执行那么慢?
今天主要介绍一下查了一行数据,为什么慢到人发慌。剖析一下MySQL的底层运行流程!
为什么就查了一行数据,执行那么慢?