在jbpm4的项目中,在下面的网址中看到了简单集成spring 和 jbpm4的集成方法。
http://www.slideshare.net/guest8d4bce/spring-integration-with-jbpm4
jbpm4的分支中已经有了集成的代码
http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbpm_svn/jbpm4/branches/ainze/
唯一的遗憾就是代码目前还没有和最新的代码同步,于是乎就简单的对这两块代码先做了些合并工作.
数据库:mysql
集成项:spring2.5 hibernate3.3 jbpm4
相关的类:
org.jbpm.pvm.internal.cfg.JbpmConfiguration (其中的buildProcessEngine方法 有些东西没有合并进去,可能会有些问题 ,有兴趣的可以探寻下)
org.jbpm.pvm.internal.cfg.SpringConfiguration(Tom Baeyens在TODO中,这个是ainze写的)
org.jbpm.pvm.internal.env.SpringPvmEnvironment(ainze)
org.jbpm.pvm.internal.spring.SpringConfigurationFactoryBean(ainze)
(jbpm.cfg.xml中只需要注释掉hibernate的配置即可)
spring 配置--使用了SpringConfigurationFactoryBean(调整自ainze)的方式配置时 这个就是spring集成的最简配置
<!-- jbpm4配置 --> <bean id="configuration" class="org.jbpm.spring.cfg.SpringConfigurationFactoryBean"> <property name="jbpmConfigurationLocation" value="jbpm.cfg.xml"></property> <property name="sessionFactory" ref="sessionFactory" /> </bean>
测试代码--org.jbpm.spring.test.AbstractTransactionalSpringJbpmTestCase(author Andries Inze)
public class SimpleProcessTest extends AbstractTransactionalSpringJbpmTestCase{ @Override protected String[] getConfigLocations() { return new String[]{"classpath:test-context-hibernate.xml"}; }
public void test1(){ deployJpdlXmlString( "<process name='p'>" + " <start>" + " <transition to='a'/>" + " </start>" + " <state name='a'>" + " <transition to='b'/>" + "</state>" + " <state name='b'>" + " <transition to='c'/>" + "</state>" + " <state name='c'/>" + "</process>"); Execution execution = executionService.startProcessInstanceByKey("p"); execution = executionService.findExecutionById(execution.getId());//.findExecution(execution.getId()); assertNotNull(execution); assertEquals("a", execution.getActivityName()); //a流向b execution = executionService.signalExecutionById(execution.getId()); assertNotNull(execution); assertEquals("b", execution.getActivityName()); //b流向c execution = executionService.signalExecutionById(execution.getId()); assertNotNull(execution); assertEquals("c", execution.getActivityName()); //再次启动流程 execution = executionService.startProcessInstanceByKey("p"); //第三次启动流程 execution = executionService.startProcessInstanceByKey("p"); assertEquals(3,executionService.createProcessInstanceQuery().list().size()); } }