歡迎您光臨本站 註冊首頁

jBPM-4.0中文開發指南-第11章 環境

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

第 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包含對象如何創建和 如果綁定到正式的對象圖中.

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 作為一個可選的參數.


[火星人 ] jBPM-4.0中文開發指南-第11章 環境已經有449次圍觀

http://coctec.com/docs/java/show-post-61313.html