首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

jBPM 4.0 開發指南:第 11 章 環境架構與生命週期管理

     編輯:Java 相關知識

第 11 章 環境架構與生命週期管理

11.1 核心概念:環境即 IoC 容器

jBPM 4.0 的環境組件本質上是一個控制反轉(IoC)容器。它負責讀取配置資訊,根據定義實例化對象、配置屬性,並將各組件連接成完整的對象圖。環境機制的核心目標是讓流程虛擬機(PVM)的各個部分具備高度可配置性,使其能夠靈活運行於標準 Java SE 環境或企業級 Java EE 環境之中。

環境採用分層架構,每一層環境擁有獨立的生命週期:

  • 流程引擎環境:贯穿應用程式的完整生命週期
  • 塊環境:僅在特定的 try-finally 代碼塊範圍內有效,通常對應一個資料庫事務的邊界

每個環境層級都暴露一組鍵值對,供上層邏輯查找所需的資源與服務。

11.2 EnvironmentFactory:環境工廠的創建與配置

要開始使用環境機制,首先需要獲取 EnvironmentFactory 實例。通常將其作為靜態成員變量保存,贯穿應用的整個生命週期:

static EnvironmentFactory environmentFactory = 
    EnvironmentFactory.parse(new ResourceStreamSource("pvm.cfg.xml"));

更多流來源類型請參考 org.jbpm.stream 包的 Javadoc 文檔。

默認解析器會創建 DefaultEnvironmentFactory。框架預留了 Spring 作為 IoC 容器的整合介面(目前仍處於 TODO 狀態),開發者可通過 EnvironmentFactory.setParser(Parser) 靜態方法自定義解析器。

11.3 環境塊:生命週期邊界與資源管理

環境塊定義了 block 環境的作用域,典型用法如下:

Environment environment = environmentFactory.openEnvironment();
try {
    // 業務邏輯執行區
} finally {
    environment.close(); // 確保資源釋放
}

在環境塊內,可通過名稱或類型查找對象:

  • environment.get(String name)
  • <T> T environment.get(Class<T> type)

環境創建時會自動包含 process-engine 環境與 block 環境。默認實現中兩者均為 WireContext 實例,內部維護對象創建邏輯與綁定關係。

11.4 實戰範例:對象查找與 ThreadLocal 機制

以下範例展示如何配置並獲取 Book 對象:

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

// 使用環境塊查找對象
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();
    // ...
}

查找時採用「後添加優先」的搜索順序:若同一對象同時存在於流程引擎環境與塊環境,塊環境的定義將優先被返回。開發者亦可通過可選參數自定義搜索順序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved