jbpm4.4整合spring过程中问题汇总(追加)

之前一直报错,郁闷了很久:
[...]
nested exception is org.hibernate.MappingException: Unknown entity: org.jbpm.pvm.internal.id.PropertyImpl
at
[...]
但是,该类的hibernate映射文件是写在jar包里面的。Hibernate为何没有解析到这个配置文件,不得而知。查看jbpm.hibernate.cfg.xml文件:
Xml代码





PropertyImpl的映射就在第一个被引入进来的文件当中,可以猜想到,其实整个的jbpm.hibernate.cfg.xml文件都没有Hibernate找到。
查看两种事务控制方式对应的配置文件jbpm.tx.spring.cfg.xml和jbpm.tx.hibernate.cfg.xml,发现后者会默认地去读classpath中的jbpm.hibernate.cfg.xml文件,而使用spring的时候却没有这样的操作(在applicationContext.xml文件中配置嘛)。
另外,在查看源码的时候,到处可见的是默认配置"jbpm.cfg.xml":
Java代码
/**
* @author Joram Barrez
*/
public class SpringHelper implements ApplicationContextAware {

protected ApplicationContext applicationContext;
protected String jbpmCfg = "jbpm.cfg.xml";

...
却看不到jbpm.hibernate.cfg.xml的默认值。jbpm的配置文件设计思想逐渐明晰:
总的配置从jbpm.cfg.xml开始,你可以更改这个文件以便使用自己的事务控制方式。
如果使用的是hibernate的事务控制,那么你就得提供好jbpm.tx.hibernate.cfg.xml文件,并做好配置。如果使用的是spring的事务控制,只需要在jbpm.cfg.xml文件中切换到spring中即可,其他的关于数据库连接信息,sessionFactory等等由你自己到applicationContext文件中配置即可。
以下是在applicationContxt.xml文件中配置的关于jbpm信息:
Xml代码

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">







classpath:/cn/chinacti/crm/entity




如此,我的问题得以解决。
道理很简单,以后记得,与Spring 集成,那么所有的数据库信息都应该从applicationContext.xml配置出发,而不应让集成进来的组件自己去找自己的配置文件。

 

 

========================================

 

多数据源的情况下spring与jbpm4.4的整合:

网络上有有很多关于jbpm4与spring整合的帖子,但都是关于单一数据源的,当系统中含有多数据源交由spring管理的时候,对jbpm4的整合就要稍微修改下,废话不多说上代码:

===========================applicationContext-database-jbpm.xml==================================

applicationContext-database-jbpm.xml(spring配置文件)




   
 
  
 

 
  
   
   
  

  
  
  
   
    
    classpath:jbpm.execution.hbm.xml
    classpath:jbpm.history.hbm.xml
    classpath:jbpm.identity.hbm.xml
    classpath:jbpm.repository.hbm.xml
    classpath:jbpm.task.hbm.xml
    
    
     

  

  
  
           
    
               config/hibernate/jbpm/processRoleConfig.hbm.xml
           

       

       
       
  
   
    org.hibernate.dialect.SQLServerDialect
    false
   

  

 

 
 
  


 
  
    
              
           
       

 

 
   

 
  
   
  

 

 

 
  
   
  

 

 
 
  
  
   
    PROPAGATION_REQUIRED
   

  

 

 
 
  
   
  

 

 
 
 
 
 
 
       
           
       

   

 
 
       
           
       

   

 

=================================ProcessEngineFactoryBean类=======================================

package com.utils;

import org.hibernate.SessionFactory;
import org.jbpm.api.ProcessEngine;
import org.jbpm.pvm.internal.cfg.ConfigurationImpl;
import org.jbpm.pvm.internal.processengine.SpringHelper;

/**
 * 在spring的多数据源情况下,重写jbpm的springHelper类,用以指定多数据源中某特定数据源
 *
 * @author jKF65104
 *
 */
public class ProcessEngineFactoryBean extends SpringHelper {

    protected SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public ProcessEngine createProcessEngine() {
        processEngine = new ConfigurationImpl().springInitiated(applicationContext).setResource(jbpmCfg)
                .setHibernateSessionFactory(sessionFactory).buildProcessEngine();
        return processEngine;
    }
}

 

=================================================spring-jbpm4.cfg.xml(没啥不同的这里)=================================================



 
  
 

 
 
 
 
 
 

 
 
 
 

===========================================================

 

以上可以看出当存在多数据源的情况下,官方提供的spring实例中的springHelper中的数据源获取获取默认的某个sessionFactory对象。

你可能感兴趣的:(java,jbpm4.4)