版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南jBPMUserGuidejBPM用戶指南目錄目錄第一章概述11.1什么是jBPM?11.2概覽21.3核心引擎31.4Eclipse編輯器41.5基于Web的設(shè)計(jì)器51.6jBPM控制臺(tái)51.7文檔結(jié)構(gòu)6第二章獲得開(kāi)始72.1下載72.2獲得開(kāi)始72.3社區(qū)82.4資源82.41許可證82.42源代碼92.4.3從源文件構(gòu)建9第三章安裝93.1必備的93.2下載installer93.3演示安裝103.410分鐘指南:使用Eclipse工具103.510分鐘向?qū)В菏褂胘BPM控制臺(tái)123.610分鐘指南:使用Guvnor知識(shí)庫(kù)和設(shè)計(jì)器133.7如果遇到問(wèn)題或有問(wèn)題應(yīng)該怎么去做143.7經(jīng)常被問(wèn)的問(wèn)題14第四章:核心引擎的API154.1jBPMAPI164.11KnowledgeBase174.12會(huì)話174.13事件194.2.Knowledge-basedAPI21第五章核心引擎:基礎(chǔ)215.1創(chuàng)建一個(gè)流程215.1.1EclipseBPMN2.0圖形編輯器插件225.1.2使用XML定義流程225.1.3使用流程API定義流程245.2不同流程構(gòu)造的細(xì)節(jié)概述255.3流程屬性的細(xì)節(jié)265.4事件細(xì)節(jié)265.4.1開(kāi)始事件265.4.2結(jié)束事件275.4.3中間事件285.5動(dòng)作細(xì)節(jié)295.5.1腳本任務(wù)295.5.3服務(wù)任務(wù)305.5.3用戶任務(wù)315.5.4重用的子流程325.5.5業(yè)務(wù)規(guī)則任務(wù)325.5.6嵌入子流程335.5.7多個(gè)實(shí)例子流程335.6Gateways細(xì)節(jié)345.6.2合并網(wǎng)關(guān)355.7在你的應(yīng)用中使用流程355.8其他特性365.8.1數(shù)據(jù)365.8.2約束375.8.3動(dòng)作腳本385.8.4事件395.8.5計(jì)時(shí)器405.8.6更新流程41第六章BPMN2.0核心引擎436.1BusinessProcessModelandNotation(BPMN)2.0Specification業(yè)務(wù)流程建模和符號(hào)2.0規(guī)范436.2例子476.3支持的元素/屬性48第七章核心引擎:持久化和事務(wù)547.1運(yùn)行時(shí)狀態(tài)547.1.1二進(jìn)制持久化547.1.2SafePionts547.1.3配置持久化557.1.4事務(wù)587.2流程定義587.3歷史日志597.3.1將流程事件存儲(chǔ)到數(shù)據(jù)庫(kù)59第八章核心引擎:示例608.1jBPM示例608.2示例618.3單元測(cè)試61第九章EclipseBPMN2.0Plugin629.1安裝629.2創(chuàng)建你的BPMN2.0流程629.3元素和屬性的顧慮65第十章設(shè)計(jì)器6610.1安裝67第十一章控制臺(tái)6811.1安裝6811.2運(yùn)行流程管理控制臺(tái)6811.2.1管理流程實(shí)例6911.2.2人工任務(wù)列表7111.2.3報(bào)告7211.3添加新的流程/任務(wù)表7311.4RESTinterface74第十二章HumanTasks7512.1流程內(nèi)的Humantasks7512.1.1Swimlanes7812.2Humantask管理組件7812.2.1任務(wù)生命周期7812.2.2將任務(wù)組件鏈接到j(luò)BPM引擎7912.2.3啟動(dòng)任務(wù)管理組件8112.2.4和任務(wù)管理組件的交互8312.3人工任務(wù)管理接口8412.3.1Eclipseintegration8412.3.2基于Web的任務(wù)視圖84第十三章特定領(lǐng)域的流程8413.1介紹8413.2示例:通告8513.2.1創(chuàng)建工作定義8613.2.2注冊(cè)你的工作定義8613.2.3在你的流程中使用你最新的工作條目8713.2.4執(zhí)行服務(wù)節(jié)點(diǎn)89第十四章測(cè)試和調(diào)試9114.1單元測(cè)試9114.1.1使用Helper方法創(chuàng)建你的session9214.1.2斷言9214.1.3測(cè)試與外部服務(wù)的結(jié)合9314.1.4配置持久化9414.2調(diào)試9414.2.1流程實(shí)例視圖9514.2.2人工任務(wù)視圖9614.2.3核查視圖96第十五章流程知識(shí)庫(kù)97第十六章業(yè)務(wù)活動(dòng)監(jiān)視器9916.1報(bào)告9916.2直接接入101第十七章復(fù)雜流程102第十八章和Maven,OSGi,Spring的整合10518.1Maven10518.2OGSi107第一章概述1.1什么是jBPM?jBPM是一個(gè)靈活的業(yè)務(wù)流程管理組件。它是輕量級(jí),完全開(kāi)放并且是使用java語(yǔ)言編寫。它允許你建模、執(zhí)行和監(jiān)控業(yè)務(wù)流程,遍及整個(gè)的生命周期。業(yè)務(wù)流程允許你去建模一個(gè)通過(guò)描述要達(dá)到的目標(biāo)并按一定次序執(zhí)行的每一步來(lái)作為一jBPM關(guān)注于可執(zhí)行的業(yè)務(wù)流程,這些業(yè)務(wù)流程包含足夠的細(xì)節(jié)而使他們能夠真正的在BPM引擎上執(zhí)行??蓤?zhí)行的業(yè)務(wù)流程解決了業(yè)務(wù)用戶和開(kāi)發(fā)人員的隔閡,這些可執(zhí)行的業(yè)務(wù)流程是更高級(jí)的并且應(yīng)用了能夠被業(yè)務(wù)用戶所理解并且能夠直接執(zhí)行的特有的域概念。jBPM的核心是一個(gè)純java語(yǔ)言編寫的輕量級(jí)、可擴(kuò)展的工作流引擎,它允許你去執(zhí)行使用了最新的BPMN2.0java環(huán)境中運(yùn)行或者嵌入到你的應(yīng)用中或者作為一個(gè)服務(wù)?;贓clipse和Web的編輯器支持支持你的業(yè)務(wù)流程的圖形化創(chuàng)建。持久化插件和基于JPA/JTA的事務(wù)處理?;赪S人工任務(wù)的人工任務(wù)服務(wù)插件針對(duì)于包含了各種需要被人工角色執(zhí)行的任務(wù)??刂婆_(tái)管理支持流程實(shí)例的管理,任務(wù)列表和任務(wù)表的管理,和報(bào)告。可選擇的流程知識(shí)庫(kù)能夠配置你的流程歷史日志(用于查詢)可以和Seam,Spring,OSGi進(jìn)行整合BPM架起了業(yè)務(wù)分析,開(kāi)發(fā)人員和最終用戶之間的橋梁,并且提供了業(yè)務(wù)用戶和開(kāi)發(fā)人員都喜歡的流程管理特性和工具的方式。特有的域節(jié)點(diǎn)能夠被插入到模板中,使得流程能夠使業(yè)務(wù)用戶更加容易理解。JBPM能夠容易的使用死板的流程所描述的情形。我們提供了最終用戶的控制權(quán)限通過(guò)允許他們?nèi)タ刂茟?yīng)該被執(zhí)行的流程的每一個(gè)方面和動(dòng)態(tài)的變更流程等等。當(dāng)然jBPM的業(yè)務(wù)流程和復(fù)雜事件流程的結(jié)合而被建模。jBPM能夠和Drools項(xiàng)目相結(jié)合來(lái)支持統(tǒng)一的環(huán)境,結(jié)合這些范例你可以建模你的業(yè)務(wù)邏輯作為流程、規(guī)則和事件的結(jié)合。除了Eclipse和Web的設(shè)計(jì)器和控制臺(tái)管理。1.2概覽圖片1.1這張圖片提供了jBPM項(xiàng)目不同組件的概覽。jBPM能夠整合很多其他的服務(wù),但是這我們過(guò)關(guān)注的組件式j(luò)BPM項(xiàng)目自身的一部分。流程引擎是項(xiàng)目的核心并且是必須的,如果你想去執(zhí)行業(yè)務(wù)流程,你的應(yīng)用服務(wù)在任何必須的時(shí)候都可以調(diào)用核心引擎。有一個(gè)可選擇的核心服務(wù)時(shí)歷史日志,它將會(huì)記錄你所有的流程實(shí)例的當(dāng)前和先前狀態(tài)的有關(guān)信息。另外一個(gè)可選的核心服務(wù)時(shí)人工任務(wù)服務(wù),如果人工角色參與了流程,它將會(huì)管理人工任務(wù)的生命周期。提供了兩種類型的圖形編輯器來(lái)定義你的業(yè)務(wù)流程。Eclipse插件是Eclipse集成開(kāi)發(fā)環(huán)境的一種擴(kuò)展,目標(biāo)針對(duì)于開(kāi)發(fā)人員,同時(shí)允許你通過(guò)拖拽的方式創(chuàng)建你的業(yè)務(wù)流程,提供高級(jí)的測(cè)試?;赪eb的設(shè)計(jì)器允許業(yè)務(wù)用戶在基于Web的環(huán)境下管理業(yè)務(wù)流程。Guvnor知識(shí)庫(kù)是一個(gè)可選的組件,它能夠被用來(lái)存儲(chǔ)你所有的業(yè)務(wù)流程。它支持協(xié)作和編譯等等。Eclipse插件和基于Web的設(shè)計(jì)器的結(jié)合,支持迂回流動(dòng)的工具。jBPM控制臺(tái)是基于Web表和查看報(bào)告。每個(gè)組件的更多細(xì)節(jié)將會(huì)在下面被描述。1.3核心引擎jBPM可以作為你的應(yīng)用的一部分被嵌入,或者配置作為一項(xiàng)服務(wù)。這里還有很多的特性:可靠地、穩(wěn)定地核心引擎用來(lái)執(zhí)行你的流程實(shí)例對(duì)BPMN2.0規(guī)范的本地支持,執(zhí)行業(yè)務(wù)流程強(qiáng)壯的執(zhí)行和監(jiān)控能力java任何的Web容器)(可選擇的)帶有一個(gè)默認(rèn)的JPA執(zhí)行的持久化插件帶有一個(gè)默認(rèn)的JTA執(zhí)行的事務(wù)支持插件作為一個(gè)普通的流程引擎工具,它能夠被擴(kuò)展來(lái)支持新的節(jié)點(diǎn)類型或者其他的流程語(yǔ)言監(jiān)聽(tīng)器可以通報(bào)各種事件具有移植運(yùn)行中的流程實(shí)例到他們流程定義的一個(gè)新版本中的能力當(dāng)然,核心引擎能夠和其他的核心服務(wù)相整合:當(dāng)人工角色需要參與流程的時(shí)候,人工任務(wù)服務(wù)能夠被用來(lái)管理人工任務(wù)。它是一個(gè)完整的插件并且是基于WS任務(wù)表和一些更高級(jí)的特性,例如自動(dòng)調(diào)整、委托、基于規(guī)則的分配等等。歷史日志可以存儲(chǔ)所有在引擎上的流程的執(zhí)行的有關(guān)信息。如果你需要訪問(wèn)歷史信息作為運(yùn)行時(shí)的持久化僅僅存儲(chǔ)所有活動(dòng)流程實(shí)例的當(dāng)前狀態(tài)這就是必需的了。歷史日志能夠存儲(chǔ)活動(dòng)的和完整的流程實(shí)例的所有的當(dāng)前和歷史狀態(tài)。它能夠被用來(lái)查詢?nèi)魏魏土鞒虒?shí)例執(zhí)行相關(guān)的信息,用來(lái)做監(jiān)測(cè)分析等等。1.4Eclipse編輯器Eclipse編輯器是針對(duì)于Eclipse集成開(kāi)發(fā)環(huán)境的插件,它允許你整合你的業(yè)務(wù)流程到你的開(kāi)發(fā)環(huán)境中。它的目標(biāo)是針對(duì)于開(kāi)發(fā)者,并且有一些向?qū)ラ_(kāi)始,有一個(gè)圖形編輯器用來(lái)創(chuàng)建你的業(yè)務(wù)流程和許多的高級(jí)測(cè)試和調(diào)試能力。圖片1.2Eclipse編輯器創(chuàng)建BPMN2流程它包含的特性有:創(chuàng)建一個(gè)新的jBPM項(xiàng)目的向?qū)п槍?duì)BPMN2.0流程的圖形編輯器插入你擁有的特有域節(jié)點(diǎn)驗(yàn)證運(yùn)行時(shí)支持(你能夠選擇你喜歡用的jBPM版本)圖形化調(diào)試,可以查看一個(gè)被選擇的會(huì)話的所有運(yùn)行時(shí)流程實(shí)例,可以顯示一個(gè)特有的流程實(shí)例的當(dāng)前狀態(tài)等等。審核視圖得到一個(gè)在運(yùn)行時(shí)所發(fā)生的概述和知識(shí)庫(kù)集成1.5基于Web的設(shè)計(jì)器基于Web的設(shè)計(jì)器允許你在基于Web的環(huán)境中建模你的業(yè)務(wù)流程。它所針對(duì)的目標(biāo)更多的是業(yè)務(wù)用戶和提供一個(gè)圖形編輯器來(lái)顯示和編輯你的業(yè)務(wù)流程(使用拖拽),類似于Eclipse插件。它支持Eclipse編輯器和基于Web設(shè)計(jì)器的迂回流動(dòng)。圖1.3基于Web的設(shè)計(jì)器創(chuàng)建BPMN2流程你能夠隨意的使用一個(gè)或者多個(gè)知識(shí)庫(kù)來(lái)存儲(chǔ)你的業(yè)務(wù)流程?;赪eb的設(shè)計(jì)器被結(jié)合到Guvnor的流程。它支持:一個(gè)知識(shí)庫(kù)服務(wù)用來(lái)存儲(chǔ)你的業(yè)務(wù)流程和相關(guān)的人工品,使用一個(gè)JCR知識(shí)庫(kù),它可以作為一個(gè)文件系統(tǒng)或者使用REST服務(wù)來(lái)支持譯本、遠(yuǎn)程接入?;赪eb的用戶接口用來(lái)管理你的業(yè)務(wù)流程,目標(biāo)針對(duì)于業(yè)務(wù)用戶,支持你流程的可視化,當(dāng)然還有分類,方案測(cè)試。部署配置等等。協(xié)作特性對(duì)于有很多角色的共同工作可以在同一個(gè)流程中定義。知識(shí)庫(kù)代理可以在知識(shí)庫(kù)中很容易的創(chuàng)建一個(gè)基于流程定義的新會(huì)話。如果一個(gè)新的流程已經(jīng)被配置,它支持動(dòng)態(tài)的升級(jí)。1.6jBPM控制臺(tái)業(yè)務(wù)流程能夠通過(guò)一個(gè)Web控制臺(tái)管理。它是主要針對(duì)于業(yè)務(wù)用戶,它的主要特性有:流程實(shí)例管理:?jiǎn)?dòng)一個(gè)新的流程實(shí)例的能力,得到運(yùn)行時(shí)流程實(shí)例的列表,可視化查看一個(gè)明確的流程實(shí)例等等。人工任務(wù)管理:能夠得到所有當(dāng)前的任務(wù)列表,完善任務(wù)列表上的任務(wù)。報(bào)告:得到你的應(yīng)用狀態(tài)的概覽,系統(tǒng)動(dòng)態(tài)產(chǎn)生報(bào)告,給你一個(gè)關(guān)鍵執(zhí)行指示的概述圖1.4管理你的流程實(shí)例1.7文檔結(jié)構(gòu)文檔的結(jié)構(gòu)如下:概述:概述章節(jié)給你一個(gè)不同組件的概述獲得開(kāi)始:獲得開(kāi)始章節(jié)教你從哪下載源文件和包含很多有用的鏈接jBPM組件并且通過(guò)他們來(lái)應(yīng)用一個(gè)簡(jiǎn)單的例子,還有包括錄屏的10分鐘指南。核心引擎:下面的四章描述了針對(duì)于開(kāi)發(fā)人員的Eclipse插件,有一個(gè)舊版本的和一個(gè)新的BPMN2.0工具正在開(kāi)發(fā)當(dāng)中。設(shè)計(jì)器:描述了基于Web設(shè)計(jì)器允許業(yè)務(wù)用戶去編輯在一個(gè)基于Web的上下文中的業(yè)務(wù)流程??刂婆_(tái):jBPM控制臺(tái)能夠被用來(lái)管理流程實(shí)例,人工任務(wù)列表和報(bào)告重要的特性1.人工任務(wù):當(dāng)使用人工角色的時(shí)候,你需要一個(gè)人工任務(wù)服務(wù)區(qū)管理任務(wù),任務(wù)列表的生命周期等等。2.特有的域流程:可以在你的流程中插入你自己的高級(jí)的、特有域的節(jié)點(diǎn)3.測(cè)試和調(diào)試:如何去測(cè)試和調(diào)試你的流程4.流程知識(shí)庫(kù):一個(gè)流程知識(shí)庫(kù)能夠用來(lái)管理你的業(yè)務(wù)流程復(fù)雜的概念1.業(yè)務(wù)活動(dòng)監(jiān)視:事件處理用來(lái)監(jiān)視你的系統(tǒng)狀態(tài)2.靈活的處理:建模很多適用性、靈活性的流程用來(lái)升級(jí)流程構(gòu)造并使業(yè)務(wù)規(guī)則和事件處理相結(jié)合3.整合:怎樣和其他的技術(shù),例如maven,OSGi等等整合第二章獲得開(kāi)始2.1下載所有的版本都可以從SourceForge[]上下載。選擇你想下載的版本然后選擇你想要的產(chǎn)品:bin:所有的jBPM的二進(jìn)制JAR包和他們所依賴的src:核心組件的源文件gwt-console:jBPM控制臺(tái),一個(gè)ZIP文件包含了服務(wù)器端和客戶端的WAR包docs:文檔examples:一些jBPM例子,能夠被引入到Eclipse中installer:包含jbpm-installer,下載和安裝一個(gè)jBPM的演示程序installer-fullbpm-installer,下載和安裝一個(gè)jBPM的演示程序,已經(jīng)包含了一系列所依賴的包2.2獲得開(kāi)始如果你喜歡采用快速指南,它將通過(guò)使用一個(gè)簡(jiǎn)單的例子中眾多組件來(lái)指導(dǎo)你,看一下安裝章節(jié)吧!這將教你如何去下載并使用installer去創(chuàng)建一個(gè)演示程序,包含許多的組件。通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)指導(dǎo)你涉及很多重要的特性。可利用的錄屏將很好的幫助你解決問(wèn)題。APIBPMN2.0等當(dāng)閱讀和核心章節(jié)之后,你應(yīng)該能夠跳到其他你可能感興趣的章節(jié)。當(dāng)然你也可以通過(guò)演示一些例子來(lái)開(kāi)始,這些例子已經(jīng)被提供單獨(dú)下載。查看一下例子章節(jié),來(lái)看看如何通過(guò)這些來(lái)開(kāi)始。在那之后,你應(yīng)該準(zhǔn)備開(kāi)始創(chuàng)建你自己的流程并整合引擎到你的應(yīng)用,例如通過(guò)從installer開(kāi)始或者另外的例子或者通過(guò)自己的理解來(lái)開(kāi)始嘗試一下也是不錯(cuò)哦~2.3社區(qū)這有很多有用的鏈接如果你想成為jBPM社區(qū)的一部分:與jBPM相關(guān)的博客入口[]Jbossjbpm的相關(guān)說(shuō)明:[].一個(gè)用戶論壇:[],可以提問(wèn)和給出回答一個(gè)JIRA的bug跟蹤系統(tǒng):[browse/JBPM],對(duì)于bugs和一些特性的要求和指示。一個(gè)連續(xù)的構(gòu)建服務(wù):[],得到最新的快照:[].org#jbpm。這有很多的實(shí)時(shí)在線關(guān)于項(xiàng)目的生產(chǎn)的討論,能夠在你需要的時(shí)候可以發(fā)現(xiàn)很多的在線開(kāi)發(fā)人員。沒(méi)有在線聊天的客戶端安裝程序嗎?簡(jiǎn)單的得到:,輸入你渴望的昵稱,然后登陸獲得樂(lè)趣吧!2.4資源2.41許可證jBPM的代碼本身使用了Apache的2.0版本許可證。我們所整合的其他組件也有他們自己的許可證:新的BPMN2插件是EclipsePublicLicense(EPL)v1.0.Theweb-baseddesignerisbasedonOryx/andisMITLicenseTheBPMconsoleisGNULesserGeneralPublicLicense(LGPL)v2.1TheDroolsprojectisApacheLicensev2源代碼現(xiàn)在jBPM使用git作為它的源代碼的版本控制系統(tǒng)。jBPM項(xiàng)目的資源可以在這被找到(包括從jBPM5.0-CR1的所有版本):我們所整合的其他組件的資源可以在這找到:與jBPM和Drools項(xiàng)目相關(guān)的其他組件:[].jBPM的Eclipse插件:[]基于Web的設(shè)計(jì)器:[]BPM控制臺(tái):[]2.4.3從源文件構(gòu)建如果你對(duì)于構(gòu)建源代碼感興趣,貢獻(xiàn)版本等等。確保閱讀這個(gè):[].第三章安裝這個(gè)向?qū)?huì)在安裝和運(yùn)行一個(gè)包含各種組件的jBPM聯(lián)系jBPM社區(qū)作為所描述的那樣:如果遇到問(wèn)題或者有問(wèn)題如何去做的片段。3.1必備的這里假設(shè)你已經(jīng)安裝了javaJDK1.5+(設(shè)置了JAVA_HOME,并安裝了Ant1.7+.如果你沒(méi)有,用下面的鏈接去下載并安裝它們:Java:Ant:3.2下載installer首先,你需要下載installer[],這里有兩個(gè)版本,一個(gè)fullinstaller和一個(gè)最小版本的installer??偟膩?lái)說(shuō),下載一個(gè)fullinstaller可能會(huì)是最好的:jBPM-{version}-installer-你頁(yè)可以在這找到最新發(fā)布的版本,不過(guò)只有最小版本的。[]3.3演示安裝最容易的方法就是運(yùn)行安裝腳本來(lái)開(kāi)始,很容易的進(jìn)入安裝文件夾并在運(yùn)行(注意是在cmd中):ant這將會(huì):下載JBossAS下載Eclipse安裝DroolsGuvnorintoJBossAS安裝OryxDesignerintoJBossAS安裝thejBPMgwt-consoleintoJBossAS安裝thejBPMEclipseplugin安裝theDroolsEclipseplugin這樣將要花費(fèi)一會(huì)(網(wǎng)速慢的話將會(huì)花很長(zhǎng)時(shí)間,因?yàn)橄螺d有應(yīng)用服務(wù),Eclipse安裝fullinstaller).下載特定的組件,在下面檢查運(yùn)行僅僅特定的演示的部分或者直接安裝一個(gè)已經(jīng)安裝的組件。為了限制需要下載的數(shù)據(jù)量,我們不用下載EclipseBIRT插件通過(guò)默認(rèn)的報(bào)告,如果你想在jBPM控制臺(tái)輸出報(bào)告,確定要下載在屬性文件中設(shè)置一下,在運(yùn)行安裝之前。一旦演示安裝完成,你能夠開(kāi)始通過(guò)啟動(dòng)來(lái)演示各種組件。ant這個(gè)將會(huì):?StarttheH2database?StarttheJBossAS?StartEclipse?StarttheHumanTaskServiceEclipseGuvnor知識(shí)庫(kù)和jBPM控制臺(tái),在下面的片段中將會(huì)解釋。3.410分鐘指南:使用Eclipse工具下面的錄屏將給你一個(gè)如何去運(yùn)行一個(gè)簡(jiǎn)單的演示流程的概述:[],它將會(huì)展示給你:怎么將已經(jīng)存在的項(xiàng)目引入到你的工作空間中去一個(gè)簡(jiǎn)單的BPMN2流程用來(lái)請(qǐng)求一個(gè)執(zhí)行評(píng)估一個(gè)簡(jiǎn)單的java類來(lái)啟動(dòng)流程怎樣開(kāi)始流程圖3.1[]接下來(lái)要做的:一旦啟動(dòng)了Eclipse,就是簡(jiǎn)單的引入了,如果不會(huì),那么你就回家賣紅薯吧!!這個(gè)項(xiàng)目包含一個(gè)簡(jiǎn)單的BPMN2流程和一個(gè)java文件用來(lái)啟動(dòng)流程。你可以通過(guò)雙擊打開(kāi)這些文件現(xiàn)在我們就可以debugdebugtooling來(lái)可視化查看它的運(yùn)行時(shí)狀態(tài),首先要在流程測(cè)試類的文件中定義斷點(diǎn),然后就是???查看各種debug視"Window-ShowView->Other...",,選擇流程實(shí)例視圖和流程實(shí)例視圖(在Drools目錄下)和人工任務(wù)視圖并單擊OK。程序在開(kāi)始流程之前將會(huì)遇到斷點(diǎn),單擊“StepOver”(F6)來(lái)啟動(dòng)流程。在這種情況下,它會(huì)很容易的啟動(dòng)流程,這將導(dǎo)致創(chuàng)建一個(gè)新的用戶任務(wù)對(duì)于用戶在ID寫”krisv”并單擊刷新。一個(gè)新的執(zhí)行評(píng)估任務(wù)應(yīng)該被展現(xiàn)。展示你已經(jīng)啟動(dòng)了的流程實(shí)例的狀態(tài),單擊流程實(shí)例視圖并在變量視圖中選擇ksession個(gè)流程實(shí)例。雙擊去查看在流程表中有注解的流程實(shí)例的狀態(tài)?,F(xiàn)在讓我們回到任務(wù)視圖,選擇執(zhí)行的任務(wù)并首先啟動(dòng)然后完成選擇的任務(wù)?,F(xiàn)在我們回到流程實(shí)例視圖并再次雙擊流程實(shí)例來(lái)查看它新的狀態(tài)。你應(yīng)該能夠用jBPM項(xiàng)目向?qū)?chuàng)建一個(gè)新的項(xiàng)目。這個(gè)簡(jiǎn)單的項(xiàng)目包含一個(gè)簡(jiǎn)單的HelloWorldBPMN2流程和一個(gè)相關(guān)聯(lián)的java文件用來(lái)啟動(dòng)流程。3.510分鐘指南:使用jBPM控制臺(tái)打開(kāi)流程管理控制臺(tái):登陸:用krisv/krisv作為用戶名和密碼。下面的錄屏[]將給你一個(gè)怎么去管理你的流程實(shí)例的概述。它展現(xiàn)給你:怎樣啟動(dòng)一個(gè)新的流程怎樣查看一個(gè)正在運(yùn)行的流程實(shí)例的當(dāng)前狀態(tài)怎樣去查看你的任務(wù)怎樣完成一個(gè)任務(wù)怎樣去產(chǎn)生一個(gè)報(bào)告區(qū)監(jiān)視你流程的執(zhí)行圖3.2[]管理你的流程實(shí)例,單擊標(biāo)簽,在選擇的左邊?!皃rocess“列表應(yīng)該展現(xiàn)所有已知的流程。在演示程序的jbpm控制臺(tái)的當(dāng)前鏈接的所有流程都存儲(chǔ)在"jbpm-installerevaluation"路徑中的“evaluation”項(xiàng)目中的"srcresources"路徑中。你點(diǎn)擊流程,它將會(huì)顯示出所有當(dāng)前的運(yùn)行實(shí)例。當(dāng)然,如果在這一點(diǎn)沒(méi)有運(yùn)行的實(shí)例,那么實(shí)例表中就是空的?!皊tart”按鈕來(lái)啟動(dòng)一個(gè)新實(shí)例。當(dāng)你確認(rèn)有這個(gè)新的流程已經(jīng)執(zhí)行啟動(dòng),那么你就可以通過(guò)填寫必要的信息來(lái)啟動(dòng)一個(gè)流程。這種情況你需要填寫用戶“krisv”“instance”列表中。乳溝你單擊流程實(shí)例,你能夠在下面查看它的細(xì)節(jié)、圖形和實(shí)例數(shù)據(jù)通過(guò)分別點(diǎn)擊“Diagram“和按鈕。你剛剛啟動(dòng)的流程實(shí)例將會(huì)在第一時(shí)間要求用戶的處理并一直等待到用戶完成這個(gè)任務(wù)。通過(guò)選擇左邊“Tasks”標(biāo)簽并選擇“PersonalTasks”你就可以查看分配給你的任務(wù)。個(gè)人任務(wù)表將會(huì)展現(xiàn)出你要完成的處理。你能夠通過(guò)選擇并單擊“View”按鈕來(lái)完成這個(gè)任務(wù)。為了完成處理將會(huì)打開(kāi)一個(gè)任務(wù)表。你要填寫必要的數(shù)據(jù)并完成整個(gè)表,“ProcessOverview”并進(jìn)一步查看你的流程你可以通過(guò)"john"/"john"和"mary"/"mary"來(lái)記錄已經(jīng)完成的任務(wù)。在你啟動(dòng)并正在完成一些流程實(shí)例和人工任務(wù)之后,你能夠產(chǎn)生一個(gè)到目前為止所有事件的報(bào)告。在“Reporting“下選擇"ReportTemplates"??刂婆_(tái)默認(rèn)的有兩個(gè)報(bào)告模板,一個(gè)是產(chǎn)生所有流程的一般的概述,一個(gè)是為了監(jiān)控曾經(jīng)特有流程的定義。如果你選擇了后者,你要確認(rèn)在用流程定義的ID去查看活動(dòng)的處理流程時(shí)要輸入".evaluation"。點(diǎn)擊"CreateReport”按鈕來(lái)產(chǎn)生一個(gè)當(dāng)前狀態(tài)的實(shí)時(shí)報(bào)告。注意報(bào)告的初始化可能會(huì)花一點(diǎn)時(shí)間,特別是在你第一次使用你的應(yīng)用時(shí)。3.610分鐘指南:使用Guvnor知識(shí)庫(kù)和設(shè)計(jì)器GuvnorWeb的接口來(lái)管理你的流程。這包括基于Web的編輯器來(lái)查看和編輯流程。打開(kāi)DroolsGuvnor:你可以使用任何非空的用戶名密碼來(lái)登錄。下面的錄屏教你如何去管理你的知識(shí)庫(kù):[],它會(huì)告訴你:如何從Eclipse中導(dǎo)入一個(gè)已經(jīng)存在的流程到Guvnor中怎樣在一個(gè)Web編輯器中打開(kāi)你的處理流程怎樣創(chuàng)建一個(gè)用來(lái)創(chuàng)建會(huì)話的包圖3.3[.install-guvnor-]如果你想了解更多,我們建議你去看一下DroolsGuvnor文檔。ant并很容易關(guān)閉所有的rest3.7如果遇到問(wèn)題或有問(wèn)題應(yīng)該怎么去做若有安裝問(wèn)題,可這樣子:Email:IRC:#jBPM用戶論壇FAQ:1.腳本不能下載組件?檢查網(wǎng)絡(luò),或直接手動(dòng)下載后放到j(luò)bpm-installer/lib文件夾。2.下載的組件不能解壓?文件有問(wèn)題,重新下載。3.7經(jīng)常被問(wèn)的問(wèn)題一下常見(jiàn)問(wèn)題的解釋:?jiǎn)栴}:如果installer不能安裝某個(gè)組件?回答:你已經(jīng)連接到因特網(wǎng)了嗎?你的防火墻開(kāi)著嗎?你是否需要一個(gè)代理?這些都有可能當(dāng)我們正在下載組件時(shí)暫時(shí)離線。試著手動(dòng)下載組件,如何把他們放到j(luò)bpm-installer/lib文件夾下面。問(wèn)題:installer不能夠解壓縮包含的壓縮文件?回答:當(dāng)下載組件時(shí)下載失敗,可能是installer正在嘗試使用一個(gè)未完成的文件。嘗試在jbpm-installer/lib文件下刪除問(wèn)題組件并重新安裝,它將會(huì)重新下載。問(wèn)題:如果我已經(jīng)更改了我的安裝配置并向重新再一次通過(guò)清理原來(lái)的配置來(lái)啟動(dòng),該怎么做?ant來(lái)移除所有安裝的組件,結(jié)束后你再次刷新一下安裝配置就可以了。問(wèn)題:當(dāng)在嘗試停止或重啟確定服務(wù)時(shí)有時(shí)候會(huì)看到異常,我應(yīng)該怎么做?回答:如果你在關(guān)閉的時(shí)候看到錯(cuò)誤,你要確定是否還有服務(wù)在運(yùn)行。如果在重啟時(shí)看到異常,你要確定先前啟動(dòng)的服務(wù)是否被成功的關(guān)閉。如果有必要的話你可以嘗試強(qiáng)制關(guān)閉所有的服務(wù)。問(wèn)題:在運(yùn)行Eclipse的時(shí)候似乎有些異常但不知怎么去做?回答:首先查看控制臺(tái)的輸出,例如錯(cuò)誤信息或者棧回溯。你也可以檢查Eclipse的錯(cuò)誤日志。嘗試添加一個(gè)審查日志來(lái)記錄你的會(huì)話信息來(lái)描繪在運(yùn)行時(shí)或者在嘗試debug你的應(yīng)用時(shí)所發(fā)生的事件。問(wèn)題:在運(yùn)行基于Web的應(yīng)用時(shí)似乎有些錯(cuò)誤,例如jbpmconsole,GuvnorandtheDesignerjbpm-installer/jboss-4.2.3.GAdefault/log查看一下服務(wù)日志來(lái)看一下可能的異常。對(duì)于其他問(wèn)題,嘗試練習(xí)jBPM社區(qū)。第四章:核心引擎的API這章將會(huì)介紹在你需要連接和執(zhí)行你的流程是所要用到的API。怎樣去定義流程本身的更多細(xì)節(jié)可以去查看BPMN2.0章節(jié)。和流程引擎的鏈接,你需要去建立一個(gè)會(huì)話。這個(gè)會(huì)話用來(lái)和流程引擎聯(lián)系。會(huì)話需要有一個(gè)從knowledgebase引用,包含了所有相關(guān)流程定義的引用。這個(gè)knowledgebase是用來(lái)在任何有必要的時(shí)候來(lái)查看流程的定義。要去創(chuàng)建一個(gè)會(huì)話,你首先需要去創(chuàng)建一個(gè)knowledgebase,鏈接到所有的必需已定義的流程,然后初始化一個(gè)會(huì)話。一旦你建立了一個(gè)會(huì)話,你就可以用它來(lái)執(zhí)行流程了。一個(gè)流程無(wú)論什么時(shí)候被啟動(dòng),一個(gè)新的流程實(shí)例都將被創(chuàng)建,并維持特有的流程實(shí)例的狀態(tài)。例如,想象一下你正在寫一個(gè)銷售訂單的流程應(yīng)用。你可以定義一個(gè)或多個(gè)流程,定義這些訂單應(yīng)該怎樣去執(zhí)行。在啟動(dòng)你對(duì)應(yīng)用時(shí),你首先需要?jiǎng)?chuàng)建一個(gè)包含了所有已經(jīng)定義了的流程的knowledgebase。然后你就可以在基于knowledgebase的基礎(chǔ)上建立一個(gè)流程實(shí)例包含了特定銷售需求的流程狀態(tài)。一個(gè)knowledgebase能夠通過(guò)會(huì)話來(lái)共享并且通常只需要在應(yīng)用啟動(dòng)時(shí)創(chuàng)建一次。knowledgebase能夠動(dòng)態(tài)的更改。基于knowledgebase被創(chuàng)建的會(huì)話被用來(lái)執(zhí)行流程和與引擎互動(dòng)。你可以按你想的創(chuàng)建很多獨(dú)立的會(huì)話,創(chuàng)建一個(gè)會(huì)話是被認(rèn)為是輕量級(jí)的。創(chuàng)建多少會(huì)話全都依你而定??偟膩?lái)說(shuō),許多簡(jiǎn)單的情況只需要建立一個(gè)會(huì)話,然后可以在你應(yīng)用的其他地方調(diào)用。如果你想有多個(gè)獨(dú)立的流程單元,你可以決定創(chuàng)建多個(gè)會(huì)話,或者由于你出于可監(jiān)控的原因可以建立多個(gè)會(huì)話。如果你不知道怎么去做,可以通過(guò)建立一個(gè)包含所有流程定義的knowledgebase來(lái)開(kāi)始,然后創(chuàng)建一個(gè)會(huì)話,然后你就可以用來(lái)執(zhí)行你的流程了。4.1jBPMAPIjBPM項(xiàng)目和APIAPI的眾多特性,我們相信普通的用戶能夠安全的使用并且應(yīng)該保持使用相對(duì)穩(wěn)定的版本。專家用戶仍然能夠訪問(wèn)內(nèi)部類,但是要清楚他們正在做什么,并且內(nèi)部API在將來(lái)仍然可能改變。以上所做的解釋,jBPM應(yīng)該被用來(lái)創(chuàng)建一個(gè)knowledgebase,其包含你的流程定義,再就是創(chuàng)建一個(gè)用來(lái)啟動(dòng)新的流程實(shí)例、單獨(dú)存在的,或者注冊(cè)監(jiān)聽(tīng)器等等的會(huì)話。4.11KnowledgeBasejBPM允許你先創(chuàng)建一個(gè)knowledgebase。這個(gè)knowledgebase應(yīng)該包含你所有的流程定knowledgebaseknowledgebuilder來(lái)連接不同資源的流程,然后從builder創(chuàng)建一個(gè)新的knowledgebase。下面的代碼片段展示了怎樣去創(chuàng)建一個(gè)knowledgebase,這只包含一個(gè)流程定義。對(duì)于從文件系統(tǒng)連接文件、URL、輸入流,閱讀器等鏈接和ResourceFactory的方法相似。4.12會(huì)話一旦你裝載了knowledgebase,你應(yīng)該創(chuàng)建一個(gè)會(huì)話來(lái)和引擎結(jié)合。然后會(huì)話就能夠被來(lái)啟動(dòng)一個(gè)流程或單獨(dú)的事件。下面的代碼片段展現(xiàn)了基于先前創(chuàng)建的knowledgebase來(lái)創(chuàng)建一個(gè)會(huì)話是多么的容易,并可以通過(guò)id來(lái)啟動(dòng)流程。流程運(yùn)行時(shí)接口定義了會(huì)話的所有方法來(lái)處理流程,就像下面展示的一樣。*@returntheProcessInstancethatrepresentstheinstanceoftheprocessthatwasstarted*/ProcessInstancestartProcess(StringprocessId,Map<String,Object>parameters);相/***Signalstheenginethataneventhasoccurred.Thetypeparameterdefines*whichtypeofeventandtheeventparametercancontainadditionalinformation聽(tīng)*relatedtotheevent.Allprocessinstancesthatarelisteningtothistype*of(external)eventwillbenotified.Forperformancereasons,thistypeofevent*signalingshouldonlybeusedifoneprocessinstanceshouldbeabletonotify鏈*otherprocessinstances.Forinternaleventwithinoneprocessinstance,usethe*signalEventmethodthatalsoincludetheprocessInstanceIdoftheprocessinstance*inquestion.在**@paramtypethetypeofevent為*@parameventthedataassociatedwiththisevent*/voidsignalEvent(Stringtype,Objectevent);/***Signalstheprocessinstancethataneventhasoccurred.Thetypeparameterdefines調(diào)試的目的。下面的日志執(zhí)行已經(jīng)被默認(rèn)支持:1.控制臺(tái)記錄器:記錄器將多有事件都輸出到控制臺(tái)上2.文件記錄器:將多有的事件寫入到文件或者XML格式的文件,這個(gè)日志文件可能在集成開(kāi)發(fā)環(huán)境中被用到,在執(zhí)行過(guò)程中產(chǎn)生一個(gè)基于樹(shù)的可視化的事件發(fā)生記錄。3.線程文件記錄器:當(dāng)關(guān)閉記錄器或者在記錄器重一系列事件到達(dá)一個(gè)提起定義的等級(jí)的時(shí)候,文件記錄器才會(huì)將事件寫到硬盤上。在運(yùn)行時(shí)不能夠被用來(lái)調(diào)試流程。線程文件記錄器將會(huì)在每隔一個(gè)特定的時(shí)間就會(huì)輸出事件,它使得可以實(shí)時(shí)的用日志來(lái)查看流程成為可能。KnowledgeRuntimeLoggerFactory可以讓你添加一個(gè)日志記錄器到你的會(huì)話中,就像下面展現(xiàn)的一樣。當(dāng)創(chuàng)建一個(gè)控制臺(tái)記錄器的時(shí)候,由于記錄器的需要要?jiǎng)?chuàng)建一個(gè)knowledgesession線程文件記錄器是需要每隔一段時(shí)間就把事件保存起來(lái)。你一直應(yīng)該在結(jié)束你的應(yīng)用的時(shí)候關(guān)閉記錄器。KnowledgeRuntimeLoggerlogger=KnowledgeRuntimeLoggerFactory.new(ksession,"test");//addinvocationstotheprocessenginehere,日//e.g.ksession.startProcess(processId);...件logger.close();樹(shù)形來(lái)展示。事件的發(fā)生前后,事件是作為事件的孩子被展示。下面的截屏是一個(gè)簡(jiǎn)單當(dāng)流程完成之后。4.2.Knowledge-basedAPI你可能已經(jīng)注意到了,jBPM項(xiàng)目所暴露的API就是knowledgeAPI關(guān)注流程,潛在的其他knowledge類型也要允許被加載。這個(gè)對(duì)于用戶的影響幾乎是非常小的。這就意味著代替了ProcessBase或ProcessSession,你正在使用的是KnowledgeBase和一個(gè)KnowledgeSession。那么knowledge-basedAPI允許用戶可以添加不同類型的資源,例如流程和規(guī)則,幾乎是相同的方式引入到同一個(gè)knowledgebase。這就要求一個(gè)用戶指定如何去使用jBPM來(lái)啟動(dòng),DroolsExpert(forbusinessrules)orDroolsFusion(foreventprocessing)API和工具對(duì)于不同類型的knowledge是統(tǒng)一的。第五章核心引擎:基礎(chǔ)圖5.1業(yè)務(wù)流程是一張流程圖表,描述一系列執(zhí)行步驟的順序。它由多個(gè)結(jié)點(diǎn)組成,結(jié)點(diǎn)之間互相連接。一個(gè)流程是由節(jié)點(diǎn)的集合組成,節(jié)點(diǎn)通過(guò)連續(xù)鏈接。箭頭代表結(jié)點(diǎn)之間的連接,它指定如何從一個(gè)結(jié)點(diǎn)流向另外一個(gè)結(jié)點(diǎn)。提起定義的節(jié)點(diǎn)類型的大部分選擇都已經(jīng)被定義。這章主要描述了怎樣去定義這樣的流程和如何在你的應(yīng)用中使用它們。5.1創(chuàng)建一個(gè)流程流程的創(chuàng)建可以通過(guò)下面三種方式:1.Eclipse圖形編輯器插件2.使用XMLBPMN2.0規(guī)范XML格式定義的XML流程格式。3.通過(guò)流程API直接創(chuàng)建5.1.1EclipseBPMN2.0圖形編輯器插件EclipseBPMN2.0圖形編輯器允許你通過(guò)拖拽不同的節(jié)點(diǎn)到面板上并編輯這些節(jié)點(diǎn)的屬性的方式來(lái)創(chuàng)建一個(gè)流程。EclipseBPMN2.0圖形編輯器是jBPM/DroolsEclipse插件的jBPM選擇新建一個(gè)流程文件,然后就可以用流程編輯器打開(kāi)。首先,你要確保你能夠在Eclipse窗口的屬性視圖中看到流程的屬性,在你流程中的元素不同的屬性需要填寫時(shí)必須的。如果你不能看到屬性視圖,點(diǎn)擊“Window”,然后選擇"ShowView"and"Other...",然后再“General”文件夾下選擇屬性視圖(PropertiesView)。圖5.2新流程流程編輯器的組成部分就不翻譯了,插件已經(jīng)安裝好的,直接新建一個(gè)流程就OK了。5.1.2使用XML定義流程使用符合BPMN2.0規(guī)范的XML來(lái)直接指定流程頁(yè)是可能的。XML流程的語(yǔ)法已經(jīng)在BPMN2.0XMLSchemaXML包含一個(gè)開(kāi)始事件、一個(gè)腳本任務(wù)在控制臺(tái)打印“HelloWorld”,和一個(gè)結(jié)束事件的次序。XML流程文件的結(jié)構(gòu)不做翻譯,具體的請(qǐng)看上面的例子。5.1.3使用流程API定義流程推薦使用圖像編輯器或者在XML下定義流程,當(dāng)然也可以使用API直接定義。很多重要.and..node.中。靈活的API允許你使用工廠的易讀方式很容易的構(gòu)建一個(gè)流程。最后,你需要確認(rèn)你手動(dòng)構(gòu)建的流程。例子這是一個(gè)帶有腳本任務(wù)的基本流程的簡(jiǎn)單示例:你可以看到我們可以通過(guò)從RuleFlowProcessFactory類調(diào)用creatProcess()靜態(tài)方法來(lái)開(kāi)始。這個(gè)方法根據(jù)給出的id創(chuàng)建一個(gè)新的流程,并返回一個(gè)用來(lái)創(chuàng)建流程的RuleFlowProcessFactory。一個(gè)典型的流程由三部分組成。頭部由像流程的名稱,引入的變量等全局元素組成。包含了所有不同節(jié)點(diǎn)的節(jié)點(diǎn)片段組成了流程。連線片段最終鏈接每一個(gè)節(jié)點(diǎn)來(lái)創(chuàng)建一個(gè)流程圖。在這個(gè)例子中,頭部包含了流程的名稱、版本和包的名稱。之后,你就可以在當(dāng)前的流程中添加節(jié)點(diǎn)了。如果你已經(jīng)自動(dòng)完成了,你能夠看到你有不同的方法來(lái)創(chuàng)建每一個(gè)你已經(jīng)配置的支持的節(jié)點(diǎn)類型。在例子中你通過(guò)調(diào)用startNode(),actionNode()和endNode()方法在流程中添加節(jié)點(diǎn),這些方法將返回一個(gè)特定的NodeFactory,允許你設(shè)定節(jié)點(diǎn)屬性。一旦你配置完節(jié)點(diǎn),done()方法返回當(dāng)前的一個(gè)RuleProcessFactoryconnection方法調(diào)用先前創(chuàng)建的節(jié)點(diǎn)。validate()RuleFlowProcess對(duì)象。5.2不同流程構(gòu)造的細(xì)節(jié)概述BPMN中執(zhí)行的流程由用有次序的流程連接的不同類型的節(jié)點(diǎn)組成。BPMN2.0規(guī)范定義了三種主要的節(jié)點(diǎn)類型:Events:是用來(lái)建模特定事件的發(fā)生。事件有開(kāi)始事件,結(jié)束事件,中間事件。Activities:這些動(dòng)作定義了在流程執(zhí)行過(guò)程當(dāng)中需要被執(zhí)行的不同動(dòng)作。不同類型的任務(wù)是要依賴于你正在建模的動(dòng)作的類型,并且動(dòng)作是可以嵌套的。Gateways:你能夠在流程中定義多個(gè)路徑。依賴gateway的類型,這可以是指示并行的執(zhí)行、選擇等待。下面的片段將會(huì)描述本身的屬性和每一個(gè)不同節(jié)點(diǎn)類型的細(xì)節(jié),作為Eclipse插件所支持的并在流程圖中顯示出來(lái)。Eclipse屬性編輯器可以顯示更多的所支持的節(jié)點(diǎn)類型的BPMN2.0XML格式被支持的定義在片段當(dāng)中的屬性才可以被顯示。圖5.3不同類型的BPMN2節(jié)點(diǎn)5.3流程屬性的細(xì)節(jié)BPMN2流程圖式就是使用連線將不同類型的節(jié)點(diǎn)鏈接起來(lái)。流程本書由以下屬性:?id:流程的唯一標(biāo)識(shí)?Name:流程的顯示名稱?Version:流程的版本?Package:流程被定義所在的包?Variables:在流程執(zhí)行過(guò)程中變量可以被定義用來(lái)存儲(chǔ)數(shù)據(jù),請(qǐng)看數(shù)據(jù)細(xì)節(jié)片段。?Swimlanes:暫翻譯為泳道。在流程中指定的泳道用來(lái)分配人工任務(wù)。查看具體細(xì)節(jié)“HumanTasks”章節(jié)5.4事件細(xì)節(jié)5.4.1開(kāi)始事件圖5.4開(kāi)始事件開(kāi)始事件是流程的開(kāi)始,一個(gè)流程應(yīng)該有一個(gè)正確的開(kāi)始節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)不能夠有進(jìn)入鏈接,并且應(yīng)該有一個(gè)輸出鏈接。一個(gè)流程無(wú)論在什么時(shí)候被啟動(dòng)、執(zhí)行,都將在開(kāi)始節(jié)點(diǎn)開(kāi)始并自動(dòng)從第一個(gè)節(jié)點(diǎn)鏈接開(kāi)始事件等等。它包含以下的屬性:?Id:節(jié)點(diǎn)的Id?Name:節(jié)點(diǎn)的展示名字5.4.2結(jié)束事件結(jié)束事件圖5.5結(jié)束事件代表流程的結(jié)束。一個(gè)流程應(yīng)該有一個(gè)或者多個(gè)結(jié)束事件。一個(gè)結(jié)束事件應(yīng)該有一個(gè)進(jìn)入鏈接二沒(méi)有輸出鏈接。它包含以下屬性:?Id:節(jié)點(diǎn)ID?Name:節(jié)點(diǎn)的名稱?Terminate時(shí)候,就意味著流程的狀態(tài)被設(shè)為完成,而流程實(shí)例中所有活動(dòng)的節(jié)點(diǎn)都將被刪除。沒(méi)有終結(jié)結(jié)束事件只是簡(jiǎn)單的結(jié)束一個(gè)路徑,其他的并行路徑仍然能夠繼續(xù)。一個(gè)流程實(shí)例在路徑中如果沒(méi)有動(dòng)作,那么這個(gè)流程會(huì)自動(dòng)完成。終止結(jié)束事件可以通過(guò)事件節(jié)點(diǎn)的內(nèi)部循環(huán)看成它的作用,而非終止結(jié)束事件則是沒(méi)有作用。注意:如果你在一個(gè)子流程中使用了終止結(jié)束事件,你將終止高一級(jí)的流程實(shí)例,而不僅僅是子流程。拋出錯(cuò)誤事件圖5.6拋出錯(cuò)誤事件在流程中當(dāng)一個(gè)錯(cuò)誤事件發(fā)生的時(shí)候,它將拋出一個(gè)錯(cuò)誤并給出錯(cuò)誤名稱。而流程將會(huì)搜索能夠使得解決這種錯(cuò)誤的處理方法。如果沒(méi)有錯(cuò)誤處理被發(fā)現(xiàn),流程實(shí)例將會(huì)被終止。一個(gè)錯(cuò)誤事件包括了以下屬性:?Id:節(jié)點(diǎn)Id?Name:節(jié)點(diǎn)的名稱?FaultName:錯(cuò)誤名稱。這個(gè)名稱用來(lái)搜索合適的能夠處理這種錯(cuò)誤能力的處理方法。錯(cuò)誤處理能夠被指定用來(lái)處理邊界事件?,F(xiàn)在只能通過(guò)在XML當(dāng)中直接來(lái)實(shí)現(xiàn)。我們將在新的BPMN2編輯器中提供圖形編輯的支持。5.4.3中間事件獲取定時(shí)器事件圖5.7獲取定時(shí)器事件代表著在給出一段時(shí)間后定時(shí)器會(huì)引發(fā)一次或多次。一個(gè)計(jì)時(shí)器事件應(yīng)該有一個(gè)輸入連當(dāng)一個(gè)計(jì)時(shí)器事件發(fā)生的時(shí)候,流程將會(huì)和計(jì)時(shí)器相關(guān)聯(lián)。如果計(jì)時(shí)器節(jié)點(diǎn)被取消,那么計(jì)時(shí)器也將被取消。參考“Timers”?Id:節(jié)點(diǎn)Id?Name:節(jié)點(diǎn)的名稱?Timerdelay:在節(jié)點(diǎn)被第一次觸發(fā)之前節(jié)點(diǎn)要等待的時(shí)間。其格式應(yīng)該為[#d][#h][#m][#s][#[ms]]。這就意味著你可以指定天,小時(shí),分鐘,秒,毫秒的大小?!?h”#{}動(dòng)態(tài)設(shè)定基于一些流程變量的延遲。這可以是一個(gè)流程變量,或者是一個(gè)基于流程變量的復(fù)雜表達(dá),例如(e.g.())。?Timerperiod:計(jì)時(shí)器間隔,或者譯為時(shí)期。就是在兩個(gè)子序列引發(fā)之間的那段時(shí)期。如果間隔為0,那么計(jì)時(shí)器就會(huì)被立刻觸發(fā)。其格式也應(yīng)該是[#d][#h][#m][#s][#[ms]]。獲取信號(hào)事件圖5.8獲取信號(hào)事件在流程的執(zhí)行當(dāng)中,一個(gè)信號(hào)事件可以用來(lái)作為對(duì)內(nèi)部或外部事件的回應(yīng)。它指定了預(yù)期事件的類型。無(wú)論這個(gè)事件類型什么時(shí)候被探測(cè)到,與它相連接的事件節(jié)點(diǎn)都將被觸發(fā)。它包含以下屬性:?Id:節(jié)點(diǎn)的Id?Name:節(jié)點(diǎn)的名稱?EventType:所期望的節(jié)點(diǎn)的類型?variableName:當(dāng)這個(gè)事件發(fā)生的時(shí)候,變量名稱就會(huì)和這個(gè)事件的數(shù)據(jù)相關(guān)聯(lián)。流程實(shí)例可以定義一個(gè)特定事件的信號(hào)事件通過(guò)使用:(eventType,data,processInstanceId)。在等待的事件類型的流程實(shí)例中,所有的事件節(jié)點(diǎn)都將被觸發(fā)。如果事件節(jié)點(diǎn)指定了一個(gè)變量名稱,當(dāng)事件發(fā)生的時(shí)候這個(gè)數(shù)據(jù)將會(huì)被復(fù)制到變量中。當(dāng)然,也可以用在子流程的內(nèi)部事件節(jié)點(diǎn)中。這些事件節(jié)點(diǎn)在子流程被激活的時(shí)候也會(huì)被激活。你能夠在流程實(shí)例的內(nèi)部產(chǎn)生一個(gè)信號(hào)。一個(gè)腳本能夠使用:().signalEvent(eventType,data,().getId());拋出一個(gè)信號(hào)事件也可以用來(lái)模擬一個(gè)事件的信號(hào)。不過(guò)這個(gè)現(xiàn)在也只能直接在XML們?cè)谛碌腂PMN2編輯器重將會(huì)添加圖形編輯的支持。5.5動(dòng)作細(xì)節(jié)5.5.1腳本任務(wù)圖5.9腳本任務(wù)相關(guān)聯(lián)的動(dòng)作應(yīng)該指定什么要被執(zhí)行,還有編碼動(dòng)作的方言,和正在的動(dòng)作代碼。這段代碼可以訪問(wèn)任何變量和全局參數(shù)。這還有一個(gè)提前定義的變量kcontext從ProcessContext后繼續(xù)到下一個(gè)節(jié)點(diǎn)。它包含以下節(jié)點(diǎn):?Id:節(jié)點(diǎn)的Id?Name:節(jié)點(diǎn)的名稱?Action:與這個(gè)動(dòng)作節(jié)點(diǎn)相關(guān)聯(lián)的動(dòng)作腳本java代碼。這基本上允許你在腳本代碼內(nèi)做任何事。然而,這里也有一些警告:?當(dāng)你試著去創(chuàng)建一個(gè)高級(jí)的業(yè)務(wù)流程時(shí),你應(yīng)該確定能夠被業(yè)務(wù)用戶所理解,在流程內(nèi)部避免低級(jí)的執(zhí)行細(xì)節(jié)將會(huì)是明智的。包括在腳本任務(wù)的內(nèi)部。腳本任務(wù)仍然可以用來(lái)快速處理變量等。但是像服務(wù)任務(wù)等其他的任務(wù)能夠被用來(lái)在高級(jí)方式中建模更加復(fù)雜的行為。?腳本應(yīng)該是immediate腳本的執(zhí)行可能會(huì)花一些時(shí)間,它的執(zhí)行可能會(huì)被以異步的服務(wù)任務(wù)方式來(lái)進(jìn)行。?你應(yīng)該盡量避免通過(guò)腳本節(jié)點(diǎn)和外部服務(wù)相關(guān)聯(lián)。這不僅僅違法了前面兩個(gè)的警告,它將會(huì)影響除了knowledge引擎之外的其他外部服務(wù),這將會(huì)產(chǎn)生問(wèn)題,特別是在持久化和轉(zhuǎn)換時(shí)??偟膩?lái)說(shuō),使用服務(wù)任務(wù)來(lái)和外部的服務(wù)相關(guān)聯(lián)是相當(dāng)明智的。?腳本不應(yīng)該拋出異常。運(yùn)行時(shí)異常應(yīng)該被捕獲,例如在腳本內(nèi)部進(jìn)行管理,或者轉(zhuǎn)換成信號(hào),或者產(chǎn)生的錯(cuò)誤能夠在流程內(nèi)部處理。5.5.3服務(wù)任務(wù)圖5.1.服務(wù)任務(wù)代表一個(gè)在流程中應(yīng)該被執(zhí)行的工作單元。在流程引擎外部執(zhí)行的所有的工作都應(yīng)該使用服務(wù)任務(wù)來(lái)描繪或執(zhí)行。BPMN2.0已經(jīng)提前定義了不同的服務(wù)類型,例如發(fā)送郵件服務(wù),消息日志等等。用戶可以定義特有域的服務(wù)或工作條目,使用唯一的名稱并定義所domain-specificprocesses章節(jié)你可以獲得更多的細(xì)節(jié)解釋和在你的流程中怎樣去定義和使用工作條目的說(shuō)明。一個(gè)服務(wù)任務(wù)應(yīng)該有一個(gè)輸入連接和一個(gè)輸出鏈接。?Id:節(jié)點(diǎn)的Id?Name:節(jié)點(diǎn)的名稱?Parametermapping:參數(shù)映射,允許復(fù)制流程變量的值到工作條目的參數(shù)。在工作條目創(chuàng)建的時(shí)候,值就會(huì)被復(fù)制。?Resultmapping夠定義結(jié)果參數(shù),在工作條目完成之后返回參數(shù)的值。結(jié)果映射就是用來(lái)復(fù)制結(jié)果參數(shù)的值到流程的變量。例如,“”工作條目返回符合給出的搜索參數(shù)的文件列表。這個(gè)文件列表然后與流程變量綁定。在完成了工作條目之后,這些值將會(huì)被復(fù)制。?On-entryandon-exit:進(jìn)入、退出動(dòng)作,當(dāng)進(jìn)入虎退出節(jié)點(diǎn)的時(shí)候分別執(zhí)行的動(dòng)作。?Additionalparameter和工作的類型相關(guān)。例如,“Email”工作條目定義的額外參數(shù)有“from,To,subject,body”這個(gè)映射用來(lái)復(fù)制流程中變量的值到給出的參數(shù),如果兩者都被指定,那么這個(gè)映射具String類型的參數(shù)可以用#{expression}來(lái)侵入到一個(gè)StringtoString()返回的結(jié)果所代替。表達(dá)式也可以是簡(jiǎn)單的變量名,但是,使用MVEL表達(dá)可能會(huì)更好(#{.firstname})5.5.3用戶任務(wù)圖:5.11用戶服務(wù)流程包含的任務(wù)由人工角色來(lái)執(zhí)行。用戶任務(wù)代表一個(gè)有人工角色來(lái)執(zhí)行的最初任務(wù)。它應(yīng)該有一個(gè)輸入連接和一個(gè)輸出鏈接。用戶任務(wù)可以被用來(lái)和Swimlance泳道相結(jié)合humantasks服務(wù)就是一個(gè)服務(wù)節(jié)點(diǎn)特有類型。一個(gè)用戶任務(wù)包含以下屬性:?id?Name?TaskName:任務(wù)名?Priority:優(yōu)先權(quán),一個(gè)整形數(shù)代表人工任務(wù)的優(yōu)先權(quán)?Comment:和人工任務(wù)相關(guān)的注釋?ActorId:代表執(zhí)行這個(gè)人工任務(wù)的角色I(xiàn)d,一個(gè)角色列表可以用逗號(hào)分開(kāi)來(lái)指定?GroupId:代表執(zhí)行這個(gè)人工任務(wù)的組,一個(gè)組列表可以用逗號(hào)分開(kāi)來(lái)指定?Skipable:指定人工任務(wù)十分要跳過(guò)去,角色可以決定是否去執(zhí)行。?content:和這個(gè)任務(wù)相關(guān)聯(lián)的數(shù)據(jù)?Swimlane:Swimlane同的角色變得非常容易。查看跳過(guò)任務(wù)章節(jié)可以得到更多關(guān)于泳道的使用細(xì)節(jié)。?Onentryandonexitactions:在進(jìn)入或退出節(jié)點(diǎn)時(shí)動(dòng)作腳本將會(huì)分別執(zhí)行?Parametermapping:允許復(fù)制流程變量的值到人工任務(wù)的參數(shù),人工任務(wù)的創(chuàng)建,值就會(huì)被復(fù)制。?Rusultmapping:允許復(fù)制人工任務(wù)參數(shù)的結(jié)果值到流程變量。在人工任務(wù)完成之時(shí),值就會(huì)被復(fù)制。人工任務(wù)有一個(gè)結(jié)果變量“Result”,它包含人工角色的返回?cái)?shù)據(jù)。變量ActorId包含了真正執(zhí)行任務(wù)的角色I(xiàn)d。用戶任務(wù)應(yīng)該定義需要執(zhí)行的任務(wù)類型和需要完成它的人。注意:如果有和特定流程實(shí)例相關(guān)的數(shù)據(jù),最終用戶應(yīng)該在執(zhí)行任務(wù)的時(shí)候,數(shù)據(jù)應(yīng)該作為任務(wù)的內(nèi)容內(nèi)傳遞。這個(gè)任務(wù)不需要訪問(wèn)流程變量。查看人工任務(wù)章節(jié)活動(dòng)如何在人工任務(wù)和流程實(shí)例之間傳遞數(shù)據(jù)。5.5.4重用的子流程圖5.12重用的子流程Id?Id:?Name?ProcessId?WaitforpletionTrue,那么這個(gè)子流程的節(jié)點(diǎn)僅僅在子流程啟動(dòng)并完成它的任務(wù)時(shí)才會(huì)繼續(xù)。不然的話,即設(shè)為False的時(shí)候,節(jié)點(diǎn)會(huì)在啟動(dòng)流程之后直接執(zhí)行。?Independent:如果這個(gè)屬性設(shè)為True,那么子流程將作為一個(gè)獨(dú)立的流程啟動(dòng),這意味著即使父流程完成子流程也不會(huì)終止。不然當(dāng)父流程在終止的時(shí)候子流程的活動(dòng)將被取消。?On-entryandon-exitactions:在進(jìn)入或退出節(jié)點(diǎn)的時(shí)候會(huì)分別被執(zhí)行。?Parameterin/outmapping:一個(gè)子流程能夠針對(duì)變量定義in-和out-映射,當(dāng)流程啟動(dòng)時(shí),在“in”映射中給出的變量將作為參數(shù)。當(dāng)子流程完成的時(shí)候,被定義在“out”子流程中的變量將會(huì)被復(fù)制到這個(gè)流程的變量。注意:你只有在“Waitforpletion”設(shè)為true的時(shí)候“out”映射才能使用。5.5.5業(yè)務(wù)規(guī)則任務(wù)圖5.13業(yè)務(wù)規(guī)則任務(wù)“evaluated”則會(huì)被“evaluated”。一個(gè)規(guī)則任務(wù)應(yīng)該有一個(gè)進(jìn)入鏈接和一個(gè)退出鏈接。規(guī)則使用DroolSruleformateruleflow-group特性時(shí)規(guī)則就成為了指定規(guī)則流程組的一部分。在流程中,當(dāng)一個(gè)規(guī)則任務(wù)到達(dá)時(shí),引擎將會(huì)執(zhí)行相應(yīng)的規(guī)則流程組的部分規(guī)則。如果在規(guī)則流程組中沒(méi)有其他的動(dòng)作規(guī)則,將會(huì)自動(dòng)繼續(xù)執(zhí)行下一個(gè)節(jié)點(diǎn)。這就意味著在一個(gè)規(guī)則流程組的執(zhí)行過(guò)程中,由于日程的更改,一個(gè)屬于當(dāng)前活動(dòng)規(guī)則流程組的一個(gè)新的動(dòng)作有可能會(huì)通過(guò)其他的規(guī)則被添加到這個(gè)日程中成為事實(shí)。注意:如果一個(gè)流程有一個(gè)規(guī)則流程組,而在流程組內(nèi)沒(méi)有動(dòng)作規(guī)則,那么流程將會(huì)直接進(jìn)入下一個(gè)節(jié)點(diǎn)。如果規(guī)則流程組已經(jīng)被激活,規(guī)則流程組將會(huì)保持激活狀態(tài)并執(zhí)行,只有當(dāng)在規(guī)則流程組中所有激活的規(guī)則被執(zhí)行完才會(huì)繼續(xù)向下執(zhí)行。它包含以下屬性:?id?Name?RuleFlowGroup:規(guī)則流程組的名字,代表這個(gè)規(guī)則流程組節(jié)點(diǎn)的一組規(guī)則。5.5.6嵌入子流程圖5.14嵌入子流程一個(gè)子流程就是一個(gè)能夠包含其他節(jié)點(diǎn)的節(jié)點(diǎn),事實(shí)上講就是一個(gè)節(jié)點(diǎn)容器。這不僅僅允許在這樣一個(gè)子流程節(jié)點(diǎn)嵌入流程的一部分,而且可以添加容器內(nèi)所有節(jié)點(diǎn)都可以訪問(wèn)的變量。一個(gè)子流程應(yīng)該有一個(gè)進(jìn)入鏈接和一個(gè)退出鏈接。它也應(yīng)該包含一個(gè)開(kāi)始節(jié)點(diǎn),這個(gè)開(kāi)始節(jié)點(diǎn)定義了在進(jìn)入子流程時(shí)應(yīng)該從哪里啟動(dòng)。它當(dāng)然也應(yīng)該包含一個(gè)或多而不僅僅是子流程,所有,你應(yīng)該在子流程內(nèi)使用非終止節(jié)點(diǎn)。在子流程中如果沒(méi)有活動(dòng)節(jié)點(diǎn)存在,那么這個(gè)子流程將會(huì)結(jié)束。它包含以下屬性:?id?Name?Variables:在這個(gè)節(jié)點(diǎn)執(zhí)行中,可以添加變量來(lái)存儲(chǔ)數(shù)據(jù)。詳細(xì)內(nèi)容參見(jiàn)“Data”。5.5.7多個(gè)實(shí)例子流程圖5.15多實(shí)例子流程一個(gè)多實(shí)例子流程是一個(gè)指定類型的子流程,它允許你多次執(zhí)行所包含的流程片段,每一個(gè)元素都會(huì)在集合當(dāng)中。一個(gè)多個(gè)實(shí)例子流程應(yīng)該有一個(gè)進(jìn)入鏈接和一個(gè)退出鏈接。在繼續(xù)執(zhí)行之前,要等嵌入的流程片段中給出的集合中每一個(gè)元素都被完成才能繼續(xù)。它包含以下屬性:?id?Name?CollectionExpression:一個(gè)變量名稱,代表著應(yīng)該被迭代結(jié)束的元素集合。這個(gè)集合變量應(yīng)該是.Collection類型的數(shù)組。如果集合表達(dá)值為空或?yàn)橐粋€(gè)空集合,那么多個(gè)實(shí)例子流程將會(huì)直接完成并沿著它的流出鏈接流出。?VariableName的節(jié)點(diǎn)能夠訪問(wèn)所愿的元素。5.6Gateways細(xì)節(jié)圖5.16分支網(wǎng)關(guān)允許你在你的流程中創(chuàng)建一個(gè)分支。一個(gè)分支網(wǎng)關(guān)應(yīng)該有一個(gè)進(jìn)入鏈接和兩個(gè)或多個(gè)流出鏈接。當(dāng)前所支持的有三種類型的網(wǎng)關(guān)節(jié)點(diǎn):?ANDorparallel:與或并行,意味著控制流程對(duì)流出鏈接同時(shí)進(jìn)行處理?XORorexclusive:evaluatestotrue能夠用不同的方言來(lái)指定。注意:你應(yīng)該確保在運(yùn)行時(shí)至少有一個(gè)流程連接被評(píng)估為正確的。?ORorinclusive:或,包含,意味著在所有的流出鏈接中,無(wú)論誰(shuí)被評(píng)估為true,都將被選擇。條件和排斥的網(wǎng)關(guān)相似,沒(méi)有優(yōu)先權(quán)的除外。注意:你應(yīng)該確保至少有一個(gè)流程連接在運(yùn)行時(shí)被評(píng)估為true個(gè)異常。它包含以下屬性:?id?Name?Type:分離節(jié)點(diǎn)的類型,AND,XORorOR。?Constraint:鏈接每一個(gè)流出鏈接的約束5.6.2合并網(wǎng)關(guān)圖5.17合并網(wǎng)關(guān)允許你同步多個(gè)分支。一個(gè)合并網(wǎng)關(guān)應(yīng)該有兩個(gè)或多個(gè)進(jìn)入鏈接和一個(gè)流出鏈接。當(dāng)前支持兩種類型的分離:?ANDorparallel:在繼續(xù)執(zhí)行之前要等所有的進(jìn)入分支完整?XORorexclusive如果有多個(gè)進(jìn)入鏈接被觸發(fā),那么它將針對(duì)這些引發(fā)每一個(gè)來(lái)引發(fā)下一個(gè)節(jié)點(diǎn)。它包含以下屬性:+?id?Name?Type:聯(lián)合節(jié)點(diǎn)的類型,ANDorXOR5.7在你的應(yīng)用中使用流程在API章節(jié)已經(jīng)做了很多的解釋,為了能夠執(zhí)行你應(yīng)用中的流程,你需要做兩件事:(1)你需要?jiǎng)?chuàng)建一個(gè)KnowledgeBase(2)你需要通過(guò)創(chuàng)建一個(gè)session來(lái)啟動(dòng)流程,并通過(guò)session來(lái)和流程引擎鏈接。1.創(chuàng)建一個(gè)KnowledgeBase:你需要有一個(gè)可用的流程,然后添加流程到KnowledgeBase:KnowledgeBuilderkbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();kbuilder.add(ResourceFactory.newClassPathResource("MyProcess.bpmn2"),在ResourceType.BPMN2);注意:如果knowledgebase包含錯(cuò)誤,這將會(huì)拋出一個(gè)異常。2.啟動(dòng)一個(gè)流程:?jiǎn)?dòng)一個(gè)指定的流程,你需要用你的的session去調(diào)用startProcess方法并傳遞你想要啟動(dòng)的流程的id。例如:startProcess方法的參數(shù)是需要啟動(dòng)的流程的id。當(dāng)定義一個(gè)流程時(shí),流程的id需要作為流程的一個(gè)屬性來(lái)指定。當(dāng)你啟動(dòng)流程時(shí),你可以使用startProcess(StringprocessId,Mapparameters)方法來(lái)指定額外的參數(shù)來(lái)傳遞流程輸入的額外數(shù)據(jù)。額外的一組參數(shù)就是一組名值對(duì)。這些參數(shù)能夠作為流程的高級(jí)變量被復(fù)制到被新創(chuàng)建的流程實(shí)例,所以他們能夠直接訪問(wèn)你流程的remainder(不知怎么翻譯)。5.8其他特性5.8.1數(shù)據(jù)雖然流程表關(guān)注于指定的流程控制流向,但是從數(shù)據(jù)的角度來(lái)查看流程一般也是很有必要的。一個(gè)流程的執(zhí)行,數(shù)據(jù)能夠獲得、存儲(chǔ)、傳遞和使用。為了存儲(chǔ)運(yùn)行時(shí)的數(shù)據(jù),在流程的執(zhí)行過(guò)程中,可以使用流程變量。一個(gè)變量通過(guò)變量booleanint或者String,或者任何的對(duì)象子類型。變量能夠在變量域內(nèi)定義。高級(jí)的域就是流程的變量域。子域在一個(gè)子流程中定義。在子流程中定義的變量只能訪問(wèn)這個(gè)域中的節(jié)點(diǎn)。當(dāng)一個(gè)變量被訪問(wèn)時(shí),流程將會(huì)在相應(yīng)的變量域中查找定義的變量。變量域的嵌套是允許的。一個(gè)節(jié)點(diǎn)在它的父容器中可以一直查找到。如果變量不能夠查找到,那么它將會(huì)在它的父容器中查找,直到查找到流程實(shí)例自身為止。如果一個(gè)變量不能被找到,那么讀訪問(wèn)會(huì)被設(shè)置為null,并且一個(gè)寫訪問(wèn)會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息,但流程會(huì)繼續(xù)執(zhí)行。變量可以以多種方式使用:?Process-levelvariablesstartProcess方法通過(guò)提供的參數(shù)映射來(lái)啟動(dòng)流程時(shí)被設(shè)置。這些參數(shù)將會(huì)被作為流程域的變量設(shè)置。?Scriptactions".Person"類型的變量,在流程的腳本中就可以直接的訪問(wèn):通過(guò)knowledgecontext可以直接在腳本中改變變量的值:kcontext.setVariable(variableName,value);?Servicetasks:服務(wù)任務(wù)能夠通過(guò)映射變量到流出參數(shù)來(lái)傳遞流程變量的值到外部(或者另一流程實(shí)例)。例如,一個(gè)服務(wù)任務(wù)的參數(shù)映射在服務(wù)正在被調(diào)用時(shí)能夠定義流程變量X的值應(yīng)該映射到一個(gè)任務(wù)參數(shù)Y。當(dāng)然你也可以經(jīng)流程變量的值注入到一個(gè)硬編碼的參數(shù)String類型,使用#{expression}。例如,一個(gè)人工任務(wù)的描述能夠被定義為:#{()},當(dāng)服務(wù)需要去唄調(diào)用時(shí),可以通過(guò)使用實(shí)際的Person類名來(lái)代替這個(gè)表達(dá)。使用結(jié)果映射,一個(gè)服務(wù)的結(jié)果可以相似的被復(fù)制回一個(gè)變量。?各種其他的節(jié)點(diǎn)也能夠訪問(wèn)數(shù)據(jù)。例如,事件節(jié)點(diǎn)可以存儲(chǔ)數(shù)據(jù)到相關(guān)聯(lián)的事件變量中。查看不同類型節(jié)點(diǎn)的屬性獲取更多的信息。KnowledgeSession中全局定義變量和數(shù)據(jù)。在動(dòng)作中全局變量可以直接訪問(wèn)就像變量一樣。在全局變量能夠被使用之前,全局變量需要作為流程的一部分被定義。例如,當(dāng)在Eclipse動(dòng)作屬性編輯器中指定一個(gè)動(dòng)(name,value)或從流程內(nèi)部的腳本使用().setGlobal(name,value)來(lái)設(shè)置全局變量的值。5.8.2約束流程可以用在你流程的各種地方。例如在一個(gè)分離網(wǎng)關(guān)中。jBPM支持兩種類型的約束:?Codeconstraint:代碼約束就是布爾表達(dá),直接判斷他們什么時(shí)候到達(dá)。我們現(xiàn)在對(duì)Java和MEVL。Java和MVEL代碼約束都可以直接的訪問(wèn)在流程中定義的全局變量和變量。這有一個(gè)java約束的例子,person是流程中的一個(gè)變量:相似的可用MVEL代碼約束:?規(guī)則約束等同于正常的Droolsrule條件。用DroolsRule語(yǔ)言的語(yǔ)法來(lái)表達(dá)可能復(fù)雜的約束。就像其他的規(guī)則一樣,這些規(guī)則能夠在工作內(nèi)存中引用數(shù)據(jù)。當(dāng)然也可以直接引用全局變量。下面有一個(gè)可用的規(guī)則約束:這測(cè)試了在工作內(nèi)存中年齡大于20的人。規(guī)則約束不能直接訪問(wèn)在流程中定義的變量。但是可以在一個(gè)規(guī)則約束的內(nèi)部引用當(dāng)前流程的實(shí)例,這要通過(guò)添加流程實(shí)例到工作內(nèi)存,并在規(guī)則約束中匹配流程實(shí)例。我們已經(jīng)添加了指定的邏輯來(lái)確保WorkflowProcessInstance類型的變量processInstance在工作內(nèi)存中僅僅只匹配當(dāng)前的流程實(shí)例而不是其他的流程實(shí)例。注意:無(wú)論怎么樣,在你的流程中使用Java代碼或者一個(gè)on-entryon-exitexplicit例到session,或者是更新都是你自己的責(zé)任。下面的規(guī)則約束例子將會(huì)搜索相同名字的人并最為值存儲(chǔ)到流程的變量“name”中:processInstance:WorkflowProcessInstance()Person(name==(processInstance.getVariable("name")))#addmoreconstraintshere...?在腳本任務(wù)中使用?作為一個(gè)進(jìn)入或退出動(dòng)作動(dòng)作可以訪問(wèn)在流程中被定義的全局變量和變量,和預(yù)定義的變量kcontext.這個(gè)變量是..ProcessContext類型的并能夠在服務(wù)任務(wù)中使用:?得到當(dāng)前節(jié)點(diǎn)的實(shí)例。節(jié)點(diǎn)實(shí)例會(huì)查詢相關(guān)數(shù)據(jù),例如它的名稱和類型。你也能夠取消當(dāng)前的節(jié)點(diǎn)實(shí)例。?得到當(dāng)前的流程實(shí)例。一個(gè)流程實(shí)例能夠被查詢數(shù)據(jù)(名稱、id、processid終止或引發(fā)一個(gè)內(nèi)部事件。?得到或設(shè)置變量的值?運(yùn)行時(shí)訪問(wèn)Knowledge,允許你啟動(dòng)一個(gè)流程,發(fā)出事件信號(hào),插入數(shù)據(jù)等等。jBPM當(dāng)前支持兩種方言Java和MVEL。Java動(dòng)作應(yīng)該是可用的Java代碼。MVEL動(dòng)作使用業(yè)務(wù)腳本語(yǔ)言MVELMVEl可以接受任何的可用JavaMVEL表達(dá)對(duì)于業(yè)務(wù)用戶來(lái)說(shuō)更為方便。例如,一個(gè)打印人的名字的動(dòng)作:5.8.4事件圖5.18使用事件的簡(jiǎn)單流程在一個(gè)流程的執(zhí)行過(guò)程中,流程引擎要根據(jù)流程計(jì)劃,通過(guò)請(qǐng)求工作條目的的執(zhí)行并等待結(jié)果來(lái)確保所有的相關(guān)任務(wù)被執(zhí)行。然而,流程應(yīng)該響應(yīng)那些不是被流程引擎直接請(qǐng)求的事件。明確的描繪在流程中的事件,允許流程作者去指定對(duì)于這種事件流程應(yīng)該做出如何反應(yīng)。事件有一個(gè)類型并可能有和他們相關(guān)的數(shù)據(jù)。用戶可以自由的定義他們自己的事件類型和他們相關(guān)的數(shù)據(jù)。一個(gè)流程能夠通過(guò)使用MessageEvent指定事件的類型。它也能夠定義變量的名稱,用來(lái)接收和事件相關(guān)的數(shù)據(jù)。這就允許在流程中的并發(fā)節(jié)點(diǎn)去訪問(wèn)事件數(shù)據(jù)并基于這些數(shù)據(jù)采取響應(yīng)的動(dòng)作。一個(gè)事件可以有一系列的方式向運(yùn)行中的流程實(shí)例發(fā)出信號(hào):?Internalevent:在流程中的任何動(dòng)作都可以發(fā)內(nèi)部事件的發(fā)生信號(hào)給周圍的相關(guān)實(shí)例,使用以下代碼:kcontext.getProcessInstance().signalEvent(type,eventData);?Externalevent:一個(gè)流程實(shí)例可以被一個(gè)外部事件通告,使用代碼如下:?Externaleventusingeventcorrelation:的eventcorrelation聽(tīng)外部某種類型的節(jié)點(diǎn)的事件節(jié)點(diǎn)的實(shí)例,無(wú)論事件什么時(shí)候發(fā)生,都會(huì)通告給流程實(shí)例,發(fā)送事件信號(hào)給流程引擎,代碼如下:事件也可以用來(lái)啟動(dòng)一個(gè)流程。無(wú)論什么時(shí)候,MessageStartEvent定義了一個(gè)指定類型的事件觸發(fā)器,一個(gè)新的流程實(shí)例將會(huì)在事件類型每次發(fā)送信號(hào)給流程引擎后都會(huì)啟動(dòng)。5.8.5計(jì)時(shí)器計(jì)時(shí)器是在觸發(fā)之前等待提起定義的時(shí)間量,它允許執(zhí)行一次或重復(fù)執(zhí)行。計(jì)時(shí)器能夠被用來(lái)在一個(gè)特定周期之后觸發(fā)特定的邏輯,或者在特定的間隔內(nèi)重復(fù)某些動(dòng)作。計(jì)時(shí)器提供了一個(gè)延遲和一個(gè)周期。在觸發(fā)計(jì)時(shí)器之前,節(jié)點(diǎn)激活之后,延遲指定的等待時(shí)間。周期定義的時(shí)間在并發(fā)觸發(fā)動(dòng)作之間。一個(gè)周期是在0到一小段時(shí)間的時(shí)間間隔。period和delay的表達(dá)格式應(yīng)該是[#d][#h][#m][#s][#[ms]],具體的結(jié)束在前面已經(jīng)翻譯。計(jì)時(shí)器服務(wù)要確保計(jì)時(shí)器在適當(dāng)?shù)臅r(shí)間觸發(fā)。計(jì)時(shí)器也可以被取消,意味著計(jì)時(shí)器將不會(huì)再被觸發(fā)。在流程中計(jì)時(shí)器有兩種使用方式:?可以在流程當(dāng)中添加一個(gè)計(jì)時(shí)器事件。它的動(dòng)作就是在它觸發(fā)時(shí),一次或者重復(fù)的啟動(dòng)計(jì)時(shí)器,它激活計(jì)時(shí)器節(jié)點(diǎn)的繼承者,應(yīng)該是流程的下一步。這就意味著帶有確定時(shí)期的流出鏈接可以被多次觸發(fā)。取消一個(gè)計(jì)時(shí)器節(jié)點(diǎn)也就取消了相關(guān)聯(lián)的計(jì)時(shí)器,之后就不會(huì)再有觸發(fā)發(fā)生了。?計(jì)時(shí)器可以作為一個(gè)邊界事件來(lái)和一個(gè)子流程相關(guān)聯(lián)。當(dāng)前只能通過(guò)XML來(lái)直接的設(shè)置。在新的BPMN2編輯器中將會(huì)添加支持。5.8.6更新流程在經(jīng)過(guò)一段之后,流程可以要優(yōu)化,例如由于流程自身需要改進(jìn),又或者因?yàn)樾枨蟮母淖?。?shí)際上,你不能夠真正的升級(jí)一個(gè)流程,你僅僅能夠配置一個(gè)新版本的流程,舊版本的流程將仍然存在。因?yàn)橐呀?jīng)存在的流程實(shí)例可能仍然需要定義好的流程。所以新的流程應(yīng)該有一個(gè)不同的id升級(jí)了。流程無(wú)論什么時(shí)候被更新,確定在運(yùn)行中的流程實(shí)例已經(jīng)發(fā)生了什么是非常重要的。有各種策略用來(lái)考慮每一個(gè)運(yùn)行中的實(shí)例:·Proceed:運(yùn)行中的流出實(shí)例會(huì)按照平常一樣繼續(xù)下去,followingtheprocess(definition)asitwasdefinedwhentheprocessinstancewasstarted已經(jīng)運(yùn)行的流程實(shí)例的過(guò)程將不會(huì)給更新。而新的實(shí)例將會(huì)使用更新后的流程來(lái)啟動(dòng)。·Abort(andrestart定義的流程來(lái)重新啟動(dòng)。·Transfer:流程實(shí)例將會(huì)被移植到新定義的流程,這意味著一旦移植成功,流程實(shí)例將會(huì)基于更新的流程邏輯來(lái)繼續(xù)執(zhí)行。jBPMapproach多個(gè)版本能夠被延遲,但是存在的流程實(shí)例將會(huì)基于舊的定義好的流程來(lái)繼續(xù)執(zhí)行,在一個(gè)新的流程啟動(dòng)的時(shí)候。當(dāng)然,使用流程管理API也能夠中止運(yùn)行中的流程實(shí)例。流程實(shí)例的移植是非常困難的,下面的章節(jié)將會(huì)做出解釋。流程實(shí)例的移植一個(gè)流程實(shí)例包含所有的運(yùn)行時(shí)信息,流程實(shí)例需要及時(shí)的在之后的一些點(diǎn)繼續(xù)執(zhí)行。這包括所有連接這個(gè)流程實(shí)例的數(shù)據(jù),但是當(dāng)然也有流程表中的當(dāng)前狀態(tài)。對(duì)于當(dāng)前活動(dòng)的每一個(gè)節(jié)點(diǎn),都是通過(guò)節(jié)點(diǎn)實(shí)例來(lái)代表的。節(jié)點(diǎn)實(shí)例也包含連接到僅僅指定節(jié)點(diǎn)的執(zhí)行的額外狀態(tài)。對(duì)于不同的節(jié)點(diǎn)類型有不同的節(jié)點(diǎn)實(shí)例類型。一個(gè)流程實(shí)例僅僅包含運(yùn)行時(shí)狀態(tài),并被鏈接到代表流程邏輯的指定流程,當(dāng)執(zhí)行一個(gè)流程實(shí)例的時(shí)候,流程邏輯需要被跟蹤。這樣,更新一個(gè)流程實(shí)例到新版本就是使用新id到新的流程id的索引。無(wú)論如何,這不用考慮需要被移植的流程實(shí)例的狀態(tài)。這種情況下流程僅僅被擴(kuò)展,所有存在的等待狀態(tài)被保存。這樣就非常的直白了,流程實(shí)例的運(yùn)行狀態(tài)不需要去改變。當(dāng)一個(gè)存在的等待狀態(tài)被移除或分成多個(gè)等待狀態(tài),一個(gè)存在的流程實(shí)例的等待狀態(tài)不能夠被簡(jiǎn)單的更新?;蛘弋?dāng)一個(gè)新的流程變量被引進(jìn)的時(shí)候,這個(gè)變量需要正確的實(shí)例化,以至于它能夠在更新的流程的其他部分使用。WorkflowProcessInstanceUpgrader能夠被用來(lái)升級(jí)一個(gè)工作流程實(shí)例到一個(gè)新版本的idjBPM會(huì)自動(dòng)的映射舊的節(jié)點(diǎn)id到新的節(jié)點(diǎn)id。具體還是看例子吧?。〈_保首先斷開(kāi)與流程實(shí)例的連接,因此改變狀態(tài)并重新連接流程實(shí)例,和WorkflowProcessinstanceUpgrader的做法是相似的。第六章BPMN2.0核心引擎6.1BusinessProcessModelandNotation(BPMN2.0Specification業(yè)務(wù)流程建模和符號(hào)2.0規(guī)范BPMN的最初目標(biāo)就是提供一個(gè)能夠被所有業(yè)務(wù)用戶容易理解的符號(hào),它來(lái)自于流B繪畫;最終,對(duì)于業(yè)務(wù)人員能夠管理并監(jiān)視這些流程。OpenMediaFrameworkInterchange開(kāi)發(fā)式媒體框架交換,不知道應(yīng)該是哪一個(gè)?。。。┮?guī)范,而且現(xiàn)在還包括對(duì)于元素定義語(yǔ)法的擴(kuò)展,和一個(gè)XML格式怎樣去存儲(chǔ)一個(gè)流程定義。jBPM5允許你運(yùn)行用BPMN2.0XML的jBPM5的工具區(qū)建模,執(zhí)行,管理和監(jiān)視你的業(yè)務(wù)流程,而這個(gè)要執(zhí)行的業(yè)務(wù)流程是使用BPMN2.0格式說(shuō)明的。實(shí)際上,完整的BPMN2.0規(guī)范也包括怎樣去描繪一件事情的細(xì)節(jié),例如編排和協(xié)助。jBPM項(xiàng)目仍然是用來(lái)說(shuō)明執(zhí)行流程規(guī)范的一部分。在BPMN線連接。BPMN2.0中定義了三種主要的節(jié)點(diǎn)類型:·Events:事件是用來(lái)建模特定事件的發(fā)生。有startevent,endev
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度虛擬現(xiàn)實(shí)(VR)技術(shù)產(chǎn)品研發(fā)與銷售正規(guī)購(gòu)銷合同3篇
- 二零二五年度建筑工程施工班組中途退場(chǎng)合同終止協(xié)議3篇
- 中藥提取設(shè)備項(xiàng)目可行性研究報(bào)告申請(qǐng)立項(xiàng)
- 二零二五年度變頻器產(chǎn)業(yè)鏈上下游合作框架協(xié)議
- 廣西來(lái)賓市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版綜合練習(xí)(上學(xué)期)試卷及答案
- 二零二五年度家庭裝修門窗安裝服務(wù)合同范本6篇
- 2025年度創(chuàng)新園區(qū)辦公樓租賃協(xié)議書3篇
- 2025版軟件許可及服務(wù)合同詳細(xì)條款和條件3篇
- 二零二五年度化妝品OEM委托生產(chǎn)及研發(fā)合同范本12篇
- 智研咨詢發(fā)布:中國(guó)導(dǎo)電塑料行業(yè)現(xiàn)狀分析、市場(chǎng)運(yùn)行態(tài)勢(shì)及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 應(yīng)收帳款管理辦法
- 水利水電工程驗(yàn)收實(shí)施細(xì)則模版(3篇)
- 四川雅安文化旅游集團(tuán)有限責(zé)任公司招聘筆試沖刺題2024
- 中南大學(xué)《大學(xué)物理C(3)(一)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024新人教版英語(yǔ)七年級(jí)上單詞默寫表(小學(xué)部分)
- 電力拖動(dòng)教學(xué)講義
- 2024-2025學(xué)年 語(yǔ)文二年級(jí)上冊(cè) 部編版期末測(cè)試卷 (含答案)
- 2024社保費(fèi)測(cè)試(五)專項(xiàng)試卷
- 招商會(huì)會(huì)議流程綱要
- 安全生產(chǎn)工作年終總結(jié)
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
評(píng)論
0/150
提交評(píng)論