- 浏览: 103685 次
- 性别:
- 来自: 南京
文章分类
最新评论
7 jBPM 的客户端开发
有了前面的 HelloWorld 后台流程,我们就要开始客户端程序了。正如前面提到的,本文不写 JSP ,而改采用 JUnit 的形式,输出则用 System.out.println 。举一反三,知道在方法中输入及用 println 输出,在 JSP 和 SWING 等 GUI 界面还不是一样嘛。
这个 JUnit 客户端,我们就借用创建项目时自动生成的 SimpleProcessTest.java 了,改写后如下:
packagecom.sample;
importjunit.framework.TestCase;
importorg.jbpm.JbpmConfiguration;
importorg.jbpm.JbpmContext;
importorg.jbpm.context.exe.ContextInstance;
importorg.jbpm.graph.def.ProcessDefinition;
importorg.jbpm.graph.exe.ProcessInstance;
publicclassSimpleProcessTestextendsTestCase{
privateJbpmConfigurationconfig=JbpmConfiguration.getInstance();
privateJbpmContextctx=config.createJbpmContext();
//helloworld对应于jbpm_processdefinition表的name字段值,也即processdefinition.xml的name
//这个值得取比较耗时,实际项目里最好和“数据库的JDBC连接”一样,让它共享,不要频繁打开关闭。
privateProcessDefinitionprocessDefinition=ctx.getGraphSession().findLatestProcessDefinition("helloworld");
publicvoidtestNewRequest(){
longid=newRequest();
System.out.println("id="+id);
checkNewRequest(id);
confirmRequest(id);
checkconfirmRequest(id);
ctx.close();//关闭jbpm容器
}
/**
*创建一个请假单
*
*@return
*/
privatelongnewRequest(){
//创建一个新流程
ProcessInstancepi=processDefinition.createProcessInstance();
//取得流程的数据环境
ContextInstanceci=pi.getContextInstance();
//创建一张请假单
ci.setVariable("name","陈刚www.chengang.com.cn");
ci.setVariable("day",2);
assertEquals(null,ci.getVariable("note"));
//请假申请结束,转到下一个流程结点
pi.signal();
returnpi.getId();
}
/**
*检查请假单的数据
*
*@paramid
*/
privatevoidcheckNewRequest(longid){
//从数据库提取原流程
ProcessInstancepi=ctx.loadProcessInstance(id);
//取得流程的数据环境
ContextInstanceci=pi.getContextInstance();
//创建一张请假单
assertEquals("陈刚www.chengang.com.cn",ci.getVariable("name"));
assertEquals(Integer.valueOf(2),ci.getVariable("day"));
assertEquals("我要请假",ci.getVariable("note"));
//当前是结点为confirm
assertEquals(pi.getRootToken().getNode().getName(),"confirm");
//流程还没结束
assertFalse(pi.hasEnded());
}
/**
*审批陈刚的请假申请
*
*@paramid
*/
privatevoidconfirmRequest(longid){
ProcessInstancepi=ctx.loadProcessInstance(id);
ContextInstanceci=pi.getContextInstance();
//不通过
ci.setVariable("note","不准请假,继续加班");
//审批结束,到下一个流程结点
pi.signal();
}
privatevoidcheckConfirmRequest(longid){
ProcessInstancepi=ctx.loadProcessInstance(id);
ContextInstanceci=pi.getContextInstance();
//ConfirmAction类在signal后执行,所以覆盖了经理的审批意见
assertEquals("准假",ci.getVariable("note"));
//当前是结点为end
assertEquals(pi.getRootToken().getNode().getName(),"end");
//流程结束了
assertTrue(pi.hasEnded());
}
}
importjunit.framework.TestCase;
importorg.jbpm.JbpmConfiguration;
importorg.jbpm.JbpmContext;
importorg.jbpm.context.exe.ContextInstance;
importorg.jbpm.graph.def.ProcessDefinition;
importorg.jbpm.graph.exe.ProcessInstance;
publicclassSimpleProcessTestextendsTestCase{
privateJbpmConfigurationconfig=JbpmConfiguration.getInstance();
privateJbpmContextctx=config.createJbpmContext();
//helloworld对应于jbpm_processdefinition表的name字段值,也即processdefinition.xml的name
//这个值得取比较耗时,实际项目里最好和“数据库的JDBC连接”一样,让它共享,不要频繁打开关闭。
privateProcessDefinitionprocessDefinition=ctx.getGraphSession().findLatestProcessDefinition("helloworld");
publicvoidtestNewRequest(){
longid=newRequest();
System.out.println("id="+id);
checkNewRequest(id);
confirmRequest(id);
checkconfirmRequest(id);
ctx.close();//关闭jbpm容器
}
/**
*创建一个请假单
*
*@return
*/
privatelongnewRequest(){
//创建一个新流程
ProcessInstancepi=processDefinition.createProcessInstance();
//取得流程的数据环境
ContextInstanceci=pi.getContextInstance();
//创建一张请假单
ci.setVariable("name","陈刚www.chengang.com.cn");
ci.setVariable("day",2);
assertEquals(null,ci.getVariable("note"));
//请假申请结束,转到下一个流程结点
pi.signal();
returnpi.getId();
}
/**
*检查请假单的数据
*
*@paramid
*/
privatevoidcheckNewRequest(longid){
//从数据库提取原流程
ProcessInstancepi=ctx.loadProcessInstance(id);
//取得流程的数据环境
ContextInstanceci=pi.getContextInstance();
//创建一张请假单
assertEquals("陈刚www.chengang.com.cn",ci.getVariable("name"));
assertEquals(Integer.valueOf(2),ci.getVariable("day"));
assertEquals("我要请假",ci.getVariable("note"));
//当前是结点为confirm
assertEquals(pi.getRootToken().getNode().getName(),"confirm");
//流程还没结束
assertFalse(pi.hasEnded());
}
/**
*审批陈刚的请假申请
*
*@paramid
*/
privatevoidconfirmRequest(longid){
ProcessInstancepi=ctx.loadProcessInstance(id);
ContextInstanceci=pi.getContextInstance();
//不通过
ci.setVariable("note","不准请假,继续加班");
//审批结束,到下一个流程结点
pi.signal();
}
privatevoidcheckConfirmRequest(longid){
ProcessInstancepi=ctx.loadProcessInstance(id);
ContextInstanceci=pi.getContextInstance();
//ConfirmAction类在signal后执行,所以覆盖了经理的审批意见
assertEquals("准假",ci.getVariable("note"));
//当前是结点为end
assertEquals(pi.getRootToken().getNode().getName(),"end");
//流程结束了
assertTrue(pi.hasEnded());
}
}
这个例子还是很简单,而且关键是缺少用户、组、权限等工作流系统必须的东西,不过没关系。下面的内容我将完成一个更完整的实例。
发表评论
-
规范的模板化项目架构管理
2012-05-03 23:31 850总在寻找项目开发简单化、标准化、统一化的开发管理方法,在项目 ... -
Java的ftp上传下载工具
2012-04-05 22:17 1724自己写的利用apache的net包写的ftp的上传、下 ... -
SmartGWT学习注意事项(一)
2012-03-31 20:42 1537首先表明,我 ... -
J2ME程序开发全方位基础讲解汇总
2007-08-03 14:19 620一、J2ME中需要的Java基础知识现在有大部分人,都是从零开 ... -
使用J2ME技术开发RPG游戏
2007-08-03 14:24 550RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说 ... -
移动视频: QuickTime for Java API 入门
2007-08-05 12:45 620在 Java 平台上创建 iPod 视频内容 ... -
技术交流:QuickTime流媒体和Java(图)
2007-08-05 12:46 631这并不是即将问世的Quic ... -
JMF下载安装与支持格式
2007-08-05 12:47 854JMF开发进度不是很快,所以目前还是比较薄弱。 JMF,全名 ... -
搭建J2ME开发环境
2007-08-05 12:48 566由于WTK并没有提供代码编辑的功能,因此本文讲述如何使用Ecl ... -
JMF系统介绍
2007-08-09 15:18 701一.简介 1.1JMF 体系结构 ... -
Experiments in Streaming Content in Java ME(一)
2007-08-13 13:43 579Since my book on Mobile Media A ... -
Experiments in Streaming Content in Java ME(二)----Creating an RTSP Protocol Handler
2007-08-13 13:44 1447Recall that RTSP is the actual ... -
Experiments in Streaming Content in Java ME(三)-----Back to RTPSourceStream and StreamingDataSource
2007-08-13 13:46 1029With the protocol handler in pl ... -
java中文件操作大全
2007-08-22 15:40 554一.获得控制台用户输入的信息 /***//**获得控 ... -
Pocket PC、Pocket PC Phone、Smartphone的区别
2007-08-23 16:59 653首先说明几个概念: 1、什么是Pocket PC?Pocket ... -
Struts配置文件详解(来自csdn)
2007-11-30 08:35 497Struts应用采用两个基于X ... -
jBPM开发入门指南(5)
2007-11-30 08:45 511jBPM开发入门指南(5) 前篇说起要讲在JBPM中实现用 ... -
jBPM开发入门指南(3)
2007-11-30 08:51 6165 安装 jBPM 的 Eclipse 开发插件 有 ... -
jBPM开发入门指南(2)
2007-11-30 08:52 6254 数据库初始化 jBPM 需要数据库支持, jBPM ... -
jBPM开发入门指南(1)
2007-11-30 08:54 604工作流虽然还在不成熟 ...
相关推荐
**jBPM开发入门指南** jBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。它提供了强大的流程建模、执行、监控和优化功能,使得开发者可以灵活地构建和管理复杂的...
3. **jbpm开发指南** - **使用Eclipse集成开发**:jbpm提供了Eclipse插件,便于流程模型的图形化设计。 - **编写业务逻辑**:在流程中嵌入Java代码或使用MVEL表达式实现任务的逻辑处理。 - **监听器和事件**:...
【jbpm开发入门指南例子】 jbpm,全称是Java Business Process Management,是一个开源的工作流管理系统,用于构建业务流程应用。它提供了强大的流程定义、执行、监控和管理能力,广泛应用于企业的业务流程自动化中...
【jBPM开发入门指南】 jBPM(Java Business Process Management)是一个开源的工作流管理系统,用于构建和执行业务流程。它最初是一个独立的项目,后来被JBoss组织接纳,成为其产品线的一部分。jBPM旨在提供灵活、...
在开始jBPM开发之前,我们需要安装和配置jBPM环境。这通常包括下载jBPM工具套件,比如jBPM Workbench,它提供了一个可视化的流程设计器。同时,我们还需要配置相关的开发环境,如设置JDK版本、集成IDE(如Eclipse或...
### jBPM开发入门指南知识点概述 #### 一、jBPM简介与市场需求 - **jBPM**:jBPM是一种广泛应用于企业级应用程序的工作流管理系统的开源框架。随着业务流程复杂性的增加以及对自动化需求的增长,jBPM成为了众多...
标题所指的知识点为“jBPM开发入门指南”,这是一本指导用户如何入门学习和开发jBPM的指南手册。jBPM是一个企业级业务流程管理(BPM)解决方案,它允许用户定义、执行、监控和优化业务流程。jBPM与Hibernate的整合、...
### jBPM4.4开发指南关键知识点解析 #### 一、工作流基础与概念 **1. 工作流定义** 工作流是指业务过程的部分或整体在计算机应用环境下的自动化,其目的是为了使在多个参与者之间按照某种预定义的规则传递文档、...
前篇说起要讲在JBPM中实现用户权限,但这段时间比较忙,一直拖着。这里先把jbpm自带的websale例子放上来,大伙先将就看看。这个例子我已经把它抽取了出去,网页部份丢弃了。在看的时候主要看WebsaleTest.java,看看...
在开始jBPM开发之前,需要进行数据库初始化。这是因为jBPM需要一个数据库来存储其内部的初始化数据以及运行时的工作流数据。由于jBPM依赖Hibernate,所以只要Hibernate支持的数据库,jBPM都能够使用。在本指南中,...
JBPM开发指南 ,很好的入门指南