posts - 59, comments - 244, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

jbpm4.3与spring集成

Posted on 2010-01-04 23:54 penngo 阅读(11137) 评论(13)  编辑  收藏 所属分类: JBPM
jbpm4.2与spring集成有点问题,直接跟据它自己的“开发指南”提供的方法是不能集成的。在官网查到的信息是发布4.2时,忘记更新集成spring的文件。不过4.3已经把该bug改过来了。下面是集成方法。

版本:
jbpm4.3
spring2.5.6
mysql5.1.40

直接从jbpm4.3自带的文件到src目录:
从jbpm-4.3"install"src"cfg"hibernate"jdbc复制mysql.hibernate.cfg.xml到src目录,文件名改为hibernate.cfg.xml。
从jbpm-4.3"install"src"cfg"spring复制applicationContext.xml到src目录。
从jbpm-4.3"install"src"cfg"jbpm复制spring.jbpm.cfg.xml到src目录,文件名改为jbpm.cfg.xml。
修改applicationContext.xml、hibernate.cfg.xml的数据库配置信息,jbpm4.3与spring的集成就完成了,可以自己写测试文件测试,集成非常容易。

不过在applicationContext.xml和hibernate.cfg.xml两个文件都要改数据库信息有点麻烦,所以只复制applicationContext.xml、spring.jbpm.cfg.xml两个文件到src目录,把hibernate.cfg.xml的配置整进spring的配置文件applicationContext.xml中。
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" 
         xmlns:aop
="http://www.springframework.org/schema/aop" 
         xmlns:context
="http://www.springframework.org/schema/context"
          xmlns:p
="http://www.springframework.org/schema/p"
         xmlns:tx
="http://www.springframework.org/schema/tx"
       xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation
="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>
 
 
<context:annotation-config />

<bean
  
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
  p:location
="hibernate.properties"
  p:ignoreUnresolvablePlaceholders
="true" />
  
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
  
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    
<property name="dataSource" ref="dataSource" />
    
<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>
    
<property name="hibernateProperties">
        
<props>
                
<prop key="hibernate.dialect">${dataSource.dialect}</prop>
                
<prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
            
</props>
    
</property>
  
</bean>
  
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    
<property name="sessionFactory" ref="sessionFactory" />
    
<property name="dataSource" ref="dataSource" />
  
</bean>
  
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    
<property name="driverClassName" value="${dataSource.driverClassName}" />
    
<property name="url" value="${dataSource.url}" />
    
<property name="username" value="${dataSource.username}" />
    
<property name="password" value="${dataSource.password}" />
  
</bean>
</beans>

新建文件hibernate.properties,主要用来配置连接数据库信息
dataSource.password=123
dataSource.username=root
dataSource.databaseName=jbpmdb
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.dialect=org.hibernate.dialect.MySQLInnoDBDialect
dataSource.serverName=localhost:3306
dataSource.url=jdbc:mysql://${dataSource.serverName}/${dataSource.databaseName}
dataSource.properties=user=${dataSource.username};databaseName=${dataSource.databaseName};serverName=${dataSource.serverName};password=${dataSource.password}
dataSource.hbm2ddl.auto=update
以后要改数据库配置信息也只在这个文件修改就可以了。

测试用的流程swing.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process name="swing" xmlns="http://jbpm.org/4.3/jpdl">
   
<start g="94,64,48,48" name="start1">
      
<transition g="-52,-22" name="A" to="A"/>
   
</start>
   
<task assignee="A" g="73,195,92,52" name="A">
      
<transition g="-52,-22" name="B" to="B"/>
   
</task>
   
<task assignee="B" g="266,192,92,52" name="B">
      
<transition g="-40,-21" name="end" to="end1"/>
   
</task>
   
<end g="290,327,48,48" name="end1"/>
</process>


测试代码
public class Main {
    
public static void main(String[] args)  {
        ClassPathXmlApplicationContext applicationContext 
= new ClassPathXmlApplicationContext("applicationContext.xml");
        applicationContext.start();
        ProcessEngine processEngine 
= (ProcessEngine)applicationContext.getBean("processEngine");
        ExecutionService executionService 
= processEngine.getExecutionService();
        TaskService taskService 
= processEngine.getTaskService();

        
//发布流程
        String deploymentId = processEngine.getRepositoryService().createDeployment()
        .addResourceFromClasspath(
"resource/swing.jpdl.xml").deploy();
        System.out.println(
"流程发布ID:"+deploymentId);
        
        
//启动一个流程实例
        ProcessInstance processInstance = executionService.startProcessInstanceByKey("swing");
        System.out.println(
"流程实例ID:" + processInstance.getId());

        
//A处理任务
        List<Task> taskList_A = taskService.findPersonalTasks("A");
        System.out.println(
"A待处理任务数:" + taskList_A.size());
        
if(taskList_A.size() > 0){
            Task task 
= taskList_A.get(0);
            taskService.completeTask(task.getId());
        }
        
        
//B处理任务
        List<Task> taskList_B = taskService.findPersonalTasks("B");
        System.out.println(
"B待处理任务数:" + taskList_B.size());
        
if(taskList_B.size() > 0){
            Task task 
= taskList_B.get(0);
            taskService.completeTask(task.getId());
        }
        
    }
}


附件是完整的集成文件和测试代码,仅在spring2.5.6测试过,要运行该部分代码,需要添加jbpm4.3和spring的相关库文件。
源代码:jbpm4.3-spring




评论

# re: jbpm4.3与spring集成  回复  更多评论   

2010-01-05 08:45 by YagnL
4.3的集成还是挺方便的

# re: jbpm4.3与spring集成  回复  更多评论   

2010-01-05 09:47 by pengo
4.3集成spring很容易,主要是官方把这部分工作给我们做好了。

# re: jbpm4.3与spring集成  回复  更多评论   

2010-01-06 14:04 by 罗莱家纺官方网
实力的方可打开了疯狂

# re: jbpm4.3与spring集成  回复  更多评论   

2010-02-03 10:48 by
我测试的时候B处理任务处会报错 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`udpf`.`jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))

# re: jbpm4.3与spring集成[未登录]  回复  更多评论   

2010-03-26 11:07 by JK
这样配置从日志上看好像会加载两个sessionfactory

# re: jbpm4.3与spring集成  回复  更多评论   

2010-04-08 14:17 by ff
除了spring,那个jbpm4.3的jar包要加哪些

# re: jbpm4.3与spring集成[未登录]  回复  更多评论   

2010-09-09 17:55 by colin
WARNING: no objects were deployed! Check if you have configured a correct deployer in your jbpm.cfg.xml file for the type of deployment you want to do.
这是什么原因 ?

# re: jbpm4.3与spring集成  回复  更多评论   

2010-09-25 12:25 by peerless
@崔
检查一下用这个方言MySQLInnoDBDialect

# re: jbpm4.3与spring集成  回复  更多评论   

2010-12-13 12:36 by pandora jewelry
其中hsqldb和hibernate都是从jbpm4.4的lib文件夹里面拷过去的aswe

# re: jbpm4.3与spring集成  回复  更多评论   

2010-12-13 12:37 by pandora jewelry
其中hsqldb和hibernate都是从jbpm4.4的lib文件夹里面拷过去的

# re: jbpm4.3与spring集成  回复  更多评论   

2011-01-06 11:59 by achui
能把你用到的包和代码一起发给我吗,我的邮箱是achui_1980@163.com,我用你的代码测试,一直提示 Can't delete processInstance swing.7: no processInstance found for the given id,(在进入end节点的时候)

# re: jbpm4.3与spring集成  回复  更多评论   

2011-01-06 22:22 by pengo
直接看你的报错,好像不关包的问题。

# re: jbpm4.3与spring集成[未登录]  回复  更多评论   

2012-04-28 17:21 by david
Check if you have configured a correct deployer in your jbpm.cfg.xml file for the type of deployment you want to do


碰到了相同的问题啊

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问