一、SSH整合JBPM
JBPM基础见 http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html
现在将要实现SSH和JBPM的整合。
(1)jbpm项目/lib目录下的所有jar包和根目录下的jbpm.jar包放入/WEB-INF/lib文件夹下,同时删除tomcat服务器/lib文件夹中的el-api.jar包。
注意:必须删除el-api.jar包,该jar包和jbpm项目中需要使用到的三个jar包冲突了:juel-api.jar、juel-engine.jar、juel-impl.jar
最好的解决方法就是将tomcat服务器根目录下的/lib文件夹中的el-api.jar包使用上述的三个jar包替换掉,这样也能够运行其他的服务器程序。
也就是说以上的三个jar包的功能能够代替el-api.jar包的功能,但是反之则不可以。
(2)hibernate的相关jar包不需要添加了。jbpm项目中已经添加了hibernate相关的jar包。这里推荐使用jbpm项目中提供的hibernate支持jar包。否则可能会出现一些莫名其妙的问题。
(3)mysql的驱动jar包也不需要添加了,因为该jar包也已经在jbpm项目中提供了。推荐使用jbpm项目中提供的mysql的驱动jar包。原生的更靠谱,但是亲测使用Mysql官方网站提供的驱动jar包也没有问题。
(4)添加spring的相关jar包。
(6)添加struts2的相关jar包。
(7)项目中会使用到ajax的相关功能,前端ajax和struts2交互使用struts2提供的jar包更方便(自定义结果集也能够实现,但是比较麻烦)
(7)推荐将使用到的jar包分门别类的放到一起,方便管理。
ext文件夹存放了代替el-api.jar包的三个jar包;jstl文件夹用不着,我使用的是java EE 6.0的版本,自带jstl的相关支持jar包;junit文件夹中存放单元测试的相关jar包,该jar包也不需要下载,myeclipse自带,直接右键项目->Build Path->Add Libraries->JUnit也能够添加,注意选用4.0的版本。
建议将配置文件单独放在一个source文件夹中,如下图所示
SSH整合过程见
http://www.cnblogs.com/kuangdaoyizhimei/p/4855034.html
只说几处和SSH和JBPM整合的关键地方:
(1)hibernate.cfg.xml配置文件被jbpm.hibernate.cfg.xml配置文件取代。两个文件中的内容合并到一起,最后在spring中声明配置文件的位置即可(jpbm.hibernate.cfg.xml)
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:jbpm/jbpm.hibernate.cfg.xml"></property> </bean>
(2)jbpm相关的配置
jbpm最重要的一个对象就是ProcessEngine对象,所有的一切流程动作都需要从此对象出发,创建该对象的任务也需要交给spring,注意创建方式为工厂方式。
<!-- 配置jbpm相关 --> <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper"> <property name="jbpmCfg" value="jbpm/jbpm.cfg.xml"></property> </bean> <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"></bean>
(3)其余配置过程就是SSH的整合过程了,不赘述。
二、项目演示
项目工程源代码: https://github.com/kdyzm/sshAndJBPM
在项目运行之前,首先运行com.kdyzm.init.Init类,初始化用户数据。
输入预置的用户名张三,密码xiaozhang(所有的用户密码统一为xiaozhang)登陆
单击确定按钮之后:
查看流程图:
至此,流程部署已经成功。
该项功能可以根据现有的流程定义新建流程模板等。
添加新模板:上传一个模板文件
上传成功之后:
单击第一项:请假流程表单模板
自动跳转到“我的申请”查询页面
单击查询状态,会显示“我”的所有申请入上图所示
单击 查看流转记录图 ,可以查看当前流程的审批进程
以上的流程图是比较复杂的流程图,之前的笔记中提到的fork/join节点在这里使用到了。 现在的流程实例需要项目组长和项目副组长共同同意流程才能流向总经理审批节点。
红色方框是怎么动态显示出来的是一个非常有意思的事情, 使用CSS+DIV块可以精确定位,对border设置样式 即可 。
流程流向了项目组长审批(张三)和项目副组长(李四)审批的任务节点。当前账户是张三,由张三第一个审批。
单击审批处理查看当前有权限处理的所有审批任务
单击审批处理:
直接点击同意,返回到审批列表,这时任务已经结束,所以审批列表中已经没有任务了。
和上面一样如法炮制,点击同意,切换回张三的账户,查看审批进度,发现流程已经流转到总经理审批的地方了
登陆王五(总经理)的账户,审批同意,再次返回张三的账户查看审批进度
流程已经流转到总裁审批的任务节点了。
接下来使用赵六(总裁)的账户登陆系统,进行审批,审批过后使用张三的账户登录系统,再次查看流程状态,这时已经查看不了流程图了,因为申请状态已经标志为“完成申请”
对比未完成的状态,当前状态发生了改变,同时不能查看流转记录图了:
三、技术点分析