现在流行抱大腿,不过对眼光的要求也颇高。要不就如高也,即使四眼,一样无用。对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配置】是将业务流程管理(Business Process Management, BPM)框架jbpm与企业级应用开发框架Spring相结合的实践。jbpm是一个开源的BPM解决方案,它提供了流程定义、执行、监控和管理的一整套工具。而...
1. **Spring配置JBPM4**:首先,我们需要在Spring的配置文件中声明对JBPM4的依赖,包括数据源、事务管理器以及JbpmContext的bean。数据源用于连接数据库存储的流程实例信息,事务管理器确保流程操作的原子性,而...
首先,我们需要在Spring配置文件中定义JBPM的相关bean,包括流程引擎、工作内存、流程定义仓库等。这些bean是Spring与JBPM交互的基础,通过它们可以启动流程实例、执行任务以及查询流程状态。 其次,创建流程定义...
将jbpm4集成到Spring中,可以充分利用Spring的管理优势,提高流程服务的可测试性和可配置性。 在“jbpm4 集成 spring”的场景中,我们需要关注以下几个关键知识点: 1. **集成配置**:首先,我们需要在Spring的...
1. **配置jBPM4的数据源**:在Spring配置文件中,我们需要为jBPM4定义一个数据源,这通常是通过JNDI查找或直接定义HSQLDB等内存数据源来完成的。 2. **创建ExecutorService**:jBPM4需要ExecutorService来调度和执行...
- **jbpm配置**:需要在Spring配置文件中定义jbpm的数据源、事务管理器、流程引擎工厂等bean。 - **Spring MVC配置**:配置DispatcherServlet、视图解析器、模型-视图映射等,同时设置jbpm相关bean的事务属性。 -...
【标题】"jbpm4.4spring.rar_jbpm4_jbpm4.4" 提供的是一个关于JBPM4.4与Spring框架整合的实际应用案例。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行、管理和监控...
在Spring配置中,需要设置数据源,并配置jbpm的持久化策略,例如JPA或Hibernate。 4. **流程部署**:jbpm的流程定义(.bpmn2文件)需要在Spring启动时或者运行时部署到jbpm引擎。这可以通过jbpm提供的API或者Spring...
- `jbpm-4.3/install/src/cfg/jbpm/spring.jbpm.cfg.xml`:JBPM与Spring集成的关键配置文件。 #### 三、配置文件调整 接下来,我们将对这些配置文件进行必要的修改。 1. **调整`hibernate.cfg.xml`**:在`...
这需要将jbpm4的相关服务迁移到Spring的配置中,让Spring管理事务,从而降低系统的耦合度。 在整合过程中,首先面临的是jbpm4的jpdl插件安装问题。jbpm4的流程定义通常使用JPDL(JBoss Process Definition Language...
在`JBPM5Spring`项目中,通常会有一个`spring-context.xml`配置文件,这里会定义数据源、事务管理器、jbpm的工作流服务等。例如,数据源配置可能如下: ```xml <bean id="dataSource" class="org.springframework....
在整合过程中,通常会创建一个Spring配置文件,其中包含Jbpm4和Hibernate的相关配置。例如,会配置Jbpm4的数据源、流程引擎工厂,以及Hibernate的SessionFactory。同时,需要确保所有必需的JAR文件,包括Jbpm4、...
4. **JBPM与Spring集成**: - **集成意义**:结合JBPM的工作流引擎能力和Spring的灵活性,构建高效、可维护的业务流程管理系统。 - **集成要点**:包括Spring的依赖注入来管理JBPM组件,使用Spring的AOP支持工作流...
【jbpm+spring web简单借款工作流实例项目详解】 jbPM(Java Business Process Management)是一个开源的工作流程管理系统,它提供了一套完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控和管理等...
**Jbpm4.4整合Spring Hibernate4详解** Jbpm4.4是一个流程管理系统,它结合了业务流程管理(BPM)和工作流服务,提供了强大的流程定义、执行和监控能力。在这个版本中,Jbpm与Spring框架和Hibernate ORM工具进行了...
总的来说,"提前试用spring 集成 jbpm4"意味着你需要理解Spring框架和jbpm4 BPM平台的工作原理,学习如何在Spring环境中配置和使用jbpm4,以及如何设计和部署符合业务需求的工作流程。这个过程涵盖了数据库配置、...
4. **流程定义与部署**:使用Spring的ApplicationContext加载BPMN2.0格式的流程定义文件,并部署到JBPM引擎中。 5. **服务与监听器**:注册JBPM的服务如JobExecutor、EventListeners等,以实现定制化功能和事件处理...
在使用Spring Integration时,需要配置JBPM4和Spring框架的集成。这种配置可以通过在applicationContext.xml文件中配置bean来实现。在测试时,需要使用jUnit框架来测试JBPM4和Spring框架的集成。 知识点5:Q&A 在...
"jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例" 这个标题表明我们将会探讨一个关于jBPM4的具体实战项目,特别关注的是如何将jBPM4版本与SSH(Spring、Struts和Hibernate)框架整合,并提供了一个完整的实现示例...