jbpm与SSH整合

环境:Struts2.23 + spring3.06 + hibernate3.67 + Jbpm3.22

第一步:创建数据库表

拷贝相关的依赖包到WEB-INF/lib下面(bsh.jar/ jcr-1.0.jar/ jbpm-identity.jar/ jbpm-jpdl.jar)

1、修改hibernate.cfg.xml,添加JBPM的映射配置,以及缓存属性的配置

2、因为JBPM中的User对象与OA系统中的User对象名称上有冲突,所以需要,修改OA系统中User映射的auto-import属性为"false"。如果使用Anotation,则
@Entity(name="com.catking.domain.User"使用类全名,并且在使用到User的HQL语句中使用类全名

3、当修改了User映射的auto-import="false"之后,需要在查询User对象的时候,使用其全路径类名(请参考UserManagerImpl.java)

4、启动Tomcat,应能正确创建JBPM的所有数据库表


第二步:与Spring集成

1、JBPM与Spring整合,需要用到第三方的集成包:spring-modules-0.8.zip

2、将其中的spring-modules-jbpm31.jar拷贝到WEB-INF/lib下面即可

3、JBPM与Spring整合的方法是:将JbpmConfiguration对象的创建交给Spring来完成

4、所以,JBPM与Spring整合需要在spring配置文件中配置JbpmConfiguration对象的创建

 

5、hibernate.hbm.xml中不能配置<property name="current_session_context_class">thread</property>

原因是spring 整合hibernate管理事物后,session是绑定到事物的,而不是thread。此时hibernate.current_session_context_class应该是SpringSessionContext,而它又会在使用LocalSessionFactoryBean时自动的设置。所以就不需要手动设置。

配置JbmpConfiguration

 

<bean  id="jbpmConfiguration" class"org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean" > 

<property name="sessionFactory" ref="sessionFactory"></property>

<property name="configuration" value="classpath:jbpm.cfg.xml" />

</bean>


6、这时候,需要jbpm.cfg.xml,这是JBPM的配置文件,我们可以从:JBPM_HOME\src\jpdl\org\jbpm目录下拷贝default.jbpm.cfg.xml文件,并重新命名为jbpm.cfg.xml


第三步:如何实现业务逻辑类

1、用到jbpmConfiguration对象的时候,需要注入 

2-1、当我们使用JbpmContext对象来操纵JBPM的时候,需要将JbpmContext的HibernateSession对象设置为当前的HibernateSession对象(不推荐,下面还有一个方法更好得处理)

private JbpmContext getContext(){  

 JbpmContext context = jbpmConfiguration.createJbpmContext();   

  context.setSession(getSession());  //使用spring管理的session替换

 return context;   } 

 

2-2、在jbpm.cfg.xml的配置中

<service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" />

替换成

<service name="persistence">
    <factory>
      <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
       <field name="isTransactionEnabled"><false /></field>
         <field name="isCurrentSessionEnabled"><true /></field>
      </bean>
    </factory>
  </service>

将事务交给spring,并且session是获取当前的。

然后在下方找到

<string name="resource.hibernate.cfg.xml" value="hibernate.cfg.xml" />

然后注释掉,为什么要注释掉。这个有什么作用,没看出来。


注意:不要关闭在使用context完毕后,不要手动对context进行关闭,spring会根据执行情况对context进行处理,包括回滚事务。

在整合过程中,出现

java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType.

 
根据JBPM3.x使用已过时的API字符串字段问题是,PermissionUserType使用Hibernate类depricated字段的字符串,将其更改StandardBasicTypes.STRINGorg.hibernate.type.StandardBasicTypes),修改源代码,然后再打会jar包,注意其中import org.hibernate.type.StandardBasicTypes包。

 

资料由:http://community.jboss.org/message/575357#575357
            http://anyu1980.blog.163.com/blog/static/2248456020104300546518/

            http://betafox.iteye.com/blog/177649

 

 

 

你可能感兴趣的:(jbpm)