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

Fire Workflow 源碼深度解析 (四):資源管理模組與 XML 解析實現

     編輯:Java 相關知識

Fire Workflow `org.fireflow.model.resource` 套件定義工作流引用的資源類型與管理機制。資源分為子流程、應用程式、表單、參與者四類,資源管理器負責從 XML 文件解析載入。

資源體系架構

IResource - 資源介面

定義資源基本屬性:名稱 (`name`)、顯示名稱 (`displayName`)、描述 (`description`)。

AbstractResource - 抽象基類

實作 `IResource`,提供屬性存取與 `toString()` 重寫。

四大具體資源類型

資源類別核心屬性用途說明
SubWorkflowProcess引用另一個流程定義子流程任務使用,保存被調用流程的引用資訊
Applicationhandler (類別全名)後台自動化任務執行類,對應 Tool 類型 Task
Formuri (表單地址)人工任務表單,引擎不處理表單邏輯,僅記錄 URI
ParticipantassignmentHandlerClassName任務分配處理器,引擎調用獲取真實操作者 ID

資源套件類圖 IResource 介面 AbstractResource SubWorkflowProcess Application Form Participant IResourceManager ResourceManager4XmlFile

資源管理器 - XML 解析實現

`ResourceManager4XmlFile` 實作 `IResourceManager`,提供 `parseResource(String filePath)` 和 `parseResource(InputStream in)` 重載方法。解析流程:

  1. 使用 Dom4J 讀取 XML 文件
  2. 依序調用 `loadForms()`、`loadParticipants()`、`loadApplications()`
  3. 各 `load` 方法提取對應元素屬性與子元素,建構資源物件列表

loadForms() 範例程式碼

protected List<Form> loadForms(Element element) {
  Element formsElement = Util4Parser.child(element, "Forms");
  if (formsElement == null) return null;
  List<Element> formElementList = Util4Parser.children(formsElement, "Form");
  List<Form> forms = new Vector<Form>();
  for (int i = 0; formElementList != null && i < formElementList.size(); i++) {
    Element formElm = formElementList.get(i);
    String name = formElm.attributeValue("Name");
    Form form = new Form(name);
    form.setDisplayName(formElm.attributeValue("DisplayName"));
    form.setDescription(Util4Parser.elementAsString(formElm, "Description"));
    form.setUri(Util4Parser.elementAsString(formElm, "Uri"));
    forms.add(form);
  }
  return forms;
}

XML 資源文件結構範例

<Resources>
  <Forms>
    <Form Name="leaveForm" DisplayName="請假單">
      <Description>員工請假申請表單</Description>
      <Uri>/forms/leave.jsp</Uri>
    </Form>
  </Forms>
  <Participants>...</Participants>
  <Applications>...</Applications>
</Resources>

設計觀察與改進建議

  • 子流程即資源:將 `SubWorkflowProcess` 歸類為資源而非流程元素,與 `org.fireflow.model.WorkflowProcess` 存在概念重疊,建議統一抽象層級
  • 資源管理器功能單薄:僅支援 XML 靜態解析,缺乏快取、熱重載、資料庫/註冊中心等動態資源來源支援
  • 型別安全:解析過程大量使用字串屬性名,易拼寫錯誤,可引入註解或常數定義強化

下一篇將介紹模組最後部分:流程定義文件的序列化與解析核心。

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