淺析JBPM源碼

上傳人:ca****in 文檔編號(hào):61333821 上傳時(shí)間:2022-03-11 格式:DOCX 頁(yè)數(shù):10 大?。?9.20KB
收藏 版權(quán)申訴 舉報(bào) 下載
淺析JBPM源碼_第1頁(yè)
第1頁(yè) / 共10頁(yè)
淺析JBPM源碼_第2頁(yè)
第2頁(yè) / 共10頁(yè)
淺析JBPM源碼_第3頁(yè)
第3頁(yè) / 共10頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《淺析JBPM源碼》由會(huì)員分享,可在線閱讀,更多相關(guān)《淺析JBPM源碼(10頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、n更多企業(yè)學(xué)院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學(xué)院46套講座+6020份資料國(guó)學(xué)智慧、易經(jīng)46套講座人力資源學(xué)院56套講座+27123份資料各階段員工培訓(xùn)學(xué)院77套講座+ 324份資料員工管理企業(yè)學(xué)院67套講座+ 8720份資料工廠生產(chǎn)管理學(xué)院52套講座+ 13920份資料財(cái)務(wù)管理學(xué)院53套講座+ 17945份資料銷售經(jīng)理學(xué)院56套講座+ 14350份資料銷售人員培訓(xùn)學(xué)院72套講座+ 4879份資料n更多企業(yè)學(xué)院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學(xué)院46

2、套講座+6020份資料國(guó)學(xué)智慧、易經(jīng)46套講座人力資源學(xué)院56套講座+27123份資料各階段員工培訓(xùn)學(xué)院77套講座+ 324份資料員工管理企業(yè)學(xué)院67套講座+ 8720份資料工廠生產(chǎn)管理學(xué)院52套講座+ 13920份資料財(cái)務(wù)管理學(xué)院53套講座+ 17945份資料銷售經(jīng)理學(xué)院56套講座+ 14350份資料銷售人員培訓(xùn)學(xué)院72套講座+ 4879份資料n更多企業(yè)學(xué)院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學(xué)院46套講座+6020份資料國(guó)學(xué)智慧、易經(jīng)46套講座人力資源學(xué)院56套講座+27123份資料各階段員工培訓(xùn)學(xué)院77套講座+ 324份

3、資料員工管理企業(yè)學(xué)院67套講座+ 8720份資料工廠生產(chǎn)管理學(xué)院52套講座+ 13920份資料財(cái)務(wù)管理學(xué)院53套講座+ 17945份資料銷售經(jīng)理學(xué)院56套講座+ 14350份資料銷售人員培訓(xùn)學(xué)院72套講座+ 4879份資料關(guān)鍵字: jbpm workflow 工作流 離職啦,工作交接中,記錄一下。 就如同了解Servlet規(guī)范、Servlet容器設(shè)計(jì)和實(shí)現(xiàn)一樣,學(xué)會(huì)一種workflow的建模、引擎設(shè)計(jì)和實(shí)現(xiàn)也是必備的。工作流這東西是業(yè)務(wù)系統(tǒng)的一個(gè)核心模塊,現(xiàn)在的大多數(shù)企業(yè)業(yè)務(wù)系統(tǒng)大多數(shù)是業(yè)務(wù)驅(qū)動(dòng)的,如新聞行業(yè)采編發(fā)、制造業(yè)的采供銷、金融保險(xiǎn)的審批等,協(xié)同OA就不用說(shuō)了。BPM、ESB、SOA現(xiàn)

4、在很火??! 下面的總結(jié)肯定欠成熟,70%合理就不錯(cuò)啦,看到這篇blog的朋友,一定要批判接受哦。 當(dāng)前我指的JBPM是3.2版本,因?yàn)閺腏BPM2.0到3.0,其API從package到class都完全重新設(shè)計(jì)了,以及其背后的建模思想和架構(gòu)。在2.0版本里,是按照Spring+Hibernate那種Transaction Script方式組織的,OO的概念比較弱,里面是大量的interface、impl、service。而3.0版本,完全按Domain Model方式組織,Hibernate透明持久化,它是我見(jiàn)到的O/R Mapping最優(yōu)雅的應(yīng)用。 在當(dāng)前的3.2版本里,其整體架構(gòu)可以這么去

5、理解:領(lǐng)域?qū)ο螅鏟rocessDefinition、ProcessInstance、Node、Token、Transition等,都是Rich Model,里面的方法主要是處理業(yè)務(wù),以及建立領(lǐng)域?qū)ο笾g的關(guān)聯(lián),持久化則完全放在XXXSession中,如TaskMgmtSession,GraphSession等,也可以認(rèn)為這些XXXSession是DAO,負(fù)責(zé)處理持久化。另外,org.jbpm.persistence.db.DbPersistenceService這些類相當(dāng)于最底層的數(shù)據(jù)庫(kù)Helper類??傊?,JBPM的技術(shù)架構(gòu)非常清晰易懂,也是非常典型的Domain Driven Desig

6、n,在這種架構(gòu)中,分層的概念被弱化了。 上面是從架構(gòu)的角度看待JBPM設(shè)計(jì),其引擎設(shè)計(jì)和實(shí)現(xiàn),則隱藏在架構(gòu)下。了解其引擎設(shè)計(jì)思想,我的建議是,先仔細(xì)讀讀JBPM的User Guide第四章Graph Oriented Programming,專門探討流程建模的理論,里面附帶了一個(gè)微型的JBPM實(shí)現(xiàn),幾乎包括流程建模的絕大部分,如順序流、并行、分支等: ,我建議研讀JBPM源碼前,先把這個(gè)理解透,JBPM的流程引擎核心代碼和它非常相似,包括類名,只是擴(kuò)展了一些。 我用代碼統(tǒng)計(jì)工具統(tǒng)計(jì)了一下,JBPM源碼總共4w多行,除去注釋和空行,約2萬(wàn)6千行。需要我們hack的核心、比較難、代碼多的類約40個(gè)

7、(共400多),反正它花了我整四天的時(shí)間,現(xiàn)在基本都弄清楚了。我主要是通過(guò)一個(gè)請(qǐng)假流程的部署、創(chuàng)建、任務(wù)執(zhí)行來(lái)動(dòng)態(tài)debug、靜態(tài)查看的。JBPM源碼中最難讀懂的那部分是引擎調(diào)度,也就是org.jbpm.graph相關(guān)的幾個(gè)包,最重要的是GraphElement和其子類Transition等、Node及其子類Fork等、ExecuteContext和Token。而引擎調(diào)度這部分, JBPM附帶了一個(gè)微型JBPM實(shí)現(xiàn),我在前面介紹過(guò)。除了引擎調(diào)度,其它相關(guān)源碼就非常簡(jiǎn)單了。 在JBPM中,有很多API是供JBPM自身調(diào)用的,如流程定義文件中支持的Expression語(yǔ)言,腳本等(org.jbpm

8、.jpdl.el.impl),我們不用理會(huì)。 我們主要和下面三類API打交道: JBPM環(huán)境的配置、service的管理、流程的部署和卸載:它主要體現(xiàn)在org.jbpm中,另外輔助包有org.jbpm.jpdl.xml、org.jbpm.configuration。 org.jbpm.configuration負(fù)責(zé)services對(duì)象的創(chuàng)建,相當(dāng)于一個(gè)微型的IoC容器、對(duì)象工廠,負(fù)責(zé)services的生命周期管理,如加載、創(chuàng)建、調(diào)用和銷毀,像Job調(diào)度服務(wù)、數(shù)據(jù)庫(kù)持久化服務(wù)、異步消息服務(wù)等。需要說(shuō)明的是,由于其package下的ObjectFactoryImpl也是一個(gè)IoC容器,和Sprin

9、g的IoC容器是有相同的職責(zé):對(duì)象的管理。所以在這種松耦合架構(gòu)下,可以將JBPM和Spring集成,如業(yè)務(wù)系統(tǒng)和JBPM引擎的事務(wù)處理、對(duì)象管理、配置管理等。請(qǐng)參考Spring-Module開(kāi)源項(xiàng)目。 org.jbpm.jpdl.xml負(fù)責(zé)流程定義文件的解析,譬如XML文件的解析,相關(guān)領(lǐng)域?qū)ο蟮膶?shí)例化。通過(guò)hack其源碼和原理,我們可以在業(yè)務(wù)系統(tǒng)中自定義流程,讓用戶可以自己定義、變更流程。 JBPM中領(lǐng)域?qū)ο螅喝鏝ode、Token、ProcessInstance、TaskInstance等,它們有三個(gè)職責(zé),一個(gè)是保持從DB中加載流程和任務(wù)相關(guān)的數(shù)據(jù)或?qū)?shù)據(jù)持久化到DB。第二,為各領(lǐng)域?qū)ο蠼?/p>

10、關(guān)聯(lián),方便實(shí)現(xiàn)透明持久化(復(fù)雜的領(lǐng)域關(guān)聯(lián)在Hibernate的mapping文件里配置)。第三,就是處理業(yè)務(wù)規(guī)則,如引擎調(diào)度算法,但不負(fù)責(zé)持久化。 JBPM中持久化領(lǐng)域?qū)ο蟮腗anager,DAO:如TaskMgmtSession。它們主要是持久化領(lǐng)域?qū)ο螅鐂ession.save(ProcessInstance);或是執(zhí)行查詢,如根據(jù)流程ID查詢?cè)摿鞒虒?shí)例,查詢操作都是配置在hibernate mapping中的hql語(yǔ)句,如hibernate.queries.hbm.xml。但可能并不能滿足我們的要求,譬如按時(shí)間段查詢當(dāng)前的流程實(shí)例,任務(wù)的分頁(yè)查詢,這樣,就需要我們自己擴(kuò)展這些DAO類。

11、由于它們查詢是只讀操作,所以很容易,而且擴(kuò)展幾乎是必然了,因?yàn)橐前碕BPM默認(rèn)的,把所有的Result查詢出來(lái),再過(guò)濾,性能是個(gè)很大的問(wèn)題,我們應(yīng)該按需查詢。 - 下面按功能分類說(shuō)明一下: JBPM流程的部署和卸載 JBPM流程的部署和卸載,無(wú)論是通過(guò)管理控制臺(tái)還是自定義部署,最終都是通過(guò)JbpmContext的 deployProcessDefinition(ProcessDefinition)部署,而ProcessDefintion實(shí)例的創(chuàng)建,是通過(guò)調(diào)用ProcessDefinition的相關(guān)方法,如parseXmlResource (String xml)。 ProcessDefint

12、ion實(shí)例的創(chuàng)建,有多種輸入源,譬如XML字符串、XML文件、zip包,還有最抽象的Reader、InputStream。如果在用戶的業(yè)務(wù)系統(tǒng)里面自定義發(fā)布業(yè)務(wù)流程,也最終是調(diào)用ProcessDefinition相關(guān)方法。但流程定義解析,最核心的只有一個(gè)類:org.jbpm.jpdl.xml包下的JpdlXmlReader, org.jbpm.JbpmContext:該類可以理解為Faade模式的實(shí)現(xiàn),與流程相關(guān)的manager類可以通過(guò)它取得,如getGraphSession()、getServices(),它是獲取其它服務(wù)的快捷方式,也算是一個(gè)delegate類。如果大家對(duì)Context的

13、概念比較敏感,其類職責(zé)就很好理解,在Servlet容器里面也有ServletContext的概念,和它意思差不多。對(duì)一般的系統(tǒng)軟件一般來(lái)說(shuō),Context往往建模成Container的上下文。在JBPM中,它還負(fù)責(zé)流程部署、加載、卸載。 JBPM的任務(wù)管理 JBPM和任務(wù)管理相關(guān)的類主要是org.jbpm.taskmgmt.def和org.jbpm.taskmgmt.exe,像任務(wù)創(chuàng)建、分配等。 和任務(wù)相關(guān)的最重要的有兩個(gè)方面,一個(gè)是任務(wù)分配,另一個(gè)是和任務(wù)相關(guān)的表單。當(dāng)然,任務(wù)查詢和任務(wù)日志也很重要。 任務(wù)分配:解決的是將任務(wù)分配給誰(shuí),它有靜態(tài)分配和動(dòng)態(tài)分配兩種,前者是在流程定義文件里部署,

14、后者是通過(guò)代碼動(dòng)態(tài)指定。它涉及到的概念有Actor,PooledActor,Swimlane,AssignmentHandler。在做demo時(shí),譬如JBPM官方自帶的例子webSale里,就是通過(guò)Expression靜態(tài)部署任務(wù)角色的,如user(leo),group(orderManager),但它用到了JBPM的第三方組件Identity,其實(shí)通過(guò)Expression靜態(tài)分配角色,本質(zhì)上也是通過(guò)AssignmentHandler實(shí)現(xiàn)的,如ExpressionAssignmentHandler。 任務(wù)分配,一般比較靈活的方案是在流程的Swimlane里面部署自定義action,然后重用sw

15、imlane。另外一種方案是,在每個(gè)task里面部署AssignmentHandler實(shí)現(xiàn)類。 任務(wù)相關(guān)表單:主要是org.jbpm.taskmgmt.def.TaskController,它是task scope下的表單字段,類似Servlet里面的HttpServletRequest的setAttribute()。如果是process scope下的表單項(xiàng),是org.jbpm.context.exe.ContextInstance,類似于Servlet里面的HttpSession的setAttribute()。 附帶說(shuō)一下任務(wù)查詢,所有有關(guān)查詢和持久化的操作,都集中在包org.jbpm.d

16、b中,如任務(wù)相關(guān)的TaskMgmtSession,要是這些find方法不滿足業(yè)務(wù)要求,建議自己擴(kuò)展。 JBPM的流程日志 JBPM的流程日志,主要是記錄一些事件(Event),如流程創(chuàng)建、任務(wù)分配,它們?cè)贕raphElement的fireEvent時(shí),譬如在Node.leave()(Token離開(kāi)當(dāng)前節(jié)點(diǎn)時(shí))觸發(fā)fireEvent事件(在該事件方法里執(zhí)行自定義Action),同時(shí)記錄日志。我們關(guān)心的日志主要有process、task、transition、signal四類,每個(gè)下面還有事件細(xì)分,如task創(chuàng)建和分配。通過(guò)日志,我們統(tǒng)計(jì)流程執(zhí)行效率,也可以得到詳細(xì)的流程步驟日志。 日志的查詢,請(qǐng)

17、參考LoggingSession及其相關(guān)類。順便說(shuō)一下,所有的日志類都繼承于ProcessLog,約20來(lái)個(gè)。JBPM已經(jīng)聲明的日志查詢方法,可能并不能滿足我們的要求,自行擴(kuò)展吧。 其它API JBPM API里有org.jbpm.web、org.jbpm.security等,前者負(fù)責(zé)在web容器啟動(dòng)時(shí)加載JBPM引擎,將當(dāng)前Session的用戶設(shè)置為任務(wù)的Actor等,后者負(fù)責(zé)安全相關(guān)的認(rèn)證和授權(quán)。源碼很簡(jiǎn)單,不多說(shuō)了。我建議實(shí)現(xiàn)類似業(yè)務(wù)需求時(shí),不妨參考其實(shí)現(xiàn),但拿來(lái)用就會(huì)發(fā)現(xiàn)它太簡(jiǎn)陋了。 研究jBPM已有一段時(shí)間了,今天終于決定拿點(diǎn)東西出來(lái),但請(qǐng)大家原諒不能分享源碼。之所以拿出來(lái),希望通過(guò)

18、交流認(rèn)識(shí)到更多技術(shù)一線的同志們,結(jié)點(diǎn)人緣。本人不才只念完了高中,求職路屢戰(zhàn)屢敗,只好踏實(shí)地弄點(diǎn)東西出來(lái)?yè)蜗麻T面,希望有所幫助,找到一份滿意的工作。 大多研究JBPM的,對(duì)其引擎的擴(kuò)展開(kāi)發(fā)都不曾苦惱,但提及其可視化設(shè)計(jì)工具都希望能有一款WEB版設(shè)計(jì)器。 苦惱過(guò)后,便有了開(kāi)發(fā)設(shè)計(jì)器的沖動(dòng)。首先通過(guò)網(wǎng)上找到的WEB流程設(shè)計(jì)工具,多半是非流程研究人員的產(chǎn)品,拿來(lái)用要經(jīng)過(guò)大量的修改,不太可取,也不容易修改,參考倒是有些價(jià)值,在此謝過(guò);另外由于剛學(xué)會(huì)了JavaScript在頁(yè)面實(shí)現(xiàn)的拖曳功能。鑒于此便開(kāi)始了行動(dòng),現(xiàn)在想想還有些大膽。由于一直沒(méi)抽出時(shí)間來(lái),拖了兩個(gè)多月,終于寫下了這篇文章。 基于javaSc

19、ript+css+vml的jBPM webdesigner,由于使用了vml只支持IE瀏覽器(IE5+),其中沒(méi)有使用任何javaScript開(kāi)發(fā)框架,但模仿了框架的css界面風(fēng)格。開(kāi)發(fā)過(guò)程中參考了、等javaScript開(kāi)發(fā)框架;參考了jBPM designer eclipse 插件;參考了shine Workflow Designer截圖、以及圈子中貼出來(lái)的截圖(當(dāng)時(shí)還回帖希望這位大哥分享源碼,結(jié)果失望,也就狠下心來(lái)獨(dú)干,造自己的輪子);還參考了webflow、XiorkFlow、(applet)等,XiorkFlow是早期看過(guò)的流程設(shè)計(jì)工具。在此謝過(guò)以上提供的參考。 以下以貼圖方式介紹j

20、BPM3 webdesigner。1、流程設(shè)計(jì)器主界面,采用純JS且面向?qū)ο蟮木幊谭绞剑ㄊ录幚頇C(jī)制swing、extjs思想中毒很深)開(kāi)發(fā),動(dòng)態(tài)生成div等HTML代碼,利用外部樣式表以實(shí)現(xiàn)多風(fēng)格支持,根據(jù)窗口大小自適應(yīng)寬高,以使編輯區(qū)域最大可視化,仿jBPM designer eclipse 插件布局與操作習(xí)慣(其中個(gè)人覺(jué)得屬性輸入要比eclipse 插件方便些),仿框架的css界面風(fēng)格。主界面分為三部分,工具欄、編輯區(qū)、屬性欄,支持鼠標(biāo)拖動(dòng)設(shè)定大小及最大化、最小化、還原功能。編輯區(qū)支持網(wǎng)格顯示。目前設(shè)計(jì)器支持開(kāi)始、結(jié)束、分支、合并、決策、任務(wù)、郵件7種節(jié)點(diǎn)(可以容易擴(kuò)展新節(jié)點(diǎn))并可以通過(guò)

21、鼠標(biāo)拖曳操作編輯大小,流程轉(zhuǎn)換可以通過(guò)鼠標(biāo)操作支持直線及折線。節(jié)點(diǎn)的連接操作進(jìn)行驗(yàn)證,如只允許拖入一個(gè)開(kāi)始節(jié)點(diǎn);開(kāi)始節(jié)點(diǎn)只允許單個(gè)from連接;結(jié)束節(jié)點(diǎn)只允許to連接,但支持多個(gè)連接;兩個(gè)節(jié)點(diǎn)只能有唯一的同向連接等等。點(diǎn)擊編輯區(qū)的空白處在屬性欄顯示流程定義的屬性配置,點(diǎn)擊節(jié)點(diǎn)則在屬性欄顯示節(jié)點(diǎn)的屬性配置,點(diǎn)擊流程轉(zhuǎn)換或其label同樣在屬性欄顯示其屬性配置。在屬性欄輸入配置信息將自動(dòng)保存并響應(yīng)到圖形展示上(如輸入節(jié)點(diǎn)名稱,則編輯區(qū)中節(jié)點(diǎn)顯示的文字相應(yīng)地改變)。整個(gè)設(shè)計(jì)器工作過(guò)程相當(dāng)流暢。所有的配置信息將生成符合JPDL規(guī)范的XML流程定義文件。由于最終的產(chǎn)物是XML字符串,這賦予了流程設(shè)計(jì)器不僅僅能夠定義出符合jBPM3的定義文件,稍做修改同樣能定義出符合jPBM4,以及其它任何的基本XML的定義文件。2、圖形編輯,節(jié)點(diǎn)及流程轉(zhuǎn)換,利用vml標(biāo)簽獲得良好的視覺(jué)效果(考慮兼容其它瀏覽器,可以開(kāi)發(fā)基于svg、canvas或純js的圖形模型)。 網(wǎng)格節(jié)點(diǎn)選中(節(jié)點(diǎn)選中后,可以通過(guò)鼠標(biāo)按下拖動(dòng)節(jié)點(diǎn),改節(jié)點(diǎn)顯示位置,也可以通過(guò)鍵w、a、s、d或up、left、dowm、rigth來(lái)移動(dòng)節(jié)點(diǎn),選中的節(jié)點(diǎn)能夠通過(guò)delete鍵進(jìn)行刪除,連同其所有的form及to轉(zhuǎn)換將一起被刪除。當(dāng)兩個(gè)節(jié)點(diǎn)重疊時(shí),選中節(jié)點(diǎn)始終顯示于最上面)

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!