jBPM开发入门指南(4)
来源:互联网 发布:nginx测试配置文件 编辑:程序博客网 时间:2024/06/04 23:27
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;
publicclassSimpleProcessTest extends TestCase {
privateJbpmConfiguration config = JbpmConfiguration.getInstance();
privateJbpmContext ctx = config.createJbpmContext();
// helloworld对应于jbpm_processdefinition表的name字段值,也即processdefinition.xml的name
// 这个值得取比较耗时,实际项目里最好和“数据库的JDBC连接”一样,让它共享,不要频繁打开关闭。
privateProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("helloworld");
publicvoidtestNewRequest() {
longid = newRequest();
System.out.println("id=" + id);
checkNewRequest(id);
confirmRequest(id);
checkconfirmRequest(id);
ctx.close();// 关闭jbpm容器
}
/**
*创建一个请假单
*
*@return
*/
privatelongnewRequest() {
// 创建一个新流程
ProcessInstance pi = processDefinition.createProcessInstance();
// 取得流程的数据环境
ContextInstance ci = pi.getContextInstance();
// 创建一张请假单
ci.setVariable("name", "陈刚www.chengang.com.cn");
ci.setVariable("day", 2);
assertEquals(null, ci.getVariable("note"));
// 请假申请结束,转到下一个流程结点
pi.signal();
returnpi.getId();
}
/**
*检查请假单的数据
*
*@paramid
*/
privatevoidcheckNewRequest(long id) {
// 从数据库提取原流程
ProcessInstance pi = ctx.loadProcessInstance(id);
// 取得流程的数据环境
ContextInstance ci = 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(long id) {
ProcessInstance pi = ctx.loadProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
// 不通过
ci.setVariable("note", "不准请假,继续加班");
// 审批结束,到下一个流程结点
pi.signal();
}
privatevoidcheckConfirmRequest(long id) {
ProcessInstance pi = ctx.loadProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
// ConfirmAction类在signal后执行,所以覆盖了经理的审批意见
assertEquals("准假", ci.getVariable("note"));
// 当前是结点为end
assertEquals(pi.getRootToken().getNode().getName(), "end");
// 流程结束了
assertTrue(pi.hasEnded());
}
}
这个例子还是很简单,而且关键是缺少用户、组、权限等工作流系统必须的东西,不过没关系。下面的内容我将完成一个更完整的实例。
- JBPM开发入门指南(4)
- jBPM开发入门指南(4)
- jBPM开发入门指南(4)
- jBPM开发入门指南(4)
- jBPM开发入门指南(4)
- jBPM开发入门指南
- jBPM开发入门指南
- jBPM开发入门指南
- jBPM开发入门指南
- jBPM开发入门指南
- jBPM开发入门指南(4)(转载)
- jBPM开发入门指南(1)
- jBPM开发入门指南(2)
- jBPM开发入门指南(3)
- JBPM开发入门指南(1)
- JBPM开发入门指南(2)
- JBPM开发入门指南(3)
- JBPM开发入门指南(5)
- Base class for cloning an object in C#
- ERP 在 AIX 的32位操作系统和64位操作系统之间互相迁移
- WIN CE 长按键
- 全面分析Java的垃圾回收机制
- GDAL读取图像文件,建立金字塔
- jBPM开发入门指南(4)
- oracle中的exists 和not exists 用法详解
- 游戏框架
- 很简单的方法找到字符串中不允许的汉字
- struts數據庫訪問
- CDN知识科普
- eXtremeTable eXtremeComponents参考文档
- 数据库连接查询类型(左连接、右连接、全连接、内连接和交叉连接)
- 不错的c++博客