`
pesome
  • 浏览: 67952 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jbpm+Spring深度整合

阅读更多

网上找了些关于JbpmSpring整合的文章,也对我帮助很大。但它们都是简单的配置,没有涉及到具体的使用和可能出现的问题(比如业务对象用的Annotation配置,而jbpm用的xml方式)。我把项目中的使用和经验写下来,也算做个总结吧。

整合使用的springmodules,它的原理其实很简单,使用Spring容器IoC提供的BeanFactory功能初始化jbpmconfiguration,同时使用回调方法,整合jbpm contextcreateclose。我们先看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实现了springInitializingBean, 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方法,然后在finallyclose 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

 

有了这些基础设施,我们要进行测试就很简单。我都是使用springAbstractTransactionalDataSourceSpringContextTests进行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); } }); }

  

1
0
分享到:
评论
1 楼 lai555 2010-08-05  
<bean id="jbpmConfiguration"
class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
<property name="configuration" value="classpath:jbpm.cfg.xml"></property>
  </bean>


请问如何与用JPA注解的项目集成.

相关推荐

    jbpm +ssh整合

    总的来说,jbpm与SSH的整合实现了业务流程与Java Web应用的深度集成,提供了从流程设计到执行、监控的全面解决方案。通过这个例子,开发者不仅可以学习如何利用jbpm管理业务流程,还能掌握如何将这些流程与SSH框架...

    JBPM4.4+SSH2完整整合jar包

    【JBPM4.4+SSH2完整整合jar包】是一个包含了一系列Java库的压缩包,主要用于帮助开发者在Java环境中实现业务流程管理(BPM)与Spring(SSH中的S)、Struts(SSH中的H)和Hibernate(SSH中的H)的深度集成。这个整合...

    Spring 3.1.x + Hibernate 4.2.x+JBPM 5.2 + Ecache例子

    这个项目可能是一个完整的业务流程管理系统,它整合了Spring、Hibernate、JBPM和Ecache等关键组件。下面将详细阐述这些技术及其在项目中的作用。 1. **Spring 3.1.x**: Spring 是一个开源的Java框架,用于简化...

    工作流(JBPM)一些有用资料整合

    "JBPM与SPRING事务整合之深度历险"这一主题着重探讨了如何在Spring环境中配置和使用JBPM,确保工作流操作与Spring的事务管理无缝集成。Spring是一个广泛应用的轻量级Java框架,提供了丰富的企业级功能,包括事务管理...

    JBPM5.4 SSH 完整项目整合案例

    【JBPM5.4 SSH 完整项目整合案例】是一个基于Java企业级开发的实践项目,它涵盖了三个关键的技术栈:Struts2(S),Spring(S)和Hibernate(H),通常称为SSH框架。这个项目旨在展示如何将业务流程管理(BPM)工具...

    JBPM整合项目.doc

    总的来说,JBPM的整合涉及多个层面,从库的管理到配置文件的定制,再到数据库的初始化,最后与Spring的深度融合。每一个步骤都需要细心处理,以确保整个工作流管理系统的稳定运行。理解并掌握这些步骤,对于开发者来...

    jbpm—web工程

    【jbpm—web工程】是一个综合性的项目,它将jbpm(Java Business Process Management)与Struts、Spring和Hibernate这三大主流的Java开发框架进行了深度整合。该项目的主要目的是构建一个功能完善的Web应用程序,...

    大型OA办公自动化系统介绍

    《大型OA办公自动化系统介绍——基于JBPM、动态表单与权限管理的深度解析》 在信息化日益发达的今天,大型企业对办公自动化系统(OA)的需求愈发强烈。OA系统能够有效整合企业内部资源,提高工作效率,降低运营成本...

    spring-modules-0.8

    总的来说,Spring Modules 0.8是Spring框架的重要扩展,它提升了Spring的灵活性和可扩展性,特别是在与jbpm的整合中,为开发者带来了强大的业务流程管理能力。通过深入理解和应用Spring Modules,我们可以构建出更加...

    SSH和Jbpm4.4

    此外,JBPM4.4还包括任务管理、事件处理、规则集成等功能,可以与Spring、Hibernate等其他框架无缝集成,实现业务流程与应用程序的深度耦合。 在“struts_spring_hibernate_jbpm”这个文件中,我们可以推测这是将...

    JBPM_用户指南

    #### 十八、和Maven,OSGi,Spring的整合 - **18.1 Maven** - 介绍了如何将JBPM与Maven项目进行整合。 - **18.2 OSGi** - 介绍了如何将JBPM与OSGi环境进行整合。 以上内容概括了JBPM用户指南的主要知识点,为...

    讲师介绍

    - 开发平台:J2EE (JSP、Servlet、Struts、Hibernate、Spring)、Eclipse3.2.1、SQL Server 2005、Tomcat5.0.20、jBPM3、Spring Security等。 - **某市公安局管理与信息系统**:担任项目经理,负责项目的整体架构...

    基于JavaEE的公文传输系统的设计与实现

    其次,公文的创建、审批流程可能采用工作流引擎,如Activiti或JBPM,结合EJB或Spring框架,实现业务逻辑的自动化。这些工作流引擎能帮助定义和执行复杂的审批流程,确保公文按照既定规则流转。 再者,系统需要有...

    达内java招生简章.pdf

    6. 主流开源框架和技术解决方案:如Struts2.1.6、Hibernate3.2、Spring2.5、Lucene、JBPM、Apache Commons等。 总的来说,达内的Java培训课程旨在培养适应3G、物联网时代需求的Java开发者,通过全面而深入的课程...

Global site tag (gtag.js) - Google Analytics