快速业务通道

jBPM-4.0中文开发指南-第11章 环境 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

jBPM-4.0中文开发指南-第11章 环境

时间:2011-09-24

第 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包含对象如何创 建和 如果绑定到正式的对象图中。

jBPM-4.0中文开发指南-第11章 环境(2)

时间:2011-09-24

11.4. 实例

为了启动简单实例,我们会需要一个Book:

public class Book {   ...   public Book() {}   ... }

然后让我们创建一个环境工厂,知道如何创建book

static EnvironmentFactory environmentFactory = EnvironmentFactory.parseXmlString (     "<jbpm-configuration>" +     "  <process-engine>" +     "    <object name=''book'' class=''org.jbpm.examples.ch09.Book'' />" +     "  </process-engine>" +     "</jbpm-configuration>" ));

现在我们会创建一个环境块,使用这个环境工厂, 我们会查找环境中的book. 第一次会使用类型查找 ,第二次会使用名称查找。

Environment environment = environmentFactory.openEnvironment(); try {   Book book = environment.get(Book.class);   assertNotNull(book);   assertSame (book, environment.get("book")); } finally {   environment.close(); }

为了防止这样,你需要把环境作为一个参数传递给所有方法, 当前的环境被维护在一个threadlocal 栈中:

Environment environment = Environment.getCurrent();

11.5. 环境

环境可以动态被添加和删除。 任何东西都可以暴露为一个Context.

public interface Context {   Object get(String key);   <T> T get (Class<T> type);   Set<String> keys();   ... }

当在环境中执行一次查找,这里有一个默认的搜索次序 哪些环境会为请求的对象检测。 默认次序与 环境添加的顺序相反。 比如,如果一个对象被定义在流程引擎环境和块环境中, 块环境被认为更适用的 ,会被首先检测。 可选的,一个默认的搜索次序可以被传递给get 作为一个可选的参数。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号