`
ProgramerNi
  • 浏览: 1080 次
  • 性别: Icon_minigender_1
  • 来自: 台州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JBPM4 Spring 配置

    博客分类:
  • java
阅读更多
现在流行抱大腿,不过对眼光的要求也颇高。要不就如高也,即使四眼,一样无用。对Java企业开发而言,Spring的腿则是一定要抱的。而所谓抱Spring的腿,无外乎三点:



一是通过Spring暴露出服务,将服务配置到Spring的IOC容器里;

二是在自己的运行环境里访问到Spring的IOC容器,能够轻松使用Spring容器里所配置的服务;

三是对于具有事务管理特性的项目来说,将事务管理与Spring的事务管理进行合并。


      下面分别讨论:

一、    通过Spring暴露服务
还记得在jBPM4的运行期环境里提到的JbpmConfiguration吗?它是整个jBPM4的入口,并且是整个应用独此一份的。通过它可以获取processEngine,并藉此获得工作流引擎所提供的各种服务:

Java代码 
ProcessEngine processEngine = new Configuration()   
      .buildProcessEngine();  

ProcessEngine processEngine = new Configuration()
      .buildProcessEngine(); 



RepositoryService repositoryService = processEngine.getRepositoryService();   
ExecutionService executionService = processEngine.getExecutionService();   
TaskService taskService = processEngine.getTaskService();   
HistoryService historyService = processEngine.getHistoryService();   
ManagementService managementService = processEngine.getManagementService();  

RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService(); 



通过Spring暴露这些服务,配置如下:


<bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">  
        <constructor-arg value="be/inze/spring/demo/jbpm.cfg.xml" />  
    </bean>  
      
    <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />  
    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />  
    <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />  

<bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
        <constructor-arg value="be/inze/spring/demo/jbpm.cfg.xml" />
    </bean>
   
    <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />
    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
    <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />  



细心的你会发现,配置时使用了JbpmConfiguration 的子类SpringConfiguration。SpringConfiguration相比JbpmConfiguration有哪些增强呢,下面再讲。总之,现在,就可以使用Spring来获取或注入这些Jbpm4所提供的服务了。

二、在environment里加入SpringContext
jBPM4的environment(运行期环境)提供Engine IOC(process-engine-context)和Transaction IOC(transaction-context)。要想在运行期方便地访问到Spring里所配置的服务,最直接的方法就是在environment里加入Spring IOC(applicationContext)的引用。


SpringConfiguration即是对JbpmConfiguration增强了对Spring IOC的一个引用。



SpringConfiguration是如何做到的呢?简单,实现Spring的ApplicationContextAware接口,自动持有applicationContext,然后openEnvironment时将其加入environment。


Java代码 
environment.setContext(new SpringContext(applicationContext));  

environment.setContext(new SpringContext(applicationContext));



SpringContext是对applicationContext的简单封装。

那么什么从Engine IOC移民到Spring IOC了呢?是的,最重要的就是Hibernate Session Factory。

在jbpm.cfg.xml的process-engine-context里干掉:


Xml代码 
<hibernate-configuration>  
  <cfg resource="jbpm.hibernate.cfg.xml" />       
</hibernate-configuration>  
  
<hibernate-session-factory />  

    <hibernate-configuration>
      <cfg resource="jbpm.hibernate.cfg.xml" />    
    </hibernate-configuration>

    <hibernate-session-factory /> 


 
相关配置挪动至Spring配置文件。

三、    事务
哪里有数据库操作,哪里就有事务。对于嵌入式工作流而言,最重要的集成就是事务的集成。这里先分析jBPM4的事务实现,然后再介绍集成入Spring的事务实现。

1、    Command模式
jBPM4的逻辑实现采用了Command模式。



采用Command模式后,jBPM4对CommandService构造拦截器(Interceptor)链,配置在jbpm.cfg.xml的process-engine-context里:

<command-service>  
      <retry-interceptor />  
      <environment-interceptor />  
      <standard-transaction-interceptor />  
    </command-service>  

<command-service>
      <retry-interceptor />
      <environment-interceptor />
      <standard-transaction-interceptor />
    </command-service> 



2、    原有的事务实现
jBPM4原有的事务通过StandardTransactionInterceptor实现,在CommandService执行Command之前打开事务(实际委派Hibernate的事务管理),完成后提交/回滚。




jBPM4的事务是基于Command的。

3、    集成入Spring的事务实现
Spring的事务是基于服务调用的。




使jBPM4使用Spring提供的事务:

<command-service>  
      <retry-interceptor />  
      <environment-interceptor />  
      <spring-transaction-interceptor current="true" />  
</command-service>  

<command-service>
      <retry-interceptor />
      <environment-interceptor />
      <spring-transaction-interceptor current="true" />
</command-service> 



拦截器换用SpringTransactionInterceptor,SpringTransactionInterceptor从environment 提供的Spring IOC获取PlatformTransactionManager,使用事务模板回调Command,事务传播模式强制加入当前事务。

同时,对hibernate session的配置(jbpm.cfg.xml的transaction-context)强制从当前线程中获取:

<hibernate-session current="true"/>
 


并干掉原有的事务实现:

Xml代码 
<transaction />  
分享到:
评论

相关推荐

    jbpm+spring配置

    【jbpm+spring配置】是将业务流程管理(Business Process Management, BPM)框架jbpm与企业级应用开发框架Spring相结合的实践。jbpm是一个开源的BPM解决方案,它提供了流程定义、执行、监控和管理的一整套工具。而...

    JBPM4与Spring整合例子代码

    1. **Spring配置JBPM4**:首先,我们需要在Spring的配置文件中声明对JBPM4的依赖,包括数据源、事务管理器以及JbpmContext的bean。数据源用于连接数据库存储的流程实例信息,事务管理器确保流程操作的原子性,而...

    JBPM4.3 Spring会签 实例

    首先,我们需要在Spring配置文件中定义JBPM的相关bean,包括流程引擎、工作内存、流程定义仓库等。这些bean是Spring与JBPM交互的基础,通过它们可以启动流程实例、执行任务以及查询流程状态。 其次,创建流程定义...

    jbpm4 集成 spring 的试用代码

    将jbpm4集成到Spring中,可以充分利用Spring的管理优势,提高流程服务的可测试性和可配置性。 在“jbpm4 集成 spring”的场景中,我们需要关注以下几个关键知识点: 1. **集成配置**:首先,我们需要在Spring的...

    jBPM4与Spring整合的2种方式

    1. **配置jBPM4的数据源**:在Spring配置文件中,我们需要为jBPM4定义一个数据源,这通常是通过JNDI查找或直接定义HSQLDB等内存数据源来完成的。 2. **创建ExecutorService**:jBPM4需要ExecutorService来调度和执行...

    jbpm5.4 spring mvc 集成

    - **jbpm配置**:需要在Spring配置文件中定义jbpm的数据源、事务管理器、流程引擎工厂等bean。 - **Spring MVC配置**:配置DispatcherServlet、视图解析器、模型-视图映射等,同时设置jbpm相关bean的事务属性。 -...

    jbpm4.4spring.rar_jbpm4_jbpm4.4

    【标题】"jbpm4.4spring.rar_jbpm4_jbpm4.4" 提供的是一个关于JBPM4.4与Spring框架整合的实际应用案例。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行、管理和监控...

    jbpm与spring集成

    在Spring配置中,需要设置数据源,并配置jbpm的持久化策略,例如JPA或Hibernate。 4. **流程部署**:jbpm的流程定义(.bpmn2文件)需要在Spring启动时或者运行时部署到jbpm引擎。这可以通过jbpm提供的API或者Spring...

    jbpm4.3与spring整合

    - `jbpm-4.3/install/src/cfg/jbpm/spring.jbpm.cfg.xml`:JBPM与Spring集成的关键配置文件。 #### 三、配置文件调整 接下来,我们将对这些配置文件进行必要的修改。 1. **调整`hibernate.cfg.xml`**:在`...

    jbpm4整合struts2+spring2.5+hibernate3.3

    这需要将jbpm4的相关服务迁移到Spring的配置中,让Spring管理事务,从而降低系统的耦合度。 在整合过程中,首先面临的是jbpm4的jpdl插件安装问题。jbpm4的流程定义通常使用JPDL(JBoss Process Definition Language...

    JBPM5 Spring 例子

    在`JBPM5Spring`项目中,通常会有一个`spring-context.xml`配置文件,这里会定义数据源、事务管理器、jbpm的工作流服务等。例如,数据源配置可能如下: ```xml &lt;bean id="dataSource" class="org.springframework....

    jbpm4+spring+hibernate

    在整合过程中,通常会创建一个Spring配置文件,其中包含Jbpm4和Hibernate的相关配置。例如,会配置Jbpm4的数据源、流程引擎工厂,以及Hibernate的SessionFactory。同时,需要确保所有必需的JAR文件,包括Jbpm4、...

    JBPM与Spring集成开发指南.docx

    4. **JBPM与Spring集成**: - **集成意义**:结合JBPM的工作流引擎能力和Spring的灵活性,构建高效、可维护的业务流程管理系统。 - **集成要点**:包括Spring的依赖注入来管理JBPM组件,使用Spring的AOP支持工作流...

    jbpm+spring的web简单借款工作流实例项目

    【jbpm+spring web简单借款工作流实例项目详解】 jbPM(Java Business Process Management)是一个开源的工作流程管理系统,它提供了一套完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控和管理等...

    Jbpm4.4 整合Spring Hibernate4

    **Jbpm4.4整合Spring Hibernate4详解** Jbpm4.4是一个流程管理系统,它结合了业务流程管理(BPM)和工作流服务,提供了强大的流程定义、执行和监控能力。在这个版本中,Jbpm与Spring框架和Hibernate ORM工具进行了...

    提前试用spring 集成 jbpm4

    总的来说,"提前试用spring 集成 jbpm4"意味着你需要理解Spring框架和jbpm4 BPM平台的工作原理,学习如何在Spring环境中配置和使用jbpm4,以及如何设计和部署符合业务需求的工作流程。这个过程涵盖了数据库配置、...

    JBPM与Spring集成开发指南

    4. **流程定义与部署**:使用Spring的ApplicationContext加载BPMN2.0格式的流程定义文件,并部署到JBPM引擎中。 5. **服务与监听器**:注册JBPM的服务如JobExecutor、EventListeners等,以实现定制化功能和事件处理...

    Spring与JBPM4的集成.docx

    在使用Spring Integration时,需要配置JBPM4和Spring框架的集成。这种配置可以通过在applicationContext.xml文件中配置bean来实现。在测试时,需要使用jUnit框架来测试JBPM4和Spring框架的集成。 知识点5:Q&A 在...

    jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例

    "jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例" 这个标题表明我们将会探讨一个关于jBPM4的具体实战项目,特别关注的是如何将jBPM4版本与SSH(Spring、Struts和Hibernate)框架整合,并提供了一个完整的实现示例...

Global site tag (gtag.js) - Google Analytics