J2EE工作流系統(tǒng)jBPM詳解_第1頁
J2EE工作流系統(tǒng)jBPM詳解_第2頁
J2EE工作流系統(tǒng)jBPM詳解_第3頁
免費預(yù)覽已結(jié)束,剩余14頁可下載查看

下載本文檔

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

文檔簡介

1、、jBPM入門簡介概述工作流業(yè)務(wù)流程管理技術(shù)是基于SOA技術(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è)計了。實現(xiàn)的集中統(tǒng)一-業(yè)務(wù)流程經(jīng)常變化,使用工作流系統(tǒng)的最大好處是:業(yè)務(wù)流程的實現(xiàn)代碼,不再是散落在各種各樣的系統(tǒng)中。加快應(yīng)用開發(fā)-你的軟件不用再關(guān)注流程的參與者,開發(fā)起來更快,代碼更容易維護(hù)。2、業(yè)務(wù)流程管理(BPM>在自動化業(yè)務(wù)流程之前,分析并將它們規(guī)格化是一件艱苦但會有很好回報的工

2、作:提高效率-許多流程在自動化過程中會去除一些不必要的步驟較好的流程控制-通過標(biāo)準(zhǔn)的工作方法和跟蹤審計,提高了業(yè)務(wù)流程的管理改進(jìn)客戶服務(wù)-因為流程的一致性,提高了對客戶響應(yīng)的可預(yù)見性靈活-跨越流程的軟件控制,使流程可以按照業(yè)務(wù)的需要重新設(shè)計。業(yè)務(wù)流程改進(jìn)-對流程的關(guān)注,使它們趨向于流暢和簡單但從長遠(yuǎn)的角度,工作流流程管理技術(shù)的研究可為兩個階段進(jìn)行:1目前解決華研今后新項目中復(fù)雜業(yè)務(wù)流程如何使用工作流引擎技術(shù)進(jìn)行實現(xiàn)的問題。2上升到面向服務(wù)體系架構(gòu),實現(xiàn)各個服務(wù)之間的業(yè)務(wù)流程。jBPM,全稱是JavaBusinessProcessManagement,是一種基于J2EE的輕量級工作流管理系統(tǒng)。j

3、BPM是公開源代碼項目,它使用要遵循ApacheLicense。jBPM在2004年10月18日發(fā)布了2.0版本,并在同一天加入了JBoss,成為了JBoss企業(yè)中間件平臺的一個組成部分,它的名稱也改成JBossjBPM。隨著jBPM加入JBoss組織,jBPM也將進(jìn)入一個全新的發(fā)展時代,它的前景是十分光明的。JBossjBPM只有最小的倚賴性,它可以很容易的作為java庫來使用.當(dāng)然它也可以用在訪問量很大的J2EE群應(yīng)用服務(wù)器環(huán)境中JBossjBPM可以同任何數(shù)據(jù)庫配置可以部署在任何應(yīng)用服務(wù)器上jBPM最大的特色就是它的商務(wù)邏輯定義沒有采用目前的一些規(guī)范,如WfMCXPDL,BPML,ebX

4、ML,BPEL4WS等,而是采用了它自己定義的JBossjBPMProcessdefinitionIanguage(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ù)邏輯的處理。<具體選型報告可參考工作流技術(shù)選型評估報告)。本文檔主要是工作流研究小組關(guān)于開源工作流引擎jbpm的研究成果總結(jié)

5、。內(nèi)容包括工作流研究場景的介紹、jbpm的環(huán)境配置,并包括以下六個研究主題:JBPM同開發(fā)如何結(jié)合,又如何保持獨立性;對應(yīng)用系統(tǒng)的設(shè)計實現(xiàn)有什么樣的制約用戶/角色如何同應(yīng)用系統(tǒng)結(jié)合,變化又如何處理流程中每個活動,如何動態(tài)指定執(zhí)行者類似傳閱功能如何實現(xiàn)子流程如何實現(xiàn)流程執(zhí)行步驟耗時閥值和自動提醒設(shè)置jBPM當(dāng)前版本的穩(wěn)定性評估術(shù)語、定義和縮略語序號性定久業(yè)務(wù)就程(businessprocessJ取湘公商的開礴工作流引輦應(yīng)用場景本場景是從房地產(chǎn)營銷系統(tǒng)的需求中提取出來的,在房地產(chǎn)項目中,客戶選戶購房的過程是一個非常典型的工作流場景。我們將這一過程提取出來,作為jbpm技術(shù)研究的場景。在購房過程中,

6、會有以下人員參與。客戶:購房的主體銷售人員:在購房過程中指導(dǎo)看房,購房。銷售經(jīng)理:確定認(rèn)購信息。財務(wù)人員:收取定金??头藛T:打印收據(jù),打印客戶認(rèn)購書??蛻糍彿康倪^程可以描述如下??蛻魜淼绞蹣侵行模N售人員進(jìn)行接待??蛻粝蜾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)客戶到財務(wù)處交納定金。交納定金后,客服人員打印收據(jù)??头藛T

7、打印認(rèn)購書。為了使用研究的場景更有代表性,揉合其他典型的工作流應(yīng)用場景,將上面的流程作一些刪改??蛻粽J(rèn)購的流程改為:客戶確定購房,銷售人員錄入認(rèn)購資料。提交認(rèn)購資料,必須保證錄入資料的完整性。提交審核,按總金額進(jìn)行分類審核。如果金額小于50萬銷售經(jīng)理審核即可,大于50萬還要上級經(jīng)理兩人同時審核通過。審批完成,客戶到財務(wù)處交納定金??头藛T為客戶打印收據(jù),打印認(rèn)購書,認(rèn)購?fù)瓿?。啟金靜否歸戎汕號9啟金靜否歸戎汕號9/于別萬I面的流程中一些異常情況(流程中的一些分支,在這里先不作考慮,如,客戶在交納定金之前可以隨時放棄認(rèn)購??蛻舻恼J(rèn)購要錄入的資料內(nèi)容包括:客戶姓名,房號,定金,總金額,流程號等,這里

8、僅選取幾個重要的數(shù)據(jù)作為保存對象。保存錄入資料時自動取得一個流程號,任何時候,可以根據(jù)此流程號跟蹤流程狀態(tài),所以在保存認(rèn)購資料時要記錄流程號。通用的標(biāo)準(zhǔn)規(guī)范jBPM是個功能全面的WorkflowEngine,融合了4大功能:Workflow,BPMBPELPageFlow。它自己有個BPEL擴(kuò)展,采用jbossHibernate實現(xiàn),它使用自定義的自定義標(biāo)準(zhǔn)jpdl,不支持目前公開的工作流業(yè)務(wù)流程)標(biāo)準(zhǔn),如:JC”JSR208JavaBusinessIntegrationJSR207ProcessDefinitionforJavaOASI*WS-BPEWorkflowManagementCoa

9、lition(WFMC>WFMCXPXBusinessProcessManagementInitiative(BPMI>BPMObjectManagementGroup(OMG>StateChartXML(SCXML>處理測試階段的JBossjBPMBPEL擴(kuò)展準(zhǔn)備支持BPEL1.1標(biāo)準(zhǔn)(非標(biāo)準(zhǔn)組織通過的標(biāo)準(zhǔn)。技術(shù)方案因為公司采取的架構(gòu)是ejb3+tapestry4架構(gòu),所以我們的場景實現(xiàn)架構(gòu)也是基于以上架構(gòu)進(jìn)行實現(xiàn)的tapestry4+ejb3+jbpm3.2),我們所采取的jbpm版本是3.2,這也是目前jbpm最新的版本。這里我們使用jboss作為我們的web服務(wù)

10、器開發(fā)環(huán)境這里我們是采用eclipse3.2開發(fā)工具進(jìn)行開發(fā),Tapestry4+ejb3的開發(fā)環(huán)境配置和以往的項目配置基本保持一致,這里就不再進(jìn)行詳細(xì)介紹,關(guān)鍵就是jbpm3.2的配置方法。我們從jBoss官方網(wǎng)站(上下載jbpm-jpdl-suite-32GA.zip,最新的版本是,這個包括:jbpm-server,預(yù)先配置的jboss應(yīng)用服務(wù)器.jbpm-designer,jBPM流程圖形化設(shè)計器的eclipse插件jbpm-db,jBPM數(shù)據(jù)庫兼容包(參看下面.jbpm,核心jbpm組件包括庫和用戶手冊.jbpm-bpel,JBossjBPMBPEL擴(kuò)展參考.預(yù)配置的JBoss應(yīng)用服務(wù)

11、器有下列安裝組件:核心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套件包的具體介紹,可以參考JBossjBPMCookbook手冊。JBossjBPM是一個Java庫.因此,它可以用在任何java環(huán)境比如web應(yīng)

12、用程序,Swing應(yīng)用程序,EJB,WebService等等,JBossjBPM核心組件被打包成一個簡單的Java庫文件.它依賴你所使用的功能性,庫jbpm-jpdl.jar及一些相關(guān)的第三方的庫比如.hibernate3.2,dom4j等等在我們實現(xiàn)場景中。要使用jbpm,我們首先需要將jbpm3.2的包導(dǎo)入我們的項目當(dāng)中,jbpm3.2的主要包括兩個包jbpm-jpdl.jar和jbpm-identity.jar。而jbpm-jpdl.jar是jbpm的核心包,jbpm-identity.jar則是jbpm自帶的用戶角色權(quán)限管理包。我們將這兩個包導(dǎo)入我們的項目中。具體可參考jbpm的用戶手

13、冊)在jbpm中,流程的定義主要是編寫在xml文件中的,我們需要將具體的業(yè)務(wù)流程在xml中定義。所以我們需要在項目的根目錄上新建一個源目錄,這里我們命名為“processes”,在該目錄我們可以保存流程定義xml文件。JBossjBPM包括一個圖形化的流程設(shè)計工具.這個設(shè)計器是用來創(chuàng)作商業(yè)流程的,該圖形設(shè)計器是一個Eclipse插件,圖形化設(shè)計工具最重要的特性是它同時支持業(yè)務(wù)分析員和技術(shù)開發(fā)人員這樣就可以在業(yè)務(wù)流程建模和實際執(zhí)行之間平滑轉(zhuǎn)換。使用該插件你可以通過界面來拖拉描繪你的業(yè)務(wù)流程,而不需要靠手寫編碼來設(shè)計。該插件位于jbpm-jpdl-suite-32GA.zip中,插件的安裝方法可以

14、參考elipse插件的安裝方法。安裝完畢后,我們下面可以通過該插件新建流程設(shè)計文件。步驟如下:1、在processes目錄中右建選擇"NeW'"other”2、選擇"ProcessDefinition",點擊"Next”輸入Processname,點擊完成。打開設(shè)計界面,我們就可以在上面根據(jù)我們的業(yè)務(wù)來設(shè)計工作流流程文件。Jbpm本身包含很多自己的jbpm數(shù)據(jù)庫表,jBPM內(nèi)部使用hibernate來管理它的數(shù)據(jù)庫,通過Hibernate,jBPM將數(shù)據(jù)的管理職能分離出去,自己專注于商務(wù)邏輯的處理,而且我們可以使jBPM移植在不同的數(shù)據(jù)

15、庫.。我們進(jìn)行的每一步流程操作都保存在jbpm數(shù)據(jù)表中,通過調(diào)用jbpm提供的接口,我們可以對jBPM數(shù)據(jù)庫進(jìn)行存儲,更新和檢索流程信息的服務(wù)。這里我們使用Mysql5.0數(shù)據(jù)庫,下面我們在項目中新建一個源目錄“config.files",名字可以任意,在該目錄建立文件:?xmlversion='1.0'encoding='utf-8'?>< !DOCTYPEhibernate-configurationPUBLIC"-/Hibernate/HibernateConfigurationDTD3.0/EN""&q

16、uot;->hibernate-configuration>< session-factory><!-hibernatedialect-< -propertyname="hibernate.dialect"/property->< /property>< !-JDBCconnectionproperties(begin>=propertyname="hibernate.connection.driver_class"/property>propertyname="hiber

17、nate.connection.url"< propertyname="hibernate.connection.username"propertyname="hibernate.connection.password"=JDBCconnectionproperties(end>-<< /property>propertyname="connection.url">jdbc:mysql:/localhost/myjbpm/property>< propertyname=&quo

18、t;connection.username"propertyname="connection.password"< !-JDBCconnectionpool(usethebuilt-in>->>>jdbc:hsqldb:mem:jbpm</property>sa</property>></property>>root</property>>1234</property>>1</property><propertyname="

19、connection.pool_size"<</property><!-usedatasource-<!-DataSourceproperties(begin><propertyname="hibernate.connection.datasource"java:comp/env/JbpmDS</property>DataSourceproperties(end>-<!-Dropandre-createthedatabaseschemaonstartup-<propertyname="

20、;hbm2ddl.auto">create</property<!-JTAtransactionproperties(begin>=<propertyname="hibernate.transaction.factory_class"</property<</property=JTAtransactionproperties(end>-<!-CMTtransactionproperties(begin>=<propertyname="hibernate.transaction.fac

21、tory_class"</property<propertyname="hibernate.transaction.manager_lookup_class"=cmttransactionproperties(end>->!-loggingproperties(begin>=< propertyname="hibernate.show_sql">true</property>propertyname="hibernate.format_sql">true</p

22、roperty>< propertyname="hibernate.use_sql_comments">true</property>=loggingproperties(end>->< !-#->!-#mappingfileswithexternaldependencies#->< !-#->!-followingmappingfilehasadependendyon-><!-'bsh-version.jar'.->!-uncommentthisifyoudon

23、9;thavebshonyour->< !-classpath.youwon'tbeabletousethe->!-scriptelementinprocessdefinitionfiles->< mappingresource="org/jbpm/graph/action/Script.hbm.xml"/>!-followingmappingfileshaveadependendyon-><!-'jbpm-identity.jar',mappingfiles->!-ofthepluggablej

24、bpmidentitycomponent.->< !-Uncommentthefollowing3linesifyou->!-wanttousethejBPMidentitymgmgt-><!-identitymappings(begin-><mappingresource="org/jbpm/identity/User.hbm.xml"/><mappingresource="org/jbpm/identity/Group.hbm.xml"/><mappingresource="

25、org/jbpm/identity/Membership.hbm.xml"/<!-identitymappings(end>-><!-followingmappingfileshaveadependendyon-><!-theJCRAPI->!-jcrmappings(begin>=< mappingresource="org/jbpm/context/exe/variableinstanc/JcrNodelnstance.hbm.xml"/>=jcrmappings(end>->!-#-&g

26、t;< !-#jbpmmappingfiles#->!-#->< !-hqlqueriesandtypedefs->mappingresource="org/jbpm/db/hibernate.queries.hbm.xml"/< !-graph.defmappingfiles->mappingresource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>mappingresource="org/jbpm/graph/def/Node.hbm.x

27、ml"/>< mappingresource="org/jbpm/graph/def/Transition.hbm.xml"/>mappingresource="org/jbpm/graph/def/Event.hbm.xml"/>< mappingresource="org/jbpm/graph/def/Action.hbm.xml"/>mappingresource="org/jbpm/graph/def/SuperState.hbm.xml"/>< m

28、appingresource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>mappingresource="org/jbpm/instantiation/Delegation.hbm.xml"/><!-graph.nodemappingfiles->mappingresource="org/jbpm/graph/node/StartState.hbm.xml"/>< mappingresource="org/jbpm/graph/node/

29、EndState.hbm.xml"/>mappingresource="org/jbpm/graph/node/ProcessState.hbm.xml"/>< mappingresource="org/jbpm/graph/node/Decision.hbm.xml"/>mappingresource="org/jbpm/graph/node/Fork.hbm.xml"/>< mappingresource="org/jbpm/graph/node/Join.hbm.xml&q

30、uot;/>mappingresource="org/jbpm/graph/node/State.hbm.xml"/>< mappingresource="org/jbpm/graph/node/TaskNode.hbm.xml"/><!-context.defmappingfiles-><mappingresource="org/jbpm/context/def/ContextDefinition.hbm.xml"/><mappingresource="org/jbpm

31、/context/def/VariableAccess.hbm.xml"/><mapping< mappingresource="org/jbpm/taskmgmt/def/Swimlane.hbm.xml"/>mappingresource="org/jbpm/taskmgmt/def/Task.hbm.xml"/>< mappingresource="org/jbpm/taskmgmt/def/TaskController.hbm.xml"/>< !-module.defm

32、appingfiles->mappingresource="org/jbpm/module/def/ModuleDefinition.hbm.xml"/>!-bytesmappingfiles->< mappingresource="org/jbpm/bytes/ByteArray.hbm.xml"/>!-file.defmappingfiles->< mappingresource="org/jbpm/file/def/FileDefinition.hbm.xml"/>!-schedu

33、ler.defmappingfiles->< mappingresource="org/jbpm/scheduler/def/CreateTimerAction.hbm.xml"/>< mappingresource="org/jbpm/scheduler/def/CancelTimerAction.hbm.xml"/>< !-graph.exemappingfiles->mappingresource="org/jbpm/graph/exe/Comment.hbm.xml"/><

34、 mappingresource="org/jbpm/graph/exe/Processlnstance.hbm.xml"/><mappingresource="org/jbpm/graph/exe/Token.hbm.xml"/v!-module.exemappingfiles-vmappingresource="org/jbpm/module/exe/Modulelnstance.hbm.xml"/v!-context.exemappingfiles-vmappingresource="org/jbpm/co

35、ntext/exe/Contextlnstance.hbm.xml"/vmappingresource="org/jbpm/context/exe/TokenVariableMap.hbm.xml"/vmappingresource="org/jbpm/context/exe/VariableInstance.hbm.xml"/vmappingresource="org/jbpm/context/exe/variableinstance/ByteArraylnstance.hbm.xml"/>vmappingresou

36、rce="org/jbpm/context/exe/variableinstance/Datelnstance.hbm.xml"/vmappingresource="org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml"/vl"/>xml"/>mappingresource="org/jbpm/context/exe/variableinstance/Longlnstance.hbm.xml"/< mappingresource=

37、"org/jbpm/context/exe/variableinstance/Nulllnstance.hbm.xml"/mappingresource="org/jbpm/context/exe/variableinstance/Stringlnstance.hbm.xml"/< !-jobmappingfiles->mappingresource="org/jbpm/job/Job.hbm.xml"/>< mappingresource="org/jbpm/job/Timer.hbm.xml&qu

38、ot;/>mappingresource="org/jbpm/job/ExecuteNodeJob.hbm.xml"/>< mappingresource="org/jbpm/job/ExecuteActionJob.hbm.xml"/>!-taskmgmt.exemappingfiles-><mappingresource="org/jbpm/taskmgmt/exe/TaskMgmtlnstance.hbm.xml"/<mappingresource="org/jbpm/task

39、mgmt/exe/Tasklnstance.hbm.xml"/<mappingresource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/<mappingresource="org/jbpm/taskmgmt/exe/Swimlanelnstance.hbm.xml"/<mappingresource="org/jbpm/logging/log/ProcessLog.hbm.xml"/><mappingresource="org/jbpm/

40、logging/log/MessageLog.hbm.xml"/><mappingresource="org/jbpm/logging/log/CompositeLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/ActionLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/NodeLog.hbm.xml"/><mappingresource="org/jbpm/gr

41、aph/log/ProcesslnstanceCreateLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/ProcesslnstanceEndLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/ProcessStateLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/SignalLog.hbm.xml"/><mappingr

42、esource="org/jbpm/graph/log/TokenCreateLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/TokenEndLog.hbm.xml"/><mappingresource="org/jbpm/graph/log/TransitionLog.hbm.xml"/><mappingresource="org/jbpm/context/log/VariableLog.hbm.xml"/><m

43、appingresource="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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論