1.到官网下载jbpm-4.4.zip。
2.将jbpm4.4必须包导入项目中。如果懒就将全部包导入项目,但不推荐这么做,因为会有很多重复包,可能会造成一些莫明其妙的问题。至于哪些是必需包,可以参考:http://yuanlg.iteye.com/blog/1114842
另由于jbpm4内部使用hibernate做的持久化,而hibernate所需的包,在原系统已经导入,所以hibernate依赖的包,就不用导入了。
3.众所周知,对jbpm4的操作,都需要由ProcessEngine这个类做为入口。因此,得到这个类,就能直接访问jbpm4提供的各种服务。我们将jbpm4集成到spring,也是拿这个类做为入口。只要能得到这个类的bean对象,集成就算成功了。幸好,jbpm4.4已提供了集成到spring的方案。网上有很多集成方案有一些是自己写的,有一些是jbpm4早期版本提供的。到4.3版本,官方提供的是使用SpringHelper来做集成。
只要将以下bean配制放到applicationContext.xml里,就算是集成完成了。
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
</bean>
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"/>
上面的spring.jbpm.cfg.xml可以将\jbpm-4.4\install\src\cfg\jbpm\spring.jbpm.cfg.xml复制到项目的src目录下。
细心的人可能会打开spring.jbpm.cfg.xml这个文件看看,发现里面有以下配制,甚是疑问!!!
<string name="spring.cfg" value="applicationContext.xml" />
我当初也不懂这是什么意思,后面根踪源代码才发现,这个配制完全可以删除。于是我将它删除了。当然,你也可以不用删,完全没影响。
以下是使用这个配制的源代码,贴同来,供参考!
意思是:当我们直接new SpringHelper对象,并调用createProcessEngine()方法时,它会找到applicationContext.xml来初始化一个applicationContext。
而如果将SpringHelper交给spring Ioc容器创建时,它就不需要自已去初始化applicationContext,因为SpringHelper实现了ApplicationContextAware接口,spring会自动将applicationContext对象注入进来。
在这里,我们肯定是将SpringHelper交给spring Ioc容器创建。所以spring.cfg这个配制根本用不上。
4.初始化数据库。
在\jbpm-4.4\install\src\db\create目录下,有相应数据库的sql脚本。找到适合你的脚本,执行,初始化数据库便成功了。
不可否认,这里提供的sql脚本的确有点少。连DB2、sql server的都没有提供。
5.配制jbpm4的对象关系映射
jbpm4使用hibernate做持久化,而hibernate在原系统中已与spring集成好。因此,只需要将jbpm4的hbm文件加入sessionFactory bean配制中就可以了。将以下配制加入sessionFactory bean中。
<property name="mappingLocations">
</property>
这些jbpm.*.hbm.xml文件,在jbpm.jar里面。因此,加上classpath前缀,强制从类路径里查找资源。
至此,大功告成,集成完毕。
现在,该怎么使用呢?很简单,在你需要使用jbpm4的类里,声明一个processEngine属性,并写上相应的setter/getter方法。在spring bean配制文件里,将processEngine对象注入进来,便可以使用jbpm4提供的各种服务了。
在实际项目中,我还加入了以下配制,当需要哪个服务时,便注入哪个服务对象。这样也算是解藕吧!呵呵……
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService"/>
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
依赖包介绍
activation.jar | 发送EMAIL需要的包 |
antlr-2.7.6.jar | hibernate依赖包 |
commons-collections-3.1.jar | hibernate依赖包 |
dom4j-1.6.1.jar | hibernate依赖包 |
drools-api.jar | JBoss组织下面的一个规则引擎 |
drools-compiler.jar | JBoss组织下面的一个规则引擎 |
drools-core.jar | JBoss组织下面的一个规则引擎 |
freemarker.jar | 模板引擎 |
hibernate3.jar | Hibernate |
janino.jar | 一个开源的JAVA编译器,能够把JAVA源代码编译为字节码 |
javassist-3.9.0.GA.jar | hibernate依赖包 |
jbpm.jar | JBPM核心包 |
joda-time.jar | 对日期和时间进行处理的工具类库,可替代java.util.Calendar中的相关功能 |
jta-1.1.jar | Hibernate依赖包 |
juel-api.jar | EL表达式的一个开源实现包(EL表达式不仅仅可以用于JSP中) |
juel-engine.jar | EL表达式的一个开源实现包(EL表达式不仅仅可以用于JSP中) |
juel-impl.jar | EL表达式的一个开源实现包(EL表达式不仅仅可以用于JSP中) |
livetribe-jsr223.jar | jsr223是把其它脚本语言嵌入JAVA的一个规范,这个JAR包是对这个规范的实现 |
log4j-1.2.16.jar | 日志记录 |
mail.jar | 发送EMAIL的依赖包 |
mvel2.jar | MVEL,是一个类似于OGNL的表达式语言解释工具,性能优于OGNL |
mysql-connector-java-3.1.13-bin.jar | MySql驱动 |
slf4j-api-1.5.8.jar | Hibernate依赖包 |
slf4j-log4j12-1.5.8.jar | Hibernate依赖包 |
缺省情况下,JBPM使用Hibernate来对各种信息进行持久化,所以,上述列表中也有Hibernate相关的依赖包