网上找了些关于Jbpm和Spring整合的文章,也对我帮助很大。但它们都是简单的配置,没有涉及到具体的使用和可能出现的问题(比如业务对象用的Annotation配置,而jbpm用的xml方式)。我把项目中的使用和经验写下来,也算做个总结吧。
整合使用的springmodules,它的原理其实很简单,使用Spring容器IoC提供的BeanFactory功能初始化jbpm的configuration,同时使用回调方法,整合jbpm context的create和close。我们先看springmodules提供的LocalJbpmConfigurationFactoryBean的配置文件:
<bean id="jbpmConfiguration" class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean"> <property name="sessionFactory" ref="sessionFactory" /> <property name="createSchema" value="false" /> <property name="configuration"> <value>classpath:jbpm.cfg.xml</value> </property> </bean>
而sessionFactory就是在spring中配置的bean,我使用了AnnotationSessionFactoryBean,它能够兼容xml方式的hibernate配置。LocalJbpmConfigurationFactoryBean实现了spring的InitializingBean, DisposableBean, FactoryBean, BeanFactoryAware, BeanNameAware,容器启动就会载入执行afterPropertiesSet方法,它在这个方法中进行了大量的初始化工作。
然后配置jbpmTemplate Bean,配置如下:
ref了一个contractDefinition。它本身示例是通过definitionLocation,读取文件创建definition。而我们要和数据库的流程配合,就需要每次启动从数据库中读取最新的definition,所以我写了DefinitionFactoryBean,由这个bean启动时初始化definition然后注入到template中。DefinitionFactoryBean的配置和部分代码如下:
<bean id="contractJbpmTemplate" class="com.ibm.contract.process.ExtendJbpmTemplate"> <property name="jbpmConfiguration" ref="jbpmConfiguration" /> <property name="processDefinition" ref="contractDefinition" /> </bean>
这里我
提供的JbpmTemplate持有jbpmConfiguration引用,在它的public Object execute(final JbpmCallback callback)方法中进行回调处理,先创建jbpmContext,然后执行callback方法,然后在finally中close jbpmContext。
<bean id="contractDefinition" class="com.ibm.contract.process.DefinitionFactoryBean"> <property name="definitionName" value="contract" /> <property name="jbpmConfiguration" ref="jbpmConfiguration" /> </bean> public void afterPropertiesSet() throws Exception { if (this.definitionName == null) { throw new FatalBeanException("Property [definitionName] of class [" + ProcessDefinitionFactoryBean.class.getName() + "] is required."); } JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); GraphSession graphSession = jbpmContext.getGraphSession(); processDefinition = graphSession .findLatestProcessDefinition(definitionName); }
springmodules
有了这些基础设施,我们要进行测试就很简单。我都是使用spring的AbstractTransactionalDataSourceSpringContextTests进行autowire。比如进行deployTest:
public class DeployTest extends BaseProcessTestCase { private JbpmConfiguration jbpmConfiguration; public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) { this.jbpmConfiguration = jbpmConfiguration; } public void testDeployProcessDefinition() throws FileNotFoundException { // 由jbpm自己 取得 jbpm 配置 // JbpmConfiguration config = JbpmConfiguration.getInstance(); // 创建一个 jbpm 容器 JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); // 由 processdefinition.xml 生成相对应的流程定义类 ProcessDefinition InputStream is = getClass().getResourceAsStream( "/contract/processdefinition.xml"); ProcessDefinition processDefinition = ProcessDefinition .parseXmlInputStream(is); // 利用容器的方法将流程定义数据部署到数据库上 jbpmContext.deployProcessDefinition(processDefinition); // 关闭 jbpmContext jbpmContext.close(); }
如果使用JbpmConfiguration config = JbpmConfiguration.getInstance();那么它会使用jbpm自己的机制,而对于使用了annotation方式配置的entity,就会报错。所以我注入配置的jbpmConfiguration,使用spring来进行session初始化。
对于jbpmTemplate的使用就很简单了,它已经注入了definition和context,可以调用它已经提供的一些具体方法,也可以调用execute,比如:
public TaskInstance loadTask(final long taskId) { return (TaskInstance) execute(new JbpmCallback() { public Object doInJbpm(JbpmContext context) { return context.loadTaskInstance(taskId); } }); }
分享到:
相关推荐
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
JBPM4.4+spring+ext整合
jbpm+spring的web简单借款工作流实例项目,里面含详细的数据库能运行
Jbpm+Spring+hibernate+struts2+mysql+c3p0项目部署
Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件
spring+struts+hibernate+jbpm+dwr整合开发的OA办公系统源码
Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合 超级详细的文档,透彻讲解JBPM与SSH的整合过程
jbpm+spring的web简单借款工作流实例项目.rar
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
spring+jbpm的配置示例,jbpm配置,希望大家一起进行学习,共同提高
附带数据库,可以直接部署后运行。数据库版本为mysql
jbpm4整合struts2+spring2.5+hibernate3.3.doc
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
JBPM5+Spring+Hibernate+MySQL 请假例子
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/<br>
参考网上例子和自己所学所编写的一个程序,时间仓促,部分功能为实现,仅供大家学习参考。攒点分数而已