jdbc:mysql://localhost:3306/jbpm
true
false
其中的参数参照实际应用进行修改。
完成上述两个步骤,基本上就完成了jbpm持久化向平台的整合。
(2)与Spring框架整合
Jppm与Spring整合的一个重要工具是Spring-Jbpmmodule插件,通过这个插件,可以轻松的实现二者的整合。
首先修改Spring的配置文件,由于Spring支持多SessionFactory以及多数据源,因此可以很容易实现二者的整合,只需要建立一个Spring配置文件jbpm-pring-cfg.xml,,代码如下:
class='org.springframework.orm.hibernate3.LocalSessionFactoryBean'>
classpath:hibernate.cfg.xml
class='org.springframework.orm.hibernate3.HibernateTransactionManager'>
通过上述配置,基本上实现了Jbpm向Spring整合。
(3)webApp
向Struts2整合不能够通过配置来实现,因为目前jbpm的web控制台采用的是JSF技术框架,故jbpm的web应用需要通过移植来实现。
综上所述,jBPM与Struts2/Spring/Hibernate的集成就完成了,一个公文流转系统框架搭建起来了。论文大全。
4实现一个公文流转系统
4.1流程需求报销流程的需求如下:员工在登录系统后,可以填写报销单据,完成后该报销单据将会被流程送到该员工据在的部门主管进行审批。主要审批结果可能有两个,一个是不同意,流程直接结束,一个是同意流程判断报销金额,如果金额大于1000,那么流程将其送达总经理审批,否则流程就将报销单送到财务人员那里,财务人员直接处理后流程结束。如果送达总经理,总经理审批也比较简单,如果同意送达财务处,否则流程结束。
4.3设计流程报销的重点是流程,所以就不再设计业务表。我们约定只能有两个用户可以登录,他们分别是:user1/user1、user2/user2(用户名/密码)。user1对应的部门经理为manager1/manager1,user2对应的部门经理为manager2/manager2。总经理只有一个,就是supermanager/supermanager。财务也只有一个:cashier/cashier。
把任务实例分配给部门经理时,需要对前面提交报销的人进行判断。如果申请人为user1,那么就选择manager1作为审批的部门经理;否则选择manager2作为部门经理。这个任务实例的参与者分配采用Handler的方式。Handler类的代码见代码清单4-1。
packagetest.assignment;
importorg.jbpm.graph.exe.ExecutionContext;
importtest.Constants;
publicclass ManagerAssignment implements AssignmentHandler,Constants {
public void assign(Assignable assignable,ExecutionContext executionContext)
throws Exception { //从当前流程实例上下文当中取出当前报销人
Stringissueperson=executionContext.getContextInstance().getVariable(this.ISSUE_PERSON).toString();
if(issueperson.equals('user1')){
//当报销人为user1时,部门经理为manager1
assignable.setActorId('manager1');
}else{
//当报销人为其它人时,部门经理为manager2
assignable.setActorId('manager2');
}
}
}
在代码清单4-1当中,我们使用了一个名为Constants的接口来存储常用变量。
 |
报销审批完成后,还需要有一种机制通知报销人。为简单起见,这里直接在控制台打印一条消息来说明报销结果。负责打印的Action类如代码清单4-2所示。
package test.action;
importorg.jbpm.context.exe.ContextInstance;
importorg.jbpm.graph.def.ActionHandler;
importorg.jbpm.graph.exe.ExecutionContext;
importtest.Constants;
publicclass NotifyPaymentAction implements ActionHandler,Constants
publicvoid execute(ExecutionContext executionContext) throws Exception {
//获取流程上下文对象
ContextInstancect=executionContext.getContextInstance();
//从当前流程实例上下文当中取出当前报销人
Stringissueperson=ct.getVariable(this.ISSUE_PERSON).toString();
booleanresult=false;
if(managerApproveResult.equals(this.APPROVE_RESULT_OK)){
StringmoneyCount=ct.getVariable(this.MONEY_COUNT).toString();
if(Integer.parseInt(moneyCount)>1000){
System.out.println('亲爱的 '+issueperson+' 你的报销审批已通过');
}else{
System.out.println('亲爱的 '+issueperson+' ,很遗憾,你的报销审批被否决!');
}
executionContext.getToken().signal();
}
实际流程应用中,可以利用jBPM中的Node节点通知任务参与者,或者加一个Node节点,通过为该节点添加Handler类来将流程处理结果插入到业务表中,参与者再通过查看业务表了解流程处理情况。论文大全。
用配置好的JBPM流程设计器的Eclipcs打开jbpm-web-test工程,在里面新建一个processes目录用来存放流程设计文件。根据对流程的描述,可以画出如图2-1所示的流程图。
图2-1创建报销流程模版
5小结
为了文章的简洁清晰 ,在论述的时候我删掉了很多额外描述,重点描述了如何将JBPM工作流引擎集成到J2EE平台下的整合好的S2SH开源框架来实现一个公文流转系统,尽管公文流转系统实现起来有些复杂, 但是只要抓住它的本质就不难理解了 。
参考文献:
[1].孙瑞志,史美林. 工作流异常处理的形式描述[J]计算机研究与发展, 2003,(03) . 57 - 68.
[2].万良君,怀进鹏. 面向工作流系统的生态组织模型研究[J]北京航空航天大学学报, 2004,(08) . 2-3.
[3].赵璇. 基于分布式工作流的OA系统[D]浙江大学, 2002 . 40- 42
[4].陆剑江. Lotus Notes在办公自动化系统开发中的应用研究[D]苏州大学, 2001 .
[5].蒋海彦,鄂明成,习中革. 基于Web的表单工作流系统设计与实现[J]北方交通大学学报, 2004,(04) .
[6].胡皓. 从自组织理论看进化的一般内部根据[J]东疆学刊, 2002,(02) .
[7].陆元军. 面向制造企业供应链管理系统集成平台中的工作流管理系统研究[D]浙江大学, 2002 .
[8].李薪. 管理信息系统的技术研究与设计[D]西安电子科技大学, 2001 .
|
|
2/2 首页 上一页 1 2 |