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