package com.nantian.jbpm.utils;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.junit.Before;
public class BaseJbpm {
public static ProcessEngine processEngine;
@Before
public void testBase(){
this.processEngine = Configuration.getProcessEngine();
}
}
package com.nantian.jbpm.pd;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipInputStream;
import org.jbpm.api.Deployment;
import org.jbpm.api.ProcessDefinition;
import org.junit.Test;
import com.nantian.jbpm.utils.BaseJbpm;
/**
* 流程定义管理
* * 流程定义
* * 把流程定义文档部署到jbpm中
* * 查询
* * 查询流程部署
* * 查询所有的流程部署
* * 根据部署ID查询流程部署
* * 查询流程定义
* * 查询所有的流程定义
* * 根据deploymentID查询流程定义
* * 根据pdid查询流程定义
* * 根据pdkey查询流程定义
* * 删除
* * 查看流程图
* @author Administrator
*
*/
public class PDManager extends BaseJbpm{
/**
* 涉及到的表
* * JBPM4_DEPLOYMENT
* * 部署表,用来描述一次部署
* * 字段说明
* DBID_: 主键、部署ID
* STATE: 状态 active
* * JBPM4_LOB
* * 仓库表 存放了流程定义文档(xml,png)
* * 字段说明
* DEPLOYMENT_:部署ID 外键
* NAME_: xml或者png的文件路径
* * JBPM4_DEPLOYPROP
* * 部署属性表
* * 字段
* DBID_:主键
* OBJNAME_:流程定义名称
* KEY_:
* * 每部署一次,生成4行记录
* langid 语言版本 jpdl-4.4
* pdid {pdkey-version}
* pdkey 流程定义名称
* 一般情况下,pdkey和objname_的值是一样的
* pdversion 版本号
* 如果pdkey没有发生改变,每部署一次,版本号加1
* 如果pdkey发生改变,则是一个全新的名称,所以版本号应该从1开始计算
*/
/**
* 从classpath加载
*/
@Test
public void testDeployFromClasspath(){
//RepositoryService repositoryService = processEngine.getRepositoryService();
//NewDeployment newDeployment = repositoryService.createDeployment();
//newDeployment.addResourceFromClasspath("");
//newDeployment.addResourceFromClasspath("");
//newDeployment.deploy();
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("qingjia.jpdl.xml")
.addResourceFromClasspath("qingjia.png")
.deploy();
}
/**
* 从inputstream加载
*/
@Test
public void testDeployFromInputStream(){
//this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml")获得classpath路径(src)
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromInputStream("qingjia.jpdl.xml", inputStream)
.deploy();
}
/**
* 从zipinoutStream加载
*/
@Test
public void testDeployFromZipinputStream(){
InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
processEngine.getRepositoryService()
.createDeployment()
.addResourcesFromZipInputStream(zipInputStream)
.deploy();
}
/**
* 查询所有的部署
*/
@Test
public void testQueryAllDeploy(){
List<Deployment> deploymentList = processEngine.getRepositoryService()
.createDeploymentQuery()
.list();
for(Deployment deployment:deploymentList){
System.out.print(deployment.getId());
System.out.print(" ");
System.out.println(deployment.getState());
}
}
/**
* 根据部署ID查询部署
*/
@Test
public void testQueryDeployByID(){
Deployment deployment = processEngine.getRepositoryService()
.createDeploymentQuery()
.deploymentId("10001")
.uniqueResult();
System.out.print(deployment.getId());
System.out.print(" ");
System.out.println(deployment.getState());
}
/**
* 查询所有的流程定义
*/
@Test
public void testQueryAllPD(){
List<ProcessDefinition> pdList = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.list();
for(ProcessDefinition pd:pdList){
System.out.print("deploymentId:"+pd.getDeploymentId()+",");
System.out.print("imageURL:"+pd.getImageResourceName()+",");
System.out.print("key:"+pd.getKey()+",");
System.out.println("version:"+pd.getVersion());
}
}
/**
* 根据部署ID查询流程定义
*/
@Test
public void testQueryPDByDeploymentId(){
ProcessDefinition pd = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.deploymentId("30001")
.uniqueResult();
System.out.print("deploymentId:"+pd.getDeploymentId()+",");
System.out.print("imageURL:"+pd.getImageResourceName()+",");
System.out.print("key:"+pd.getKey()+",");
System.out.println("version:"+pd.getVersion());
}
/**
* 根据PDID查询流程定义
*/
@Test
public void testQueryPDByPDID(){
ProcessDefinition pd = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.processDefinitionId("qingjia-2")
.uniqueResult();
System.out.print("deploymentId:"+pd.getDeploymentId()+",");
System.out.print("imageURL:"+pd.getImageResourceName()+",");
System.out.print("key:"+pd.getKey()+",");
System.out.println("version:"+pd.getVersion());
}
/**
* 根据pdkey查询流程定义
*/
@Test
public void testQueryPDByPDKEY(){
List<ProcessDefinition> pdList = processEngine
.getRepositoryService()
.createProcessDefinitionQuery()
.processDefinitionKey("qingjia")
.list();
for(ProcessDefinition pd:pdList){
System.out.print("deploymentId:"+pd.getDeploymentId()+",");
System.out.print("imageURL:"+pd.getImageResourceName()+",");
System.out.print("key:"+pd.getKey()+",");
System.out.println("version:"+pd.getVersion());
}
}
/**
* 删除
* 只能直接删除流程部署
* 而没有提供删除流程定义的API
*/
@Test
public void testDeleteDeployment(){
processEngine.getRepositoryService()
.deleteDeploymentCascade("10001");
}
/**
* 根据key得到所有的流程定义,然后遍历每一个流程定义,得到流程部署,然后依次删除
*/
/**
* 查询流程图
*/
@Test
public void testShowImage() throws Exception{
InputStream inputStream = processEngine.getRepositoryService()
.getResourceAsStream("20001", "qingjia.png");
OutputStream outputStream = new FileOutputStream("c:/processimg.png");
for(int b=-1;(b=inputStream.read())!=-1;){
outputStream.write(b);
}
inputStream.close();
outputStream.close();
}
}
相关推荐
1. 设计并部署流程定义:使用jbpm提供的工具(如jbpm-designer)创建流程图,然后将流程部署到jbpm引擎。 2. 启动流程实例:根据部署的流程定义,启动一个实例,并分配初始的参与者或任务。 3. 实时更新状态:当流程...
JBPM插件允许用户通过图形化界面来设计流程图,这些流程图可以转化为可执行的流程定义,方便理解和管理复杂的业务逻辑。 在提供的压缩包"eclipse3.4解压版带jbpm流程定义插件"中,用户无需安装,仅需解压即可开始...
流程图的设计完成后,可以编译成jpdl文件,然后在jbpm引擎中部署,以便执行和跟踪。 流程图的每个组成部分都有其特定的意义: 1. **开始事件**:流程的起点,标记流程的启动。 2. **任务**:代表业务操作,可以是...
JBPM(Java Business Process Management)是一款开源的工作流管理系统,它为业务流程的建模、部署、执行和监控提供了全面的解决方案。JBPM流程引擎设计是IT领域中的一个重要知识点,尤其对于那些希望理解和实施企业...
1. **图形化界面**:它使用BPMN 2.0(Business Process Model and Notation)标准,提供了一个拖放式的用户界面,使得用户可以通过拖拽不同的活动节点(如任务、决策、事件等)来创建流程图。BPMN是一种国际标准,...
jbpm提供了一个web-based的监控台,可以实时查看流程实例的状态、跟踪流程的执行路径,以及进行任务管理和审计。通过监控台,管理员可以对整个请假流程进行有效的控制和优化。 六、开发和扩展 对于开发者来说,jbpm...
5. **监控和管理**:jbpm提供了一个Web管理控制台,用于监控流程实例的状态、查看流程图、跟踪历史记录等。这有助于分析流程执行情况,优化流程设计。 6. **集成能力**:jbpm能够与其他系统如CRM、ERP集成,实现跨...
通过BPMN,开发者可以清晰地定义流程中的各个活动、决策点、并行分支等,并且这些流程定义可以被JBPM执行引擎理解和执行。 在API方面,JBPM提供了丰富的Java接口和类,例如: 1. `ProcessEngine`:这是与JBPM交互...
本主题将详细介绍如何将jbpm流程图显示在JSP(JavaServer Pages)页面上,这涉及到jbpm的图像标签库(taglib)和`web.xml`配置文件的使用。 首先,jbpm提供的图像标签库允许开发者在JSP页面中直接嵌入流程图。`jbpm...
1. **BPMN元素理解**:包括活动(Activity)、事件(Event)、网关(Gateway)、任务(Task)、泳道(Lane)等,这些都是构建流程图的基本单元,理解它们的功能和用法是创建有效流程定义的基础。 2. **流程定义文件...
- **流程定义与部署**:使用BPMN 2.0进行流程设计,并将流程模型部署到JBPM服务器。 - **流程执行**:启动流程实例,根据流程定义执行任务。 - **任务管理**:分配、领取、完成任务,支持任务查询和过滤。 - **...
利用Eclipse流程插件,你可以通过拖放方式设计流程图。插件提供丰富的活动节点,如用户任务、服务任务、子流程等,以及控制流程流向的网关和事件。设计过程中,可以实时预览流程的运行状态,提高设计效率。 **6. ...
jBPM2 版本中,流程图和JBPM API 是核心组成部分,帮助开发者实现复杂的业务流程自动化。 ### 1. jBPM-jBDL 相关概念 jBPM-jBDL(jBPM Business Definition Language)是一种用来定义业务流程的语言,基于有向图...
jbpm的核心库可以通过Maven或Gradle添加到项目依赖中,然后在代码中调用API来启动、控制和查询流程实例。 4. **流程实例创建与执行**: 使用jbpm提供的Workbench,你可以部署流程定义并创建流程实例。在代码中,...
在深入理解jbpm的实现流程图之前,我们需要了解两个基础概念:流程定义和流程执行。 一、流程定义的基本概念: 流程定义是业务流程管理的核心部分,它是指将业务流程以图形化的方式进行描述。在jbpm中,流程定义...
1. **BPMN 2.0简介**:解释BPMN符号和元素,如活动(任务)、事件、网关、数据对象等,以及它们如何组合成流程图。 2. **jBPM工作台**:介绍jBPM提供的图形化工具,如jbpm-workbench,用于设计和编辑BPMN流程定义,...
本套教学视频重点聚焦于流程图跟踪,旨在帮助学习者深入理解如何在jBPM中监控和管理流程实例的执行情况。以下是关于jBPM和工作流管理系统的详细介绍,以及视频教程可能涵盖的关键知识点: 1. **jBPM基本概念** - ...
JBPM4.4是JBoss Business Process Management (BPM)平台的一个版本,它是一个开源的企业级BPM解决方案,用于设计、执行和管理业务流程。在这个完整的审批流程工程中,我们看到它采用Maven进行项目构建和依赖管理,...