第 11 章 环境 11.1. 简介 环境组件由连接环境组合是一种控制反转(IoC)容器。 它读取配置信息, 描述对象应该如何实例化,如何配置,如何连接在一起。 环境被用来获得Activity实现 和流程虚拟机所需的资源和服务。 主要目的是让流程虚拟机的多个部分可配置, 这样PVM和运行在顶部的语言可以工作在一个标准Java环境 也可以在一个企业Java环境。 环境被分成一系列环境。 每个环境可以拥有自己的生命周期。比如,流程引擎环境会 覆盖应用的全生命时间。块环境只对try-finally块周期内起作用。 一般一个块环境负责一个数据库事务。 每个环境暴露一个key-value列表。 pairs. 11.2. EnvironmentFactory 为了开始和一个环境进行工作,你需要一个EnvironmentFactory. 一个单独的环境工厂对象可以被用在整个应用的完整生命时间里。 所以一般这会保存在一个静态成员变量中。 EnvironmentFactory自己在流程引擎环境中 一个EnvironmentFactory一般被获得 通过解析一个配置文件,像这样:
参考javadocs包org.jbpm.stream,获得流源的更多类型。 这是一个环境工厂中的默认解析器, 会创建DefaultEnvironmentFactory. 这个主意是我们也会支持spring作为Ioc容器,但是这还处于TODO状态。 很欢迎大家在这方面帮助我们:-)。这个解析器可以使用静态setter方法配置 EnvironmentFactory.setParser(Parser)。 11.3. 环境块 一个环境为try-finally块的范围而存在。 这是一个环境块看起来像怎样:
环境块定义了另一个生命部分:block环境。 一个事务可以一个定义在块环境中的对象的 常用例子。 在这样一个块中,对象可以通过名称或类型在环境中查找到。 如果对象可以从环境中通过environment.get(String name) 或<T> T environment.get(Class<T>) 找到。 当一个环境被创建时,它拥有一个process-engine环境 和一个block 环境。 在默认实现中,process-engine环境和 block环境是WireContext. 一个WireContext包含对象如何创建和 如果绑定到正式的对象图中。 11.4. 实例 为了启动简单实例,我们会需要一个Book:
然后让我们创建一个环境工厂,知道如何创建book
现在我们会创建一个环境块,使用这个环境工厂, 我们会查找环境中的book. 第一次会使用类型查找,第二次会使用名称查找。
为了防止这样,你需要把环境作为一个参数传递给所有方法, 当前的环境被维护在一个threadlocal栈中: Environment environment = Environment.getCurrent(); 11.5. 环境 环境可以动态被添加和删除。 任何东西都可以暴露为一个Context.
当在环境中执行一次查找,这里有一个默认的搜索次序 哪些环境会为请求的对象检测。 默认次序与环境添加的顺序相反。 比如,如果一个对象被定义在流程引擎环境和块环境中, 块环境被认为更适用的,会被首先检测。 可选的,一个默认的搜索次序可以被传递给get 作为一个可选的参数。 (责任编辑:admin) |