程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> jBPM-4.0中文開發指南-第11章 環境

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

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved