和Jbpm3一样,Jbpm4实现了自己的IOC容器。以现在的眼光看来,应用程序里一个IOC容器几乎是居家必备的,否则,又要平白多出一坨一坨的工厂类和单态类来。
一、 Jbpm4 IOC容器介绍
IOC容器的目的是管理组件和实现组件之间的解耦。和Spring里的BeanFactory对应,Jbpm4里的接口是Context,具体实现则是WireContext。Context实际在Jbpm4里有更多的含义,它与Environment一起,共同构成了代码运行的运行期环境。在这个环境里可以获取系统的组件,更为重要的是提供了数据库连接(session)和事务(这个稍后会讲)。
先来看看Context接口的核心方法:
- Object get(String key);
-
- T> T get(Class<T> type);
很明显,提供两种从容器里获取组件的方法,一种是通过name,一种是通过type。
对于IOC容器来说,一般情况下都会提供一种加载的方式,比如从xml文件进行加载、从资源文件进行加载。Jbpm4透过WireParser具备从xml加载的能力。
此外,WireContext通过一个Map缓存初始化后的组件。
二、 Jbpm4 IOC容器实现
容器的实现有五个关键类和接口,分别是:WireParser、Binding、Descriptor、WireDefinition和WireContext。
WireParser读取xml文件,同时WireParser会加载一系列的Binding(默认从jbpm.wire.bindins.xml文件读取加载)。
Binding负责根据xml里元素的tag将xml元素转换为对应的Descriptor。
Descriptor负责初始化对象。它们被添加到WireDefinition。
WireDefinition被WireParser返回给WireContext。WireContext创建对象时会访问WireDefinition里的Descriptor,同时将初始化对象的任务委托给Descriptor自身。
需要注意的是:Jbpm4在初始化对象时有着四种策略,分别是:延迟创建和初始化、延迟创建和立刻初始化、立刻创建和延迟初始化、立刻创建和立刻初始化。
立刻创建:在WireContext创建完毕后对象就已经创建。
延迟创建:调用WireContext的get方法获取该对象时才创建该对象。
初始化:一般完成对象属性的注入等操作。
三、 Jbpm4 IOC容器在Jbpm4里的应用
IOC容器在Jbpm4里最重要的作用就是加载Jbpm的总的配置文件(默认是jbpm.cfg.xml),这也是整个Jbpm应用的起点。大概扫一下这个配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
-
- <jbpm-configuration xmlns="http://jbpm.org/xsd/cfg">
-
- <process-engine-context>
-
- <repository-service />
- <repository-cache />
- <execution-service />
- <history-service />
- <management-service />
- <identity-service />
- <task-service />
-
- <hibernate-configuration>
- <cfg resource="jbpm.hibernate.cfg.xml" />
- </hibernate-configuration>
-
- <hibernate-session-factory />
-
- </process-engine-context>
-
- <transaction-context>
- <repository-session />
- <pvm-db-session />
- <job-db-session />
- <task-db-session />
- <message-session />
- <timer-session />
- <history-session />
- </transaction-context>
-
- </jbpm-configuration>
可以看到配置文件被分为了两部分,分别是:process-engine-context和transaction-context。在实际应用中,它们分别对应着两个不同的WireContext:ProcessEngineContext和TransactionConext。ProcessEngineContext覆盖了jbpm4里最重要的服务类,这些类是全局唯一的,当然,ProcessEngineContext也是独此一份。本是同根生,命运各不同。TransactionConext则是在每次openEnvironment时重新创建,因为其包含了数据库连接和事务。
贯穿于整个Jbpm4中,这两个Context被压到Environment里(Environment和线程绑定),在任何需要的地方都能提供一条龙的服务。于是,在很多领域类里,利用这些服务实现充血模型就是很顺理成章的一件事了。
总结: ProcessEngineContext给引擎领域模型提供全局的组件查找;TransactionConext提供数据库相关服务。
转自:http://www.iteye.com/topic/381607
- 大小: 79.6 KB
分享到:
相关推荐
- **IOC容器统一**:jbpm4有自己的IOC容器,但在与Spring集成时,我们通常会将jbpm4的服务迁移到Spring的IOC容器中,利用Spring的强大功能进行服务管理和事务处理。 - **Spring事务管理**:Spring提供了声明式事务...
Spring作为控制反转(IoC)和面向切面编程(AOP)的容器,提供了一整套企业级应用开发的服务。它通过依赖注入管理对象的生命周期和协作,简化了Java应用的开发和维护。在与JBPM4整合中,Spring可以用于管理和初始化...
首先,jbpm4本身拥有一个IOC容器,但为了更好地整合其他框架,通常会选择Spring作为统一的容器来管理和协调所有服务,包括jbpm4的服务。这需要将jbpm4的相关服务迁移到Spring的配置中,让Spring管理事务,从而降低...
3. **IOC容器**: - 初始化时会读取配置文件中的绑定信息,创建必要的服务组件。 - 支持动态配置和插件式扩展。 #### 七、总结 通过对jBPM4的PVM实现的深入解析,我们可以看到PVM不仅是一个强大的流程执行引擎,...
Spring 集成 JBPM4 是一种将灵活的工作流管理功能与企业级应用程序相结合的方法。JBPM4 是一个开源的工作流管理系统,它提供了流程定义、执行、监控和管理的全面解决方案。Spring 框架则以其强大的依赖注入(DI)和...
而所谓抱Spring的腿,无外乎三点:一是通过Spring暴露出服务,将服务配置到Spring的IOC容器里;二是在自己的运行环境里访问到Spring的IOC容器,能够轻松使用Spring容器里所配置的服务;三是对于具有事务管理特性的...
Jbpm通过Spring的IoC(Inversion of Control)容器来管理其bean,使得流程实例的创建、事务处理和异常管理等都可以由Spring来控制。这不仅简化了代码,还提高了系统的可测试性和可维护性。 在开始整合之前,你需要...
4. **Service层接口与实现**:定义了与Jbpm交互的方法,如启动流程、查询任务等。 5. **DAO层**:实现与数据库的交互,通常使用Hibernate的Session工厂进行操作。 6. **Action类**:Struts2的Action,处理前端请求,...
- **Spring**:是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,简化了应用程序的组件管理,同时提供了事务管理、安全控制等功能。 - **Hibernate**:是一个对象关系映射(ORM)框架,用于简化Java应用...
综上所述,这个项目利用Spring的IoC和AOP特性,结合Hibernate的ORM能力,以及Jbpm的流程管理功能,构建了一个支持业务流程的Web应用。MySQL作为数据库提供数据存储服务。测试部分则通过"TestJBPM"确保流程设计的正确...
在SSH+jBPM5.4的项目中,Spring可以用于配置jbpm5.4的相关bean,比如流程引擎、工作内存、任务服务等,使得它们能够在Spring容器中被管理和依赖注入。Struts可以用来处理用户界面的交互,展示流程的状态和任务列表,...
架构描述:本系统Web展现层采用了流行的Extjs框架,极大的提高了用户体验,控制层采用Struts2,利用Spring的IoC容器来管理业务对象和Struts2的Action,让Spring的IoC容器将业务对象注入给Struts2的Action,采用DI...
Spring的核心在于IoC(Inversion of Control)容器,它负责管理对象的生命周期和依赖关系。通过XML配置或注解方式,Spring可以轻松地实现对象的创建、装配和管理,使得代码更加松耦合,易于测试和维护。同时,Spring...
1. **Spring集成**:jbpm可以利用Spring的IoC容器管理其组件,如工作流服务、任务服务等。通过Spring配置文件,我们可以声明式地注入jbpm的服务,实现服务的创建和管理。 2. **Struts集成**:Struts作为前端控制器...
IOC使得对象的创建和依赖关系的管理交由Spring容器处理,降低了组件间的耦合度。AOP允许开发者定义横切关注点,如日志、事务管理等,这些关注点可以被模块化并独立于业务代码。此外,Spring还提供了数据访问抽象,如...
整合 SSH2,意味着将 jBPM 的业务逻辑和持久化层与 Spring 结合,利用 Spring 的 IoC 容器管理和事务控制,同时通过 Hibernate 实现数据的CRUD(创建、读取、更新和删除)操作。 **数据库创建** 在整合过程中,...
### **IOC容器与配置** jBPM使用XML配置文件(如jbpm.cfg.xml)来管理对象和依赖关系,包括`<objects>`定义的对象池、`<transaction-context/>`的事务管理,以及`<process-engine-context/>`的引擎上下文。 ### **...
Spring的IoC容器使得对象之间的依赖关系可以通过配置文件或注解来管理,降低了代码的耦合度。Spring AOP允许开发者定义方法拦截器和切入点,实现事务管理、日志记录等功能。 3. Hibernate:Hibernate是一个强大的...
Spring的IoC容器管理了项目中的对象实例,而Spring AOP则可以方便地进行日志记录、性能监控等通用功能的实现。在本项目中,Spring将负责整个系统的上下文管理和业务逻辑的处理。 Struts框架则是经典的Java Web MVC...