理解JBPM(java Business Process Management)的基本概念:
jPDL - JBPM Process Definition Language
JBPM简要过程:
1、定义流程(利用JPDL)
2、部署流程(部署到数据库)
3、创建公文并与流程实例绑定
4、可通过JBPM的接口,触发流程向下流动
5、可通过JBPM的接口,获得流动到某个用户那里的文档(即待处理任务列表)
6、可通过JBPM的接口,结束某个用户的任务(这将触发流程继续向下流动)
7、如此,直到结束
----------------------------------------------
测试:
1、安装JBPM
- 引入Hibernate依赖包
- 引入JBPM依赖包
* bsh.jar
* jcr-1.0.jar
* jbpm-identity.jar
* jbpm-jpdl.jar
- 引入数据库驱动
* mysql-connector-java-3.1.13-bin.jar
2、定义相关配置文件
- Hibernate配置文件
* 提供hibernate配置文件(可以从config/目录下拷贝,并修改其中的数据库连接设置即可)
3、假设现在有一个公文,需要经过:张三、李四、王五的审批之后才能结束
4、我们定义一个Document对象,及其hibernate映射,并将修改hibernate配置文件,将映射添加到其配置中(以便创建相应的数据库表)
Document对象定义如下:
public class Document {
private int id;
private String title;
private String content;
private String creator;
private Long processIntanceId;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title
* the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the content
*/
public String getContent() {
return content;
}
/**
* @param content
* the content to set
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return the creator
*/
public String getCreator() {
return creator;
}
/**
* @param creator
* the creator to set
*/
public void setCreator(String creator) {
this.creator = creator;
}
/**
* @return the processIntanceId
*/
public Long getProcessIntanceId() {
return processIntanceId;
}
/**
* @param processIntanceId
* the processIntanceId to set
*/
public void setProcessIntanceId(Long processIntanceId) {
this.processIntanceId = processIntanceId;
}
}
对应的hibernate配置文件如下:
<hibernate-mapping>
<class table="T_Document" name="org.darkness.jbpmtest.Document">
<id name="id">
<generator class="native"/>
</id>
<property name="title"/>
<property name="content"/>
<property name="creator"/>
<property name="processIntanceId"/>
</class>
</hibernate-mapping>
5、现在让我们来测试一下:
- 创建数据库表: JbpmConfiguration.getInstance().createSchema();
- 定义流程: process.xml
<?xml version="1.0" encoding="UTF-8"?>
<process-definition name="文档测试流程">
<start-state name="开始">
<transition name="提交张三审批" to="张三审批" />
</start-state>
<task-node name="张三审批">
<task name="审批1">
<assignment actor-id="张三" />
</task>
<transition name="提交李四审批" to="李四审批" />
</task-node>
<task-node name="李四审批">
<task name="审批2">
<assignment actor-id="李四" />
</task>
<transition name="提交王五审批" to="王五审批" />
</task-node>
<task-node name="王五审批">
<task name="审批3">
<assignment actor-id="王五" />
</task>
<transition name="结束流程" to="结束" />
</task-node>
<end-state name="结束" />
</process-definition>
- 部署流程:
JbpmConfiguration jbpmConfiguration = JbpmConfiguration
.getInstance();// 创建jbpmConfiguration对象
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlResource("process.xml");// 读取流程定义文件,创建processdefinition对象
// context对象类似于hibernate session对象的功能
JbpmContext context = jbpmConfiguration.createJbpmContext();// 创建jbpmContext对象
try {
context.deployProcessDefinition(processDefinition);// 部署流程到数据库
} finally {
// context对象需要关闭
context.close();// 关闭context对象
}
- 创建公文
Session session = HibernateUtils.getSession();
try {
session.beginTransaction();
Document doc = new Document();
doc.setTitle("测试公文");
doc.setContent("测试公文的内容");
doc.setCreator("赵一");
session.save(doc);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
- 将公文与流程绑定(即需要创建流程实例)
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());// 将JBPM与程序中的session绑定
// 从数据库中加载ProcessDefinition对象
ProcessDefinition definition = context.getGraphSession()
.findLatestProcessDefinition("文档测试流程");
// 从流程中创建一个流程实例
ProcessInstance processInstance = new ProcessInstance(definition);
// 存储流程实例
context.save(processInstance);
// 加载公文
Document doc = (Document) context.getSession().load(Document.class, 1);
// 绑定流程实例到公文
doc.setProcessIntanceId(processInstance.getId());
// 绑定公文到流程实例(ContextInstance相当于一个变量的容器)
processInstance.getContextInstance().createVariable("document",
doc.getId());
context.close();
* context.getGraphSession().findLatestProcessDefinition("流程名称");
- 公文创建者提交公文
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document) context.getSession().load(Document.class, 1);// 加载公文信息
ProcessInstance processInstance = context.getProcessInstance(doc
.getProcessIntanceId());// 即根据流程实例ID加载流程实例
// 触发流程往下走(即到达第一个节点)
processInstance.getRootToken().signal();
context.close();
- 这时候,我们可以测试一下,看看流程当前所处的节点
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document) context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc
.getProcessIntanceId());
// 当前节点?第一个节点对应的用户登录,应该能够查询到其当前的任务(有公文等待其审批)
System.err.println(processInstance.getRootToken().getNode().getName());
context.close();
查找某个人的任务列表:
List tasks = context.getTaskMgmtSession().findTaskInstances("张三");// 查找张三的任务列表,列表元素是TaskInstance实例
taskInstance.getProcessInstance().getContextInstance().getVariable("document");
通过:可以找到其绑定的公文ID
- 查找到当前的任务对应的公文之后,即可对其审批,并继续往下走
taskInstance.end();
- 如此,直到结束
processInstance.hasEnded()
- 如果流程已经到达终点,本调用将返回true
分享到:
相关推荐
### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)成为了企业提升效率、优化流程的关键技术之一。BPM 提供了一种程序...
斯坦福特jbpm入门资料,内容不错,由浅入深,系统讲解了jbpm,是不错的入门资料噢
jbpm入门例子收藏 jBPM(Java Business Process Management)是一个开源的工作流管理系统,由JBoss组织开发。它主要用于管理业务流程,支持流程定义、执行、监控和优化。jBPM提供了一整套工具,包括Eclipse插件,...
在jbpm入门过程中,首先需要理解的是它的核心概念: 1. **流程定义**:jbpm使用BPMN 2.0(Business Process Model and Notation)标准来定义流程。BPMN是一种图形化的语言,用于描述业务流程的逻辑,包括开始事件、...
**jbpm入门实践** jbpm 是一款开源的工作流管理系统,主要用于设计、执行和管理业务流程。本文主要针对jbpm 5.2版本进行入门实践,适合初级用户学习。首先,我们要进行必要的安装与配置。 **一、jbpm的准备工作** ...
首先,"jBPM 开发入门指南"提供了一个系统性的引导,涵盖了jBPM的基本概念、安装配置、工作流设计、任务管理和事件处理等内容。它通常会讲解如何创建第一个流程定义,以及如何使用jBPM提供的工具进行流程建模。通过...
jBPM,全称Java Business Process Management,是一个由JBoss组织开发的开源工作流管理系统,主要负责业务流程的建模、执行和管理。它提供了一套完整的工具链,包括Eclipse插件,使得开发者能够方便地设计、部署和...
【jbpm的入门1--简单实例】 jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了完整的业务流程管理解决方案,包括流程设计、执行、监控和优化。本实例将带你初探jbpm的世界,通过一个...
《jbpm开发入门指南》和《jbpm开发指南》是两本针对jbpm框架的重要参考资料,对于初学者和有经验的开发者来说都是宝贵的资源。它们通常会涵盖以下核心知识点: 1. **jbpm概述**:介绍jbpm的基本概念,包括它的工作...
三、jbpm入门示例 在这个"myjbpm"压缩包中,你可能找到了一个简单的jbpm流程示例,通常包括以下组成部分: 1. 流程定义文件(.bpmn20.xml):用BPMN 2.0标准定义的流程图,描述了流程的任务和流转规则。 2. 图形文件...
本资源是oa办公自动化中工作流的插件,使用比较方面
jbpm入门** jbpm的入门学习通常从理解其核心概念开始,如流程定义(Process Definition)、任务(Task)、事件(Event)和工作流实例(Process Instance)。流程定义使用BPMN语言编写,通过jbpm提供的图形化编辑器...
### jBPM入门教程知识点详解 #### 一、jBPM简介与理解 - **jBPM**(**j**ava **B**usiness **P**rocess **M**odeling)是一个开源的工作流引擎,用于自动化业务流程。它不仅提供了一个灵活的流程执行引擎,还支持...
二、jbPM入门 1. **安装与配置**: 首先,你需要下载jbPM的最新版本并进行安装。通常,这包括获取jbPM工具集,如jbPM Workbench,用于图形化设计流程,以及jbPM服务仓库,用于运行流程实例。 2. **环境准备**: 为了...
**JBPM4.4入门开发实例** JBPM(Java Business Process Management)是一个开源的工作流程管理系统,专注于业务流程的建模、执行和监控。版本4.4是JBPM的一个早期版本,尽管现在已经有更新的版本,但这个入门实例...
JBPM4.4 小例子,入门级别,下载后请修改jbpm.hibernate.cfg.xml数据库配置文件,运行http://localhost:port/workflowOfHoliday/leave?zzg=deploy,希望对大家有用
**jbpm入门示例** 1. **安装与配置**:首先,你需要下载jbpm的最新版本并解压,然后配置相关的环境变量,如JAVA_HOME和JBOSS_HOME。同时,确保Maven或Gradle已安装,用于构建jbpm项目。 2. **创建第一个流程**:...
**jbpm入门第二步——流程设计器的安装** 在IT领域,`jbpm`(Java Business Process Management)是一款流行的工作流管理系统,它允许开发者设计、执行和管理业务流程。本篇将详细讲解如何安装并使用jbpm的流程设计...
1.2 jBPM入门套件 入门套件提供了一个完整的开发环境,包括预配置的Jboss应用服务器、图形化流程设计工具(eclipse插件)、数据库兼容包、核心jBPM组件以及BPEL扩展参考。预配置的服务器集成了核心jBPM服务、集成...