歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

淺析JBPM源碼

  • 資源ID:61333821       資源大?。?span id="5wh5u5s" class="font-tahoma">19.20KB        全文頁數(shù):10頁
  • 資源格式: DOCX        下載積分:0積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要0積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付說明:
本站最低充值0.01積分,下載本資源后余額將會存入您的賬戶,您可在我的個人中心查看。
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

淺析JBPM源碼

n更多企業(yè)學院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學院46套講座+6020份資料 國學智慧、易經(jīng)46套講座人力資源學院56套講座+27123份資料各階段員工培訓學院77套講座+ 324份資料員工管理企業(yè)學院67套講座+ 8720份資料工廠生產(chǎn)管理學院52套講座+ 13920份資料財務管理學院53套講座+ 17945份資料 銷售經(jīng)理學院56套講座+ 14350份資料銷售人員培訓學院72套講座+ 4879份資料n更多企業(yè)學院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學院46套講座+6020份資料 國學智慧、易經(jīng)46套講座人力資源學院56套講座+27123份資料各階段員工培訓學院77套講座+ 324份資料員工管理企業(yè)學院67套講座+ 8720份資料工廠生產(chǎn)管理學院52套講座+ 13920份資料財務管理學院53套講座+ 17945份資料 銷售經(jīng)理學院56套講座+ 14350份資料銷售人員培訓學院72套講座+ 4879份資料n更多企業(yè)學院: 中小企業(yè)管理全能版183套講座+89700份資料總經(jīng)理、高層管理49套講座+16388份資料中層管理學院46套講座+6020份資料 國學智慧、易經(jīng)46套講座人力資源學院56套講座+27123份資料各階段員工培訓學院77套講座+ 324份資料員工管理企業(yè)學院67套講座+ 8720份資料工廠生產(chǎn)管理學院52套講座+ 13920份資料財務管理學院53套講座+ 17945份資料 銷售經(jīng)理學院56套講座+ 14350份資料銷售人員培訓學院72套講座+ 4879份資料關鍵字: jbpm workflow 工作流 離職啦,工作交接中,記錄一下。 就如同了解Servlet規(guī)范、Servlet容器設計和實現(xiàn)一樣,學會一種workflow的建模、引擎設計和實現(xiàn)也是必備的。工作流這東西是業(yè)務系統(tǒng)的一個核心模塊,現(xiàn)在的大多數(shù)企業(yè)業(yè)務系統(tǒng)大多數(shù)是業(yè)務驅(qū)動的,如新聞行業(yè)采編發(fā)、制造業(yè)的采供銷、金融保險的審批等,協(xié)同OA就不用說了。BPM、ESB、SOA現(xiàn)在很火??! 下面的總結肯定欠成熟,70%合理就不錯啦,看到這篇blog的朋友,一定要批判接受哦。 當前我指的JBPM是3.2版本,因為從JBPM2.0到3.0,其API從package到class都完全重新設計了,以及其背后的建模思想和架構。在2.0版本里,是按照Spring+Hibernate那種Transaction Script方式組織的,OO的概念比較弱,里面是大量的interface、impl、service。而3.0版本,完全按Domain Model方式組織,Hibernate透明持久化,它是我見到的O/R Mapping最優(yōu)雅的應用。 在當前的3.2版本里,其整體架構可以這么去理解:領域?qū)ο螅鏟rocessDefinition、ProcessInstance、Node、Token、Transition等,都是Rich Model,里面的方法主要是處理業(yè)務,以及建立領域?qū)ο笾g的關聯(lián),持久化則完全放在XXXSession中,如TaskMgmtSession,GraphSession等,也可以認為這些XXXSession是DAO,負責處理持久化。另外,org.jbpm.persistence.db.DbPersistenceService這些類相當于最底層的數(shù)據(jù)庫Helper類。總之,JBPM的技術架構非常清晰易懂,也是非常典型的Domain Driven Design,在這種架構中,分層的概念被弱化了。 上面是從架構的角度看待JBPM設計,其引擎設計和實現(xiàn),則隱藏在架構下。了解其引擎設計思想,我的建議是,先仔細讀讀JBPM的User Guide第四章Graph Oriented Programming,專門探討流程建模的理論,里面附帶了一個微型的JBPM實現(xiàn),幾乎包括流程建模的絕大部分,如順序流、并行、分支等: ,我建議研讀JBPM源碼前,先把這個理解透,JBPM的流程引擎核心代碼和它非常相似,包括類名,只是擴展了一些。 我用代碼統(tǒng)計工具統(tǒng)計了一下,JBPM源碼總共4w多行,除去注釋和空行,約2萬6千行。需要我們hack的核心、比較難、代碼多的類約40個(共400多),反正它花了我整四天的時間,現(xiàn)在基本都弄清楚了。我主要是通過一個請假流程的部署、創(chuàng)建、任務執(zhí)行來動態(tài)debug、靜態(tài)查看的。JBPM源碼中最難讀懂的那部分是引擎調(diào)度,也就是org.jbpm.graph相關的幾個包,最重要的是GraphElement和其子類Transition等、Node及其子類Fork等、ExecuteContext和Token。而引擎調(diào)度這部分, JBPM附帶了一個微型JBPM實現(xiàn),我在前面介紹過。除了引擎調(diào)度,其它相關源碼就非常簡單了。 在JBPM中,有很多API是供JBPM自身調(diào)用的,如流程定義文件中支持的Expression語言,腳本等(org.jbpm.jpdl.el.impl),我們不用理會。 我們主要和下面三類API打交道: JBPM環(huán)境的配置、service的管理、流程的部署和卸載:它主要體現(xiàn)在org.jbpm中,另外輔助包有org.jbpm.jpdl.xml、org.jbpm.configuration。 org.jbpm.configuration負責services對象的創(chuàng)建,相當于一個微型的IoC容器、對象工廠,負責services的生命周期管理,如加載、創(chuàng)建、調(diào)用和銷毀,像Job調(diào)度服務、數(shù)據(jù)庫持久化服務、異步消息服務等。需要說明的是,由于其package下的ObjectFactoryImpl也是一個IoC容器,和Spring的IoC容器是有相同的職責:對象的管理。所以在這種松耦合架構下,可以將JBPM和Spring集成,如業(yè)務系統(tǒng)和JBPM引擎的事務處理、對象管理、配置管理等。請參考Spring-Module開源項目。 org.jbpm.jpdl.xml負責流程定義文件的解析,譬如XML文件的解析,相關領域?qū)ο蟮膶嵗?。通過hack其源碼和原理,我們可以在業(yè)務系統(tǒng)中自定義流程,讓用戶可以自己定義、變更流程。 JBPM中領域?qū)ο螅喝鏝ode、Token、ProcessInstance、TaskInstance等,它們有三個職責,一個是保持從DB中加載流程和任務相關的數(shù)據(jù)或?qū)?shù)據(jù)持久化到DB。第二,為各領域?qū)ο蠼㈥P聯(lián),方便實現(xiàn)透明持久化(復雜的領域關聯(lián)在Hibernate的mapping文件里配置)。第三,就是處理業(yè)務規(guī)則,如引擎調(diào)度算法,但不負責持久化。 JBPM中持久化領域?qū)ο蟮腗anager,DAO:如TaskMgmtSession。它們主要是持久化領域?qū)ο螅鐂ession.save(ProcessInstance);或是執(zhí)行查詢,如根據(jù)流程ID查詢該流程實例,查詢操作都是配置在hibernate mapping中的hql語句,如hibernate.queries.hbm.xml。但可能并不能滿足我們的要求,譬如按時間段查詢當前的流程實例,任務的分頁查詢,這樣,就需要我們自己擴展這些DAO類。由于它們查詢是只讀操作,所以很容易,而且擴展幾乎是必然了,因為要是按JBPM默認的,把所有的Result查詢出來,再過濾,性能是個很大的問題,我們應該按需查詢。 - 下面按功能分類說明一下: JBPM流程的部署和卸載 JBPM流程的部署和卸載,無論是通過管理控制臺還是自定義部署,最終都是通過JbpmContext的 deployProcessDefinition(ProcessDefinition)部署,而ProcessDefintion實例的創(chuàng)建,是通過調(diào)用ProcessDefinition的相關方法,如parseXmlResource (String xml)。 ProcessDefintion實例的創(chuàng)建,有多種輸入源,譬如XML字符串、XML文件、zip包,還有最抽象的Reader、InputStream。如果在用戶的業(yè)務系統(tǒng)里面自定義發(fā)布業(yè)務流程,也最終是調(diào)用ProcessDefinition相關方法。但流程定義解析,最核心的只有一個類:org.jbpm.jpdl.xml包下的JpdlXmlReader, org.jbpm.JbpmContext:該類可以理解為Façade模式的實現(xiàn),與流程相關的manager類可以通過它取得,如getGraphSession()、getServices(),它是獲取其它服務的快捷方式,也算是一個delegate類。如果大家對Context的概念比較敏感,其類職責就很好理解,在Servlet容器里面也有ServletContext的概念,和它意思差不多。對一般的系統(tǒng)軟件一般來說,Context往往建模成Container的上下文。在JBPM中,它還負責流程部署、加載、卸載。 JBPM的任務管理 JBPM和任務管理相關的類主要是org.jbpm.taskmgmt.def和org.jbpm.taskmgmt.exe,像任務創(chuàng)建、分配等。 和任務相關的最重要的有兩個方面,一個是任務分配,另一個是和任務相關的表單。當然,任務查詢和任務日志也很重要。 任務分配:解決的是將任務分配給誰,它有靜態(tài)分配和動態(tài)分配兩種,前者是在流程定義文件里部署,后者是通過代碼動態(tài)指定。它涉及到的概念有Actor,PooledActor,Swimlane,AssignmentHandler。在做demo時,譬如JBPM官方自帶的例子webSale里,就是通過Expression靜態(tài)部署任務角色的,如user(leo),group(orderManager),但它用到了JBPM的第三方組件Identity,其實通過Expression靜態(tài)分配角色,本質(zhì)上也是通過AssignmentHandler實現(xiàn)的,如ExpressionAssignmentHandler。 任務分配,一般比較靈活的方案是在流程的Swimlane里面部署自定義action,然后重用swimlane。另外一種方案是,在每個task里面部署AssignmentHandler實現(xiàn)類。 任務相關表單:主要是org.jbpm.taskmgmt.def.TaskController,它是task scope下的表單字段,類似Servlet里面的HttpServletRequest的setAttribute()。如果是process scope下的表單項,是org.jbpm.context.exe.ContextInstance,類似于Servlet里面的HttpSession的setAttribute()。 附帶說一下任務查詢,所有有關查詢和持久化的操作,都集中在包org.jbpm.db中,如任務相關的TaskMgmtSession,要是這些find方法不滿足業(yè)務要求,建議自己擴展。 JBPM的流程日志 JBPM的流程日志,主要是記錄一些事件(Event),如流程創(chuàng)建、任務分配,它們在GraphElement的fireEvent時,譬如在Node.leave()(Token離開當前節(jié)點時)觸發(fā)fireEvent事件(在該事件方法里執(zhí)行自定義Action),同時記錄日志。我們關心的日志主要有process、task、transition、signal四類,每個下面還有事件細分,如task創(chuàng)建和分配。通過日志,我們統(tǒng)計流程執(zhí)行效率,也可以得到詳細的流程步驟日志。 日志的查詢,請參考LoggingSession及其相關類。順便說一下,所有的日志類都繼承于ProcessLog,約20來個。JBPM已經(jīng)聲明的日志查詢方法,可能并不能滿足我們的要求,自行擴展吧。 其它API JBPM API里有org.jbpm.web、org.jbpm.security等,前者負責在web容器啟動時加載JBPM引擎,將當前Session的用戶設置為任務的Actor等,后者負責安全相關的認證和授權。源碼很簡單,不多說了。我建議實現(xiàn)類似業(yè)務需求時,不妨參考其實現(xiàn),但拿來用就會發(fā)現(xiàn)它太簡陋了。   研究jBPM已有一段時間了,今天終于決定拿點東西出來,但請大家原諒不能分享源碼。之所以拿出來,希望通過交流認識到更多技術一線的同志們,結點人緣。本人不才只念完了高中,求職路屢戰(zhàn)屢敗,只好踏實地弄點東西出來撐下門面,希望有所幫助,找到一份滿意的工作。           大多研究JBPM的,對其引擎的擴展開發(fā)都不曾苦惱,但提及其可視化設計工具都希望能有一款WEB版設計器。          苦惱過后,便有了開發(fā)設計器的沖動。首先通過網(wǎng)上找到的WEB流程設計工具,多半是非流程研究人員的產(chǎn)品,拿來用要經(jīng)過大量的修改,不太可取,也不容易修改,參考倒是有些價值,在此謝過;另外由于剛學會了JavaScript在頁面實現(xiàn)的拖曳功能。鑒于此便開始了行動,現(xiàn)在想想還有些大膽。由于一直沒抽出時間來,拖了兩個多月,終于寫下了這篇文章。          基于javaScript+css+vml的jBPM web designer,由于使用了vml只支持IE瀏覽器(IE5+),其中沒有使用任何javaScript開發(fā)框架,但模仿了框架的css界面風格。開發(fā)過程中參考了、等javaScript開發(fā)框架;參考了jBPM designer eclipse 插件;參考了shine Workflow Designer截圖、以及圈子中貼出來的截圖(當時還回帖希望這位大哥分享源碼,結果失望,也就狠下心來獨干,造自己的輪子);還參考了webflow、XiorkFlow、(applet)等,XiorkFlow是早期看過的流程設計工具。在此謝過以上提供的參考。          以下以貼圖方式介紹jBPM3 web designer。 1、流程設計器主界面,采用純JS且面向?qū)ο蟮木幊谭绞剑ㄊ录幚頇C制swing、extjs思想中毒很深)開發(fā),動態(tài)生成div等HTML代碼,利用外部樣式表以實現(xiàn)多風格支持,根據(jù)窗口大小自適應寬高,以使編輯區(qū)域最大可視化,仿jBPM designer eclipse 插件布局與操作習慣(其中個人覺得屬性輸入要比eclipse 插件方便些),仿框架的css界面風格。主界面分為三部分,工具欄、編輯區(qū)、屬性欄,支持鼠標拖動設定大小及最大化、最小化、還原功能。編輯區(qū)支持網(wǎng)格顯示。目前設計器支持開始、結束、分支、合并、決策、任務、郵件7種節(jié)點(可以容易擴展新節(jié)點)并可以通過鼠標拖曳操作編輯大小,流程轉換可以通過鼠標操作支持直線及折線。節(jié)點的連接操作進行驗證,如只允許拖入一個開始節(jié)點;開始節(jié)點只允許單個from連接;結束節(jié)點只允許to連接,但支持多個連接;兩個節(jié)點只能有唯一的同向連接等等。點擊編輯區(qū)的空白處在屬性欄顯示流程定義的屬性配置,點擊節(jié)點則在屬性欄顯示節(jié)點的屬性配置,點擊流程轉換或其label同樣在屬性欄顯示其屬性配置。在屬性欄輸入配置信息將自動保存并響應到圖形展示上(如輸入節(jié)點名稱,則編輯區(qū)中節(jié)點顯示的文字相應地改變)。整個設計器工作過程相當流暢。所有的配置信息將生成符合JPDL規(guī)范的XML流程定義文件。由于最終的產(chǎn)物是XML字符串,這賦予了流程設計器不僅僅能夠定義出符合jBPM3的定義文件,稍做修改同樣能定義出符合jPBM4,以及其它任何的基本XML的定義文件。 2、圖形編輯,節(jié)點及流程轉換,利用vml標簽獲得良好的視覺效果(考慮兼容其它瀏覽器,可以開發(fā)基于svg、canvas或純js的圖形模型)。  網(wǎng)格 節(jié)點選中(節(jié)點選中后,可以通過鼠標按下拖動節(jié)點,改節(jié)點顯示位置,也可以通過鍵w、a、s、d或up、left、dowm、rigth來移動節(jié)點,選中的節(jié)點能夠通過delete鍵進行刪除,連同其所有的form及to轉換將一起被刪除。當兩個節(jié)點重疊時,選中節(jié)點始終顯示于最上面)  

注意事項

本文(淺析JBPM源碼)為本站會員(ca****in)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




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

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

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


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