前边我们讲述了JBPM的个例简单运用,但是如何能够运用到项目中才是我们想要的,所以这篇简单看一下如何将JBPM4.4运用到SSH框架进行使用。
首先说一下集成吧。无论是SSH,SSI等框架的集成,还是将JBPM4.4框架集成进去都是一样的,就是分工明确各司其职,并进行畅通交流即可。这其中Spring起着至关重要的作用。举个不恰当的例子吧,假如将我们的软件看做我们的电脑的话,Spring就好比主板,起着负载其他器件,管理其他器件的重大作用,有点好比大管家的意思。而Struts2可以看做CPU,Hibernate可以看做内存,现在的JBPM也可以看做其中一个比较重要的器械件。也就是说,我们想要将Struts2中的action,Hibernate中的SessionFactory,IBaits中的sqlMapClient,JBPM中的ProcessEngine等各自框架的核心类交给Spring进行创建并管理,这样使框架之间彼此融合了起来,就像一个整体了。
好,看一下如何将JBPM继承到SSH中吧!
一,当然还是先考入jar包,还是哪句话“奔着够用的原则”
jbpm.jar(核心jar包)
lib\(lib目录下的jar,这里添加了一些必要的,像一些测试jar包,日志jar包,在SSH中已经引入了,当然了如果出现了少jar包的情况,再进行导入即可,这些jar功能基本上够了。)
antlr.jar
antlr-runtime.jar
avalon-framework.jar
bsh.jar
core.jar
errai-bus.jar
errai-common.jar
janino.jar
jbpm-bpmn.jar
jbpm-db.jar
jbpm-jboss.jar
jbpm-tomcat6.jar
joda-time.jar
juel-api.jar
juel-engine.jar
juel-impl.jar
livetribe-jsr223.jar
mail.jar
mvel2.jar
oro.jar
activation.jar
二,提供JBPM4.4的配置文件jbpm.cfg.xml,拷贝到src目录下,注意这个名字是SpringHelper类中提供的默认的名称,如果不是这个名称,还需要我们进行配置来覆盖默认的名称,才能起作用。在这个文件还需要加入Spring的引用:找到Spring中JBPM用到的Hibernate映射文件:
<jbpm-configuration>
<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" />
<import resource="jbpm.jobexecutor.cfg.xml" />
<!-- 注意value的值就是Spring核心配置文件的名称 -->
<process-engine-context>
<string name="spring.cfg" value="applicationContext.xml" />
</process-engine-context>
</jbpm-configuration>
三,Spring核心配置文件中添加对JBPM的配置:
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper"/>
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
<!-- 为了更方便使用,将processEngine作为一个工厂,创建出相关的Service ,可以在后边直接使用,不需要在每个Sevice中通过processEngine进行创建-->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService"/>
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
<!-- Hibernate核心对象,添加对JBPM的支持,就是将写在Hibernate中的东西搬了过来 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
………………
<!-- 将JBPM4用到的hibernate映射文件,加入到Spring配置文件中 -->
<property name="mappingResources">
<list>
<value>jbpm.repository.hbm.xml</value>
<value>jbpm.execution.hbm.xml</value>
<value>jbpm.history.hbm.xml</value>
<value>jbpm.task.hbm.xml</value>
<value>jbpm.identity.hbm.xml</value>
</list>
</property>
</bean>
四,问题解决,通过启动Tomcat服务器,会有一些问题,例如sql语句的频繁发送,无法访问应用程序(也就是JBPM和Tomcat之间的冲突)
1,去除控台SQL的发送,将jbpm.cfg.xml中的如下配置进行注释
<!--
<importresource="jbpm.jobexecutor.cfg.xml" />
-->
2,将拷贝的jar包中的juel*.jar剪切到Tomcat的lib目录下,注意是剪切,然后删除TOMCAT/lib/el-api.jar。这是两者的包冲突吧
这样就算集成进去了,我们就可以将JBPM运用到三层架构中了。可以进行流程的部署,流程的实例,流程任务的获取与解决了。当然更加熟悉的运用还需要我们在实践中多锻炼。