整合jBPM的目的就是能够通过注入的方式得到ProcessEngine实例,因为ProcessEngine是jbpm 的核心.
整合步骤:
1.新建web程,搭建好SSH2环境
2.导入jbpm相关的两个jar包
3.在Tomcat/lib目录下添加jBPM软件包里的下列三个jar包,并删掉Tomcat/lib下的el-api.jar
这是为了解决jar包的冲突,其实就是换了一下.
4.在web工程的src目录下添加spring-jbpm4.cfg.xml配置文件
spring-jbpm4.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <process-engine-context> <string name="spring.cfg" value="spring-jbpm4.xml" /> </process-engine-context> <import resource="jbpm.default.cfg.xml" /> <import resource="jbpm.tx.spring.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.bpmn.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> <import resource="jbpm.businesscalendar.cfg.xml" /> <import resource="jbpm.console.cfg.xml" /> </jbpm-configuration>
上述文件是用来导入jBPM包中的相关配置文件
5.在applicationContext-tx.xml配置文件中的<sessionFactory元素中添加一个属性:告诉Spring实体映射文件的位置,下面的实体映射文件,在我们导入的jBPM的核心jar里已经包含了.我们不用管,只管这样配置就行了.如同配置我们自己写实体类,然后在这里配置实体映射文件一样.
<property name="mappingLocations"> <list> <value>classpath:jbpm.execution.hbm.xml</value> <value>classpath:jbpm.history.hbm.xml</value> <value>classpath:jbpm.identity.hbm.xml</value> <value>classpath:jbpm.repository.hbm.xml</value> <value>classpath:jbpm.task.hbm.xml</value> </list> </property>
6.在applicationContext-beans.xml中配置jBPM相关,目的是将ProcessEngine纳入Spring管理
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper"> <property name="jbpmCfg" value="spring-jbpm4.cfg.xml" /> </bean> <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
注意到src目录下的spring-jbpm4.cfg.xml就派上用场了,其作用就不用我说了.
6.经上述几步,整合就已经完成了.下面测试,能否将ProcessEngine注入成功.
编写一个 TestAction类
TestAction.java
package com.xunpoit.action; import org.jbpm.api.ProcessEngine; import com.opensymphony.xwork2.ActionSupport; public class TestAction extends ActionSupport { private ProcessEngine processEngine; public ProcessEngine getProcessEngine() { return processEngine; } public void setProcessEngine(ProcessEngine processEngine) { this.processEngine = processEngine; } @Override public String execute() throws Exception { return "SUCCESS"; } }
将我们写的TestAction在struts.xml和applicationContext.bean中配置起来
sturts.xml中的配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <bean class="org.springframework.orm.hibernate3.support.OpenSessionInViewFilter"></bean> <constant name="struts.objectFactory" value="spring"></constant> <package name="jBPM_SSH2" namespace="/" extends="struts-default"> <action name="test" class="testAction"> <result name="SUCCESS">/success.jsp</result> </action> </package> </struts>
application-bean.xml中的配置
<bean id="testAction" class="com.xunpoit.action.TestAction" scope="prototype"> <property name="processEngine" ref="processEngine"></property> </bean>
编写index.jsp和success.jsp两个页面
index.jsp
<body> <form action="test.action" method="post"> <input type="submit" value="测试jBPM与ssh2整合"/> </form> </body>
success.jsp
<body> 整合成功:<%=request.getAttribute("processEngine")%> </body>
7.在ssh2环境的配置文件中,我们配置了数据库相关信息,这里就要求我们要创建我们的数据库
8.部署项目,访问index.jsp
注意,项目一部署运行,在我们创建数据库jbpm_ssh2中就会自己看到自动生成了jBPM相关的18张表
访问index.jsp
9.通过上面的测试,证明整合确实成功了,已经通过注入的方式,拿到了ProcessEngine