官术网_书友最值得收藏!

3.2 流程文檔部署

3.2.1 定義流程文檔

接下來深入學習流程文檔部署的相關操作,需要了解一點,雖然使用幾種不同的方式部署流程文檔,但操作的流程文檔均為同一個,這里對流程文檔的內容進行統一描述,流程文檔內容如代碼清單3-2所示,根據該流程文檔生成的圖片如圖3-2所示。

圖3-2 流程定義生成的圖片

mn.bp代碼清單3-2 common

該流程文檔的定義非常簡單,一個開始節點、兩個任務節點以及結束節點。接下來重點講解該流程文檔的部署操作。

注意

activiti.cfg.xml文件的配置,可以參考2.1.1節。流程文檔中的元素id值必須全局唯一。

3.2.2 文本方式部署

addString方式部署流程文檔的常用場景為:流程文檔的內容大部分是固定不變的,只有少部分屬性在流程文檔部署時需要跟外部程序進行交互從而動態填充。例如,開發人員使用圖形化工具繪制流程文檔,有可能人員組織機構或者其他信息需要從數據庫中動態查詢,這時就可以使用該方式并結合模板引擎技術動態渲染數據,常用的模板引擎框架有Velocity、FreeMarker等,然后生成預期的流程文檔內容。該方式就是客戶端自定義流程設計器與原生設計器的一種過渡解決方案,具體實現如代碼清單3-3所示。

代碼清單3-3 DeploymentBuilderTest.java

該案例使用絕對路徑方式獲取流程文檔的數據流,獲取數據流的具體實現如代碼3-4所示。

代碼清單3-4 DeploymentBuilderTest.java

3.2.3 classpath資源部署

addClasspathResource方式部署流程文檔:該方式會讀取項目工程中classpath路徑下的流程文檔。使用該方式部署流程文檔會使流程文檔與項目產生高耦合,因此不建議在正式環境中使用。需要說明一點,如果使用該方式獲取流程文檔數據流則需使用/的方式對包名進行分割,形如com/shareniu/chapter3/common.bpmn,對應的文件結構如圖3-3所示。

圖3-3 包路徑下文件流的獲取

該方式的相關實現如代碼清單3-5所示。

代碼清單3-5 DeploymentBuilderTest.java

3.2.4 流式部署

3.2.4.1 inputStream部署

接下來使用addInputStream方式部署流程文檔,具體實現如代碼清單3-6所示。

代碼清單3-6 DeploymentBuilderTest.java

在上述代碼中,第3~4行直接使用類加載器獲取common.bpmn文件的數據流,獲取到數據流之后直接構造DeploymentBuilder實例對象,然后調用該實例對象的deploy()方法部署流程文檔。

3.2.4.2 zipInputStream部署

以上三種部署方式,一次只能部署一個流程文檔,如果期望一次性部署多個流程文檔,很顯然上面的部署方式是不支持的,但是很幸運,Activiti提供了打包部署機制,可以把多個流程文檔以及流程文檔對應的圖片或者表單等統一打包為.zip的壓縮文件(一般使用這種方式)或者.bar壓縮文件,然后再對其進行部署,打包之后的結構如圖3-4所示,相關實現如代碼清單3-7所示。

圖3-4 打包部署多個流程文檔以及相關文件

代碼清單3-7 DeploymentBuilderTest.java

使用addZipInputStream方式部署流程資源,需要將打包的流程文檔或者圖片等存放在壓縮包中,其內部使用迭代器方式循環遍歷壓縮包中的文件并讀取相應的文件流。

建議

可以跟進DeploymentBuilderImpl類中的addZipInputStream方法查看其處理機制。

主站蜘蛛池模板: 安陆市| 澎湖县| 荔波县| 阜新市| 温泉县| 三都| 庆城县| 长海县| 吕梁市| 大足县| 边坝县| 武宣县| 株洲县| 郓城县| 吉林省| 禹城市| 宁陵县| 阿拉善左旗| 黔南| 忻城县| 青冈县| 双峰县| 拉萨市| 镶黄旗| 垦利县| 南木林县| 荣成市| 伊吾县| 德惠市| 太仆寺旗| 尚义县| 翁源县| 湘潭市| 东乡族自治县| 高青县| 平定县| 融水| 新邵县| 靖边县| 濮阳市| 买车|