Jbpm流程管理实例(二)
来源:互联网 发布:工厂方法模式 java 编辑:程序博客网 时间:2024/05/17 00:03
5、现在让我们来测试一下:
- 创建数据库表: JbpmConfiguration.getInstance().createSchema();
- 定义流程: 参考process.xml (刚才我们定义的流程文件,我们将它拷贝到src目录下)
- 部署流程:
* JbpmConfiguration.getInstance() - 创建jbpmConfiguration对象
* ProcessDefinition.parseXmlResource(String); - 读取流程定义文件,创建processdefinition对象
* jbpmConfiguration.createJbpmContext(); - 创建jbpmContext对象
* context.deployProcessDefinition(definition); - 部署流程到数据库
* context.close(); - 关闭context对象
测试代码1:
import org.jbpm.JbpmConfiguration;import org.jbpm.JbpmContext;import org.jbpm.graph.def.ProcessDefinition;import org.junit.Test;public class JbpmTest {private static JbpmConfiguration configuration = JbpmConfiguration.getInstance();@Testpublic void testDeployee() {ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("process.xml");JbpmContext context = configuration.createJbpmContext();try {//context 类似于hibernate的session对象的功能,部署流程context.deployProcessDefinition(processDefinition);} catch (Exception e) {e.printStackTrace();} finally {//需要关闭context对象context.close();}}}
- 创建公文
测试代码2:
@Testpublic void testCreateDocument() {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();e.printStackTrace();} finally {session.close();}}
- 将公文与流程绑定(即需要创建流程实例)
* JbpmConfiguration.getInstance() - 创建jbpmConfiguration对象
* jbpmConfiguration.createJbpmContext(); - 创建jbpmContext对象
* context.setSessionFactory(sessionFactory),将JBPM与程序中的session绑定
* context.getGraphSession().findLatestProcessDefinition("流程名称");
* new ProcessInstance(definition); - 创建流程实例
* context.save(processInstance); - 存储流程实例
* 在Document中添加Long processInstanceId 属性
* context.getSession().load 操作,加载Document对象
* document.setProcessInstanceId - 绑定流程实例到公文
* processInstance.getContextInstance.createVariable("document",document.getId()) - 绑定公文到流程实例
测试代码3:
@Testpublic void testCreateProcessInstance() {JbpmContext context = configuration.createJbpmContext();context.setSessionFactory(HibernateUtils.getSessionFactory());//从数据库中加载ProcessDefinition对象ProcessDefinition processDefinition = context.getGraphSession().findLatestProcessDefinition("文档测试流程"); //从流程中创建一个流程实例ProcessInstance processInstance = new ProcessInstance(processDefinition);//存储流程实例context.save(processInstance);//加载公文Document doc = (Document)context.getSession().load(Document.class, 1);//绑定流程实例到公文doc.setProcessInstanceId(processInstance.getId());//绑定公文到流程实例(contextInstance 相当于一个变量的容器)processInstance.getContextInstance().createVariable("document", doc.getId());//context需要关闭context.close();}
- 公文创建者提交公文
* (Document)context.getSession().load(Document.class, 1); - 加载公文信息
* context.getProcessInstance(从公文中获取的流程实例ID); - 即根据流程实例ID加载流程实例
* processInstance.getRootToken().signal(); - 触发流程往下走(即到达第一个节点)
- 这时候,我们可以测试一下,看看流程当前所处的节点
* processInstance.getRootToken().getNode().getName()
测试代码4:
@Testpublic void testSubmitDocument() {JbpmContext context = configuration.createJbpmContext();context.setSessionFactory(HibernateUtils.getSessionFactory());//加载公文Document doc = (Document)context.getSession().load(Document.class, 1);//通过公文中的流程实例id加载流程实例ProcessInstance processInstance = context.getProcessInstance(doc.getProcessInstanceId());//触发流程实例走向下一步processInstance.getRootToken().signal();//流程当前所处的节点System.err.println(processInstance.getRootToken().getNode().getName());//context需要关闭context.close();}
- 第一个节点对应的用户登录,应该能够查询到其当前的任务(有公文等待其审批)(测试代码略)
* List tasks = context.getTaskMgmtSession().findTaskInstances("张三"); - 查找张三的任务列表
* 列表元素是TaskInstance实例
* 通过:taskInstance.getProcessInstance().getContextInstance().getVariable("document"); 可以找到其绑定的公文ID
- 查找到当前的任务对应的公文之后,即可对其审批,并继续往下走
* taskInstance.end();
- 如此,直到结束
* processInstance.hasEnded() - 如果流程已经到达终点,本调用将返回true
6、集成
- JBPM与Spring集成
* 集成JBPM与spring,需要用到第三方的集成包:spring-modules-0.8.zip
* 将其中的spring-modules-jbpm31.jar拷贝到WEB-INF/lib下面即可
* 集成JBPM与Spring的方法是:将JbpmConfiguration对象的创建交给Spring来完成
* 所以,需要在spring配置文件中配置JbpmConfiguration对象的创建
<!-- 配置JbmpConfiguration -->
<bean id="jbpmConfiguration" class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
<property name="configuration" value="classpath:jbpm.cfg.xml"></property>
</bean>
* 这时候,需要jbpm.cfg.xml,这是JBPM的配置文件,我们可以从:
JBPM_HOME\src\jpdl\org\jbpm目录下拷贝default.jbpm.cfg.xml文件,
并重新命名为jbpm.cfg.xml
- JBPM如何实现业务逻辑类
* 用到jbpmConfiguration对象的时候,需要注入 (<property name="jbpmConfiguration" ref="jbpmConfiguration"></property>)
* 当我们使用JbpmContext对象来操纵JBPM的时候,需要将JbpmContext的HibernateSession对象设置为当前的HibernateSession对象
private JbpmContext getContext(){
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSession(getSession());
return context;
}
- Jbpm流程管理实例(二)
- Jbpm流程管理实例(一)
- JBPM学习(3):管理流程实例
- jbpm学习笔记(三)--管理流程实例
- OA总结—jbpm管理流程实例
- Jbpm笔记之二 -- 流程实例-任务
- JBPM流程实例(PI)Process Instance
- JBPM流程实例(PV)Process Variables
- JBPM(五)执行流程实例
- JBPM学习(2):管理流程定义
- 工作流--JBPM流程管理
- 一个JBPM工作流管理示例(二)
- 一个JBPM工作流管理示例(二)
- java流程管理 之 jbpm流程实例 发布、查看、终止、删除
- java流程管理 之 jbpm流程实例 发布、查看、终止、删除
- 最新JBoss jBPM 3.1 开始指南之二---执行示例流程和管理执行中的流程
- JBPM流程部署之流程实例迁移
- jbpm发布流程定义,启动流程实例
- iOS 5 ARC完全指南——深入浅出全面讲解ARC,整理PDF与大家分享!!!
- 指针与const限定符(Linux C编程)
- SQL中删除多表数据
- [MSSQL]字符串转成16进制函数
- [MSSQL]SQL数字转英文函数
- Jbpm流程管理实例(二)
- Eclipse:CheckStyle Configuration
- linux Blog
- Linq操作与外键的联系
- 根据Debug和Release状态的变化来屏蔽日志输出
- 自定义JSTL函数
- 【建站实例】站在用户的角度去思考如何建设我的网站
- Android JNI 编程
- 在iPhone App中提示用户打分的代码