第 11 章 环境
11.1. 简介
环境组件由连接环境组合是一种控制反转(IoC)容器。 它读取配置信息, 描述对象应该如何实例化,如何配置,如何连接在一起。
环境被用来获得Activity实现 和流程虚拟机所需的资源和服务。 主要目的是让流程虚拟机的多个部分可配置, 这样PVM和运行在顶部的语言可以工作在一个标准Java环境 也可以在一个企业Java环境。
环境被分成一系列环境。 每个环境可以拥有自己的生命周期。比如,流程引擎环境会 覆盖应用的全生命时间。块环境只对try-finally块周期内起作用。 一般一个块环境负责一个数据库事务。 每个环境暴露一个key-value列表。 pairs.
11.2. EnvironmentFactory
为了开始和一个环境进行工作,你需要一个EnvironmentFactory. 一个单独的环境工厂对象可以被用在整个应用的完整生命时间里。 所以一般这会保存在一个静态成员变量中。 EnvironmentFactory自己在流程引擎环境中
一个EnvironmentFactory一般被获得 通过解析一个配置文件,像这样:
static EnvironmentFactory environmentFactory =
EnvironmentFactory.parse(new ResourceStreamSource("pvm.cfg.xml");
参考javadocs包org.jbpm.stream,获得流源的更多类型。
这是一个环境工厂中的默认解析器, 会创建DefaultEnvironmentFactory. 这个主意是我们也会支持spring作为Ioc容器,但是这还处于TODO状态。 很欢迎大家在这方面帮助我们:-)。这个解析器可以使用静态setter方法配置 EnvironmentFactory.setParser(Parser)。
11.3. 环境块
一个环境为try-finally块的范围而存在。 这是一个环境块看起来像怎样:
Environment environment = environmentFactory.openEnvironment();
try {
...
} finally {
environment.close();
}
环境块定义了另一个生命部分:block环境。 一个事务可以一个定义在块环境中的对象的 常用例子。
在这样一个块中,对象可以通过名称或类型在环境中查找到。 如果对象可以从环境中通过environment.get(String name) 或<T> T environment.get(Class<T>) 找到。
当一个环境被创建时,它拥有一个process-engine环境 和一个block 环境。
在默认实现中,process-engine环境和 block环境是WireContext. 一个WireContext包含对象如何创建和 如果绑定到正式的对象图中。