




已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
J2EE工作流管理系統(tǒng)jBPM詳解(一)一、jBPM入門簡介 概述 工作流業(yè)務(wù)流程管理技術(shù)是基于SOA技術(shù)實(shí)現(xiàn)的一個核心部分。使用工作流能夠在軟件開發(fā)和業(yè)務(wù)兩個層次受益: 1、方便開發(fā) 工作流管理系統(tǒng)能夠簡化企業(yè)級軟件開發(fā)甚至維護(hù)。 降低開發(fā)風(fēng)險 - 通過使用狀態(tài)和動作這樣的術(shù)語,業(yè)務(wù)分析師和開發(fā)人員使用同一種語言交談。這樣開發(fā)人員就不必將用戶需求轉(zhuǎn)化成軟件設(shè)計(jì)了。 實(shí)現(xiàn)的集中統(tǒng)一 -業(yè)務(wù)流程經(jīng)常變化,使用工作流系統(tǒng)的最大好處是:業(yè)務(wù)流程的實(shí)現(xiàn)代碼,不再是散落在各種各樣的系統(tǒng)中 。 加快應(yīng)用開發(fā) - 你的軟件不用再關(guān)注流程的參與者,開發(fā)起來更快,代碼更容易維護(hù)。 2、業(yè)務(wù)流程管理 (BPM) 在自動化業(yè)務(wù)流程之前,分析并將它們規(guī)格化是一件艱苦但會有很好回報(bào)的工作: 提高效率 - 許多流程在自動化過程中會去除一些不必要的步驟較好的流程控制 - 通過標(biāo)準(zhǔn)的工作方法和跟蹤審計(jì),提高了業(yè)務(wù)流程的管理 改進(jìn)客戶服務(wù) - 因?yàn)榱鞒痰囊恢滦裕岣吡藢蛻繇憫?yīng)的可預(yù)見性 靈活 - 跨越流程的軟件控制,使流程可以按照業(yè)務(wù)的需要重新設(shè)計(jì)。 業(yè)務(wù)流程改進(jìn) - 對流程的關(guān)注,使它們趨向于流暢和簡單 但從長遠(yuǎn)的角度,工作流流程管理技術(shù)的研究可為兩個階段進(jìn)行:1.目前解決華研今后新項(xiàng)目中復(fù)雜業(yè)務(wù)流程如何使用工作流引擎技術(shù)進(jìn)行實(shí)現(xiàn)的問題。 2.上升到面向服務(wù)體系架構(gòu),實(shí)現(xiàn)各個服務(wù)之間的業(yè)務(wù)流程。 jBPM,全稱是Java Business Process Management,是一種基于J2EE的輕量級工作流管理系統(tǒng)。jBPM是公開源代碼項(xiàng)目,它使用要遵循 Apache License. jBPM在2004年10月18日,發(fā)布了2.0版本,并在同一天加入了JBoss,成為了JBoss企業(yè)中間件平臺的一個組成部分,它的名稱也改成JBoss jBPM.隨著jBPM加入JBoss組織,jBPM也將進(jìn)入一個全新的發(fā)展時代,它的前景是十分光明的。 JBoss jBPM 只有最小的倚賴性,它可以很容易的作為java庫來使用。當(dāng)然它也可以用在訪問量很大的J2EE 群應(yīng)用服務(wù)器環(huán)境中。 JBoss jBPM 可以同任何數(shù)據(jù)庫配置可以部署在任何應(yīng)用服務(wù)器上。 jBPM 最大的特色就是它的商務(wù)邏輯定義沒有采用目前的一些規(guī)范,如WfMC XPDL, BPML, ebXML, BPEL4WS等,而是采用了它自己定義的JBoss jBPM Process definition language (jPdl)。jPdl認(rèn)為一個商務(wù)流程可以被看作是一個UML狀態(tài)圖。jPdl就是詳細(xì)定義了這個狀態(tài)圖的每個部分,如起始、結(jié)束狀態(tài),狀態(tài)之間的轉(zhuǎn)換等。 jBPM的另一個特色是它使用Hibernate來管理它的數(shù)據(jù)庫。Hibernate是目前Java領(lǐng)域最好的一種數(shù)據(jù)持久層解決方案。通過Hibernate,jBPM將數(shù)據(jù)的管理職能分離出去,自己專注于商務(wù)邏輯的處理。(具體選型報(bào)告可參考工作流技術(shù)選型評估報(bào)告)。 本文檔主要是工作流研究小組關(guān)于開源工作流引擎jbpm的研究成果總結(jié)。內(nèi)容包括工作流研究場景的介紹、jbpm的環(huán)境配置,并包括以下六個研究主題: JBPM同開發(fā)如何結(jié)合,又如何保持獨(dú)立性;對應(yīng)用系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)有什么樣的制約 用戶/角色如何同應(yīng)用系統(tǒng)結(jié)合,變化又如何處理 流程中每個活動,如何動態(tài)指定執(zhí)行者 類似傳閱功能如何實(shí)現(xiàn) 子流程如何實(shí)現(xiàn) 流程執(zhí)行步驟耗時閥值和自動提醒設(shè)置 jBPM當(dāng)前版本的穩(wěn)定性評估術(shù)語、定義和縮略語應(yīng)用場景 本場景是從房地產(chǎn)營銷系統(tǒng)的需求中提取出來的,在房地產(chǎn)項(xiàng)目中,客戶選戶購房的過程是一個非常典型的工作流場景。我們將這一過程提取出來,作為jbpm技術(shù)研究的場景。 在購房過程中,會有以下人員參與。 客戶:購房的主體 銷售人員:在購房過程中指導(dǎo)看房,購房。 銷售經(jīng)理:確定認(rèn)購信息。 財(cái)務(wù)人員:收取定金。 客服人員:打印收據(jù),打印客戶認(rèn)購書。 客戶購房的過程可以描述如下。 客戶來到售樓中心,銷售人員進(jìn)行接待。 客戶向銷售人員提供預(yù)先申請的服務(wù)號。 銷售人員確認(rèn)服務(wù)號是否有效,如果無效現(xiàn)場給出一個新的服務(wù)號。 銷售人員引導(dǎo)客戶選房。 客戶確定戶型,房號。 銷售人員錄入客戶認(rèn)購資料。 銷售人員確認(rèn)認(rèn)購資料填寫完整。 銷售人員將認(rèn)購資料提交給銷售經(jīng)理審批。 確定是否可以獲得優(yōu)惠,如果客戶是一次交清房款,獲得0.1%優(yōu)惠。 交上級經(jīng)理審批。 銷售人員引導(dǎo)客戶到財(cái)務(wù)處交納定金。 交納定金后,客服人員打印收據(jù)。 客服人員打印認(rèn)購書。 為了使用研究的場景更有代表性,揉合其他典型的工作流應(yīng)用場景,將上面的流程作一些刪改。 客戶認(rèn)購的流程改為: 客戶確定購房,銷售人員錄入認(rèn)購資料。 提交認(rèn)購資料,必須保證錄入資料的完整性。 提交審核,按總金額進(jìn)行分類審核。如果金額小于50萬銷售經(jīng)理審核即可,大于50萬還要上級經(jīng)理兩人同時審核通過。 審批完成,客戶到財(cái)務(wù)處交納定金。 客服人員為客戶打印收據(jù),打印認(rèn)購書,認(rèn)購?fù)瓿?。上面的流程中一些異常情況(流程中的一些分支),在這里先不作考慮,如,客戶在交納定金之前可以隨時放棄認(rèn)購。 客戶的認(rèn)購要錄入的資料內(nèi)容包括:客戶姓名,房號,定金,總金額,流程號等,這里僅選取幾個重要的數(shù)據(jù)作為保存對象。保存錄入資料時自動取得一個流程號,任何時候,可以根據(jù)此流程號跟蹤流程狀態(tài),所以在保存認(rèn)購資料時要記錄流程號。通用的標(biāo)準(zhǔn)規(guī)范 jBPM 是個功能全面的Workflow Engine,融合了4大功能:Workflow,BPM,BPEL,PageFlow。它自己有個BPEL擴(kuò)展,采用jboss Hibernate實(shí)現(xiàn),它使用自定義的自定義標(biāo)準(zhǔn)jpdl,不支持目前公開的工作流(業(yè)務(wù)流程)標(biāo)準(zhǔn),如: JCP JSR208 Java Business Integration JSR207 Process Definition for Java OASIS WS-BPEL Workflow Management Coalition(WFMC) WFMC XPDL Business Process Management Initiative (BPMI) BPMN Object Management Group (OMG) State Chart XML (SCXML) 處理測試階段的JBoss jBPM BPEL擴(kuò)展準(zhǔn)備支持BPEL 1.1標(biāo)準(zhǔn)(非標(biāo)準(zhǔn)組織通過的標(biāo)準(zhǔn))。技術(shù)方案 由于公司采取的架構(gòu)是ejb3+tapestry4架構(gòu),所以我們的場景實(shí)現(xiàn)架構(gòu)也是基于以上架構(gòu)進(jìn)行實(shí)現(xiàn)的(tapestry4+ejb3+jbpm3.2),我們所采取的jbpm版本是3.2,這也是目前jbpm最新的版本。這里我們使用jboss作為我們的web服務(wù)器開發(fā)環(huán)境 這里我們是采用eclipse3.2開發(fā)工具進(jìn)行開發(fā),Tapestry4+ejb3的開發(fā)環(huán)境配置和以往的項(xiàng)目配置基本保持一致,這里就不再進(jìn)行詳細(xì)介紹,關(guān)鍵就是jbpm3.2的配置方法。 我們從jBoss官方網(wǎng)站()上下載jbpm-jpdl-suite-3.2.GA.zip,最新的版本是3.2.GA,這個包括: jbpm-server , 預(yù)先配置的jboss 應(yīng)用服務(wù)器. jbpm-designer , jBPM流程圖形化設(shè)計(jì)器的eclipse 插件 . jbpm-db , jBPM 數(shù)據(jù)庫兼容包 (參看下面). jbpm , 核心jbpm組件包括庫和用戶手冊. jbpm-bpel , JBoss jBPM BPEL 擴(kuò)展參考. 預(yù)配置的JBoss 應(yīng)用服務(wù)器有下列安裝組件: 核心jBPM 組件 , 打包作為JBoss服務(wù)檔案 一個包括所有jBPM 表格的完整數(shù)據(jù)庫 : 默認(rèn)的 hypersonic 數(shù)據(jù)庫包含所有的jBPM 表格和已經(jīng)定義的流程. jBPM 控制臺web應(yīng)用程序 這個可以用來為jBPM管理員. jBPM調(diào)度程序 所有定時器的執(zhí)行. 調(diào)度程序在新手工具箱里配置成了一個servlet.這個Servlet會為產(chǎn)生一個線程來監(jiān)視每個定時器的執(zhí)行. 一個流程例子 已經(jīng)發(fā)布進(jìn)了jBPM 數(shù)據(jù)庫,關(guān)于jbpm-jpdl-suite-3.2套件包的具體介紹,可以參考JBoss jBPM Cookbook手冊。 JBoss jBPM 是一個Java庫. 因此,它可以用在任何java環(huán)境比如web 應(yīng)用程序,Swing應(yīng)用程序,EJB,Web Service等等,JBoss jBPM 核心組件被打包成一個簡單的Java庫文件.它依賴你所使用的功能性, 庫 jbpm-jpdl.jar及一些相關(guān)的第三方的庫比如 . hibernate3.2, dom4j 等等 在我們實(shí)現(xiàn)場景中。要使用jbpm,我們首先需要將jbpm3.2的包導(dǎo)入我們的項(xiàng)目當(dāng)中, jbpm3.2的主要包括兩個包jbpm-jpdl.jar和jbpm-identity.jar。而jbpm-jpdl.jar是jbpm的核心包,jbpm-identity.jar則是jbpm自帶的用戶角色權(quán)限管理包。我們將這兩個包導(dǎo)入我們的項(xiàng)目中。(具體可參考jbpm的用戶手冊) 在jbpm中,流程的定義主要是編寫在xml文件中的,我們需要將具體的業(yè)務(wù)流程在xml中定義。所以我們需要在項(xiàng)目的根目錄上新建一個源目錄,這里我們命名為“processes”,在該目錄我們可以保存流程定義xml文件。 JBoss jBPM 包括一個圖形化的流程設(shè)計(jì)工具. 這個設(shè)計(jì)器是用來創(chuàng)作商業(yè)流程的,該圖形設(shè)計(jì)器是一個Eclipse插件,圖形化設(shè)計(jì)工具最重要的特性是它同時支持業(yè)務(wù)分析員和技術(shù)開發(fā)人員. 這樣就可以在業(yè)務(wù)流程建模和實(shí)際執(zhí)行之間平滑轉(zhuǎn)換。使用該插件你可以通過界面來拖拉描繪你的業(yè)務(wù)流程,而不需要靠手寫編碼來設(shè)計(jì)。該插件位于jbpm-jpdl-suite-3.2.GA.zip中,插件的安裝方法可以參考elipse插件的安裝方法。安裝完畢后,我們下面可以通過該插件新建流程設(shè)計(jì)文件。步驟如下:1、在processes目錄中右建選擇“New”“other” 2、選擇“Process Definition”,點(diǎn)擊“Next” 輸入Process name,點(diǎn)擊完成。打開設(shè)計(jì)界面,我們就可以在上面根據(jù)我們的業(yè)務(wù)來設(shè)計(jì)工作流流程文件。 Jbpm本身包含很多自己的jbpm數(shù)據(jù)庫表,jBPM內(nèi)部使用hibernate來管理它的數(shù)據(jù)庫,通過Hibernate,jBPM將數(shù)據(jù)的管理職能分離出去,自己專注于商務(wù)邏輯的處理,而且我們可以使jBPM移植在不同的數(shù)據(jù)庫.。我們進(jìn)行的每一步流程操作都保存在jbpm數(shù)據(jù)表中,通過調(diào)用jbpm提供的接口,我們可以對jBPM數(shù)據(jù)庫進(jìn)行存儲,更新和檢索流程信息的服務(wù)。這里我們使用Mysql5.0數(shù)據(jù)庫,下面我們在項(xiàng)目中新建一個源目錄“config.files”,名字可以任意,在該目錄建立hibernate.cfg.xml文件:hibernate.cfg.xml?xml version=1.0 encoding=utf-8?!DOCTYPE hibernate-configuration PUBLIC -/Hibernate/Hibernate Configuration DTD 3.0/EN /hibernate-configuration-3.0.dtdhibernate-configurationsession-factory!- hibernate dialect -!-property name=hibernate.dialectorg.hibernate.dialect.HSQLDialect/property-property name=hibernate.dialectorg.hibernate.dialect.MySQLDialect/property!- JDBC connection properties (begin) =property name=hibernate.connection.driver_classorg.hsqldb.jdbcDriver/propertyproperty name=hibernate.connection.urljdbc:hsqldb:mem:jbpm/propertyproperty name=hibernate.connection.usernamesa/propertyproperty name=hibernate.connection.password/property= JDBC connection properties (end) -!- JDBC connection for MySQL database -property name=connection.driver_classcom.mysql.jdbc.Driver/propertyproperty name=connection.urljdbc:mysql:/localhost/myjbpm/propertyproperty name=connection.usernameroot/propertyproperty name=connection.password1234/property!- JDBC connection pool (use the built-in) -property name=connection.pool_size1/propertyproperty name=vider_classorg.hibernate.cache.HashtableCacheProvider/property!- use data source -!- DataSource properties (begin)property name=hibernate.connection.datasourcejava:comp/env/JbpmDS/propertyDataSource properties (end) -!- Drop and re-create the database schema on startup -property name=hbm2ddl.autocreate/property!- JTA transaction properties (begin) =property name=hibernate.transaction.factory_classorg.hibernate.transaction.JTATransactionFactory/propertyproperty name=hibernate.transaction.manager_lookup_classorg.hibernate.transaction.JBossTransactionManagerLookup/property= JTA transaction properties (end) -!- CMT transaction properties (begin) =property name=hibernate.transaction.factory_classorg.hibernate.transaction.CMTTransactionFactory/propertyproperty name=hibernate.transaction.manager_lookup_classorg.hibernate.transaction.JBossTransactionManagerLookup/property= CMT transaction properties (end) -!- logging properties (begin) =property name=hibernate.show_sqltrue/propertyproperty name=hibernate.format_sqltrue/propertyproperty name=hibernate.use_sql_commentstrue/property= logging properties (end) -!- # -!- # mapping files with external dependencies # -!- # -!- following mapping file has a dependendy on-!- bsh-version.jar. -!- uncomment this if you dont have bsh on your -!- classpath. you wont be able to use the -!- script element in process definition files-mapping resource=org/jbpm/graph/action/Script.hbm.xml /!- following mapping files have a dependendy on -!- jbpm-identity.jar, mapping files-!- of the pluggable jbpm identity component. -!- Uncomment the following 3 lines if you -!- want to use the jBPM identity mgmgt -!- component.-!- identity mappings (begin) -mapping resource=org/jbpm/identity/User.hbm.xml /mapping resource=org/jbpm/identity/Group.hbm.xml /mapping resource=org/jbpm/identity/Membership.hbm.xml /!- identity mappings (end) -!- following mapping files have a dependendy on -!- the JCR API -!- jcr mappings (begin) =mapping resource=org/jbpm/context/exe/variableinstanc /JcrNodeInstance.hbm.xml/= jcr mappings (end) -!- # -!- # jbpm mapping files # -!- # -!- hql queries and type defs -mapping resource=org/jbpm/db/hibernate.queries.hbm.xml /!- graph.def mapping files -mappingresource=org/jbpm/graph/def/ProcessDefinition.hbm.xml /mapping resource=org/jbpm/graph/def/Node.hbm.xml /mapping resource=org/jbpm/graph/def/Transition.hbm.xml /mapping resource=org/jbpm/graph/def/Event.hbm.xml /mapping resource=org/jbpm/graph/def/Action.hbm.xml /mapping resource=org/jbpm/graph/def/SuperState.hbm.xml /mapping resource=org/jbpm/graph/def/ExceptionHandler.hbm.xml /mapping resource=org/jbpm/instantiation/Delegation.hbm.xml /!- graph.node mapping files -mapping resource=org/jbpm/graph/node/StartState.hbm.xml /mapping resource=org/jbpm/graph/node/EndState.hbm.xml /mapping resource=org/jbpm/graph/node/ProcessState.hbm.xml /mapping resource=org/jbpm/graph/node/Decision.hbm.xml /mapping resource=org/jbpm/graph/node/Fork.hbm.xml /mapping resource=org/jbpm/graph/node/Join.hbm.xml /mapping resource=org/jbpm/graph/node/State.hbm.xml /mapping resource=org/jbpm/graph/node/TaskNode.hbm.xml /!- context.def mapping files -mappingresource=org/jbpm/context/def/ContextDefinition.hbm.xml /mapping resource=org/jbpm/context/def/VariableAccess.hbm.xml /!- taskmgmt.def mapping files -mappingresource=org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml /mapping resource=org/jbpm/taskmgmt/def/Swimlane.hbm.xml /mapping resource=org/jbpm/taskmgmt/def/Task.hbm.xml /mappingresource=org/jbpm/taskmgmt/def/TaskController.hbm.xml /!- module.def mapping files -mappingresource=org/jbpm/module/def/ModuleDefinition.hbm.xml /!- bytes mapping files -mapping resource=org/jbpm/bytes/ByteArray.hbm.xml /!- file.def mapping files -mapping resource=org/jbpm/file/def/FileDefinition.hbm.xml /!- scheduler.def mapping files -mappingresource=org/jbpm/scheduler/def/CreateTimerAction.hbm.xml /mappingresource=org/jbpm/scheduler/def/CancelTimerAction.hbm.xml /!- graph.exe mapping files -mapping resource=org/jbpm/graph/exe/Comment.hbm.xml /mapping resource=org/jbpm/graph/exe/ProcessInstance.hbm.xml /mapping resource=org/jbpm/graph/exe/Token.hbm.xml /mapping resource=org/jbpm/graph/exe/RuntimeAction.hbm.xml /!- module.exe mapping files -mapping resource=org/jbpm/module/exe/ModuleInstance.hbm.xml /!- context.exe mapping files -mappingresource=org/jbpm/context/exe/ContextInstance.hbm.xml /mappingresource=org/jbpm/context/exe/TokenVariableMap.hbm.xml /mappingresource=org/jbpm/context/exe/VariableInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/HibernateLongInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/HibernateStringInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml /mappingresource=org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml /!- job mapping files -mapping resource=org/jbpm/job/Job.hbm.xml /mapping resource=org/jbpm/job/Timer.hbm.xml /mapping resource=org/jbpm/job/ExecuteNodeJob.hbm.xml /mapping resource=org/jbpm/job/ExecuteActionJob.hbm.xml /!- taskmgmt.exe mapping files -mappingresource=org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml /mapping resource=org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml /mapping resource=org/jbpm/taskmgmt/exe/PooledActor.hbm.xml /mappingresource=org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml /!- logging mapping files -mapping resource=org/jbpm/logging/log/ProcessLog.hbm.xml /mapping resource=org/jbpm/logging/log/MessageLog.hbm.xml /mapping resource=org/jbpm/logging/log/CompositeLog.hbm.xml /mapping resource=org/jbpm/graph/log/ActionLog.hbm.xml /mapping resource=org/jbpm/graph/log/NodeLog.hbm.xml /mappingresource=org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml /mappingresource=org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml /mapping resource=org/jbpm/graph/log/ProcessStateLog.hbm.xml /mapping resource=org/jbpm/graph/log/SignalLog.hbm.xml /mapping resource=org/jbpm/graph/log/TokenCreateLog.hbm.xml /mapping resource=org/jbpm/graph/log/TokenEndLog.hbm.xml /mapping resource=org/jbpm/graph/log/TransitionLog.hbm.xml /mapping resource=org/jbpm/context/log/VariableLog.hbm.xml /mappingresource=org/jbpm/context/log/VariableCreateLog.hbm.xml /mappingresource=org/jbpm/context/log/VariableDeleteLog.hbm.xml /mappingresource=org/jbpm/context/log/VariableUpdateLog.hbm.xml /mappingresource=org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hbm.xml /mappingresource=org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml /mappingresource=org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.xml /mappingresource=org/jbpm/context/log/variableinstance/HibernateLongUpdateLog.hbm.xml /mappingresource=org/jbpm/context/log/variableinstance/HibernateStringUpdateLog.hbm.xml /mapping resource=org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml /mapping resource=org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.xml /mapping resource=org/jbpm/taskmgmt/log/TaskLog.hbm.xml /mapping resource=org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml /mapping resource=org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml /mapping resource=org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml /mapping resource=org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml /mappingresource=org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml / mappingresource=org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml /session-factory/hibernate-configuration 我們在web應(yīng)用項(xiàng)目的web.xml文件中定義JbpmContextFilter過濾類,它用于實(shí)現(xiàn)JBPMCONTEXT 的初始化 filter filter-nameJbpmContextFilter/filter-name filter-classorg.jbpm.web.JbpmContextFilter/filter-class /filter filter-mapping filter-nameJbpmContextFilter/filter-name url-pattern/*/url-pattern/filter-mapping 到這里,jbpm的配置已經(jīng)基本完成,關(guān)于jbpm詳細(xì)資料大家可以參考jbpm用戶指南,這里就不多說。子流程的使用 成果介紹 詳細(xì)闡述開發(fā)成果 評審標(biāo)準(zhǔn):清楚介紹開發(fā)成果 當(dāng)一個流程的業(yè)務(wù)邏輯非常復(fù)雜的時候,可以考慮使用子流程。子流程和主流程是相對獨(dú)立的。 設(shè)計(jì)思路 描述主要的設(shè)計(jì)思路,開發(fā)方法以及技術(shù)要點(diǎn)評審標(biāo)準(zhǔn):清晰表達(dá)設(shè)計(jì)思路和技術(shù)要點(diǎn) 在jbpm中,我們可以將一個復(fù)雜的業(yè)務(wù)流程文件根據(jù)業(yè)務(wù)邏輯的不同劃分為父流程和子流程,這樣一方面可以令我們的流程定義文件不會設(shè)計(jì)得太臃腫,二來可以方便我們將來的維護(hù),只對需要修改的流程進(jìn)行修改,而不影響其他流程。 如何使用 闡述如何結(jié)合項(xiàng)目需要應(yīng)用成果進(jìn)行開發(fā)。這部分需要詳細(xì)描述,讓其他開發(fā)人員按照此成果報(bào)告,能夠進(jìn)行一般簡單的開發(fā),具有較強(qiáng)的可操作性。評審標(biāo)準(zhǔn):開發(fā)人員按此使用說明基本能應(yīng)用成果進(jìn)行開發(fā) 這里我們介紹下關(guān)于jbpm子流程的使用,這里我們定義兩個流程定義xml文件,一個是父流程定義文件,一個是子流程定義文件。這里我想當(dāng)執(zhí)行完P(guān)ayfirst任務(wù)的時候,jbpm流程能自動去我的子流程文件中去執(zhí)行那邊定義的任務(wù)。這里是父流程processdefinition.xml?xml version=1.0 encoding=UTF-8?process-definition xmlns=urn::jpdl-3.2 name=myapp。task-node name=PayFirsttask name=PayFirstTask swimlane=finance/tasktransition name=get house contract to=subprocessaction name=actionclass=com.myapp.action.MessageActionHandlermessageHas pay first bulk of money. Print constract now!/message/action/transition/task-nodeprocess-state name=subprocesssub-process name=subprocessdefinition/transition to=end/transition/process-statetask-node name=pass round for perusal signal=last-wait create-tasks=falsetask name=perusalassignment actor-id=#processStarter/assignment/taskevent type=node-enteraction name=createInstance class=com.myapp.action.CreateTaskInstanceAction/action/eventtransition name=backto to=OnePersonAudit/transition/task-node/process-definition 可以看到,上面我們使用到了,在jbpm中,process-state標(biāo)簽代表的是引用子流程。這里我們接著定義子流程文件。 子流程subprocessdefinition定義文件?xml version=1.0 encoding=UTF-8?process-definition xmlns=urn::jpdl-3.2 name=subprocessdefinitionswimlane name=serviceassignment actor-id=service1 /swimlanestart-state name=subStarttransition to=PrintContract/transition/start-statetask-node name=PrintContracttask name=PrintContractTask swimlane=service/tasktransition name=PrintContract to=endaction name=actionclass=com.myapp.action.MessageActionHandlermessageFinish the process instance now./message/action/transition/task-nodeend-state name=end/end-state/process-definition示例實(shí)現(xiàn) 結(jié)合項(xiàng)目需要實(shí)現(xiàn),采用開發(fā)成果開發(fā)一個簡單應(yīng)用示例??梢枣溄拥狡渌臋n,如示例實(shí)現(xiàn)的項(xiàng)目工程評審標(biāo)準(zhǔn):能簡單展示開發(fā)成果的開發(fā)應(yīng)用 上面我們定義了兩個XML文件,一個是父流程,一個是子流程。下面我們說下如何使用這兩個文件。首先我們要先部署這兩個文件,使用子流程要注意,部署的時候一定要先部署子流程,然后在部署父流程。ProcessDefinition subProcess = ProcessDefinition.parseXmlResource(subprocessdefinition/processdefinition.xml);jbpmContext.deployProcessDefinition(subProcess);ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource(processdefinition.xml);jbpmContext.deployProcessDefinitio
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年遠(yuǎn)程醫(yī)療服務(wù)在分級診療中的信息化建設(shè)與挑戰(zhàn)報(bào)告
- 動漫產(chǎn)業(yè)鏈協(xié)同創(chuàng)新模式研究報(bào)告2025:產(chǎn)業(yè)融合趨勢
- 江蘇省泗洪縣聯(lián)考2025年七年級英語第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測試題含答案
- 2025年醫(yī)院信息化建設(shè)中的患者隱私保護(hù)初步設(shè)計(jì)評估報(bào)告
- 2025年工業(yè)互聯(lián)網(wǎng)平臺網(wǎng)絡(luò)安全態(tài)勢感知技術(shù)安全人才培養(yǎng)與職業(yè)規(guī)劃報(bào)告001
- 新一代大學(xué)英語(第二版)綜合教程1-U2-教師用書 Unit 2 The Magic of Wrds
- 文化創(chuàng)意產(chǎn)業(yè)園區(qū)文化創(chuàng)意產(chǎn)業(yè)園區(qū)產(chǎn)業(yè)創(chuàng)新研究報(bào)告
- 2025年醫(yī)藥市場前景預(yù)測:仿制藥一致性評價下的產(chǎn)業(yè)機(jī)遇研究報(bào)告
- 金融行業(yè)數(shù)據(jù)治理與資產(chǎn)化在金融行業(yè)數(shù)據(jù)治理體系建設(shè)中的應(yīng)用報(bào)告001
- 安全注射試試題及答案
- 2025年普通高等學(xué)校招生全國統(tǒng)一考試(全國I卷英語)及答案
- 銀行支行安全防范教育培訓(xùn)制度
- 艾梅乙考試試題及答案
- T/CECS 10363-2024薄壁不銹鋼管件用法蘭及法蘭接頭
- 2025年MySQL數(shù)據(jù)庫編程試題及答案
- C++冒泡排序?qū)崿F(xiàn)試題及答案
- 國開學(xué)習(xí)網(wǎng)《員工勞動關(guān)系管理》形考任務(wù)1-4答案
- 食堂成本核算方法
- 醫(yī)院培訓(xùn)課件:《新生兒疾病篩查采血技術(shù)及信息平臺的使用》
- 江蘇非物質(zhì)文化遺產(chǎn)研學(xué)旅行產(chǎn)品的開發(fā)與推廣
- NIH-FDA-IND-IDE-II期III期臨床試驗(yàn)方案模板
評論
0/150
提交評論