管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南_第1頁
管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南_第2頁
管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南_第3頁
管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南_第4頁
管理信息化BPM業(yè)務(wù)流程JBPM5用戶指南_第5頁
已閱讀5頁,還剩92頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論