【正文】
4 w s . c o r e .p r o c e s s c o m p o n e n t .u n d e p l o yc o m . j b p m 4 ws . j p d l 4 w sc o m . j b p m 4 w s . c o r e .p r o c e s s i n s t a n c ec o m . r 2 e . r u n t i m e . w o r k f lo w . c o r e . p r o c e s s i n s t a n c e. c o m p l e t e t a s kc o m . j b p m 4 w s . c or e . p e r s i s t e n c e . i nv o k e s e r v i c ec o m . r 2 e . r u n ti m e . w o r k f l ow . v a l i d a t ec o m . r 2 e . r u n ti m e . w o r k f l ow . w o r kc o m . r 2 e . r u n ti m e . w o r k f l ow . c x fc o m . j b p m 4 w s .c o r e 圖 46 的內(nèi)部包圖 ? : jbpm4ws 對流程卸載的處理包,該包主要完成對 jpdl4ws 中描述的任務(wù)信息的刪除。 ? :調(diào)用 web 服務(wù)的核心類,該類會調(diào)用 包中的 cxf 代理,來完成 web服務(wù)的調(diào)用。 圖 47 的內(nèi)部包圖 下面是對各個包的解釋: ? 是對 xml 進(jìn)行解析的核心包,該包中有ParseXml2Java 和 ParseJava2Xml 分別完成從 xml 到 java 和從 java 到xml 的轉(zhuǎn)換。 ? :jbpm4ws 的異常定義包,主要定義了一個Jbpm4wsException 的異常類,該類繼承至 RuntimeException, jbpm4ws 中所有對異常的處理都會由該類來完成。解析完成后,會得到用 jpdl 描述的流程信息和任務(wù)與服務(wù)的綁定信息。然后 ManageProcessComponent 類調(diào)用ProcessComponentDeployImp 類的 undeploy 方法, ProcessComponentDeployImp 類會調(diào)用 TaskServiceDaoImp 類的 delete 方法,將任務(wù)與服務(wù)的綁定信息從數(shù)據(jù)庫中卸載。 流程的服務(wù)化 在本文中流程服務(wù)化秩序?qū)⒘鞒淘L問接口即 jbpm4ws 的 service 層發(fā)布成 web服務(wù)即可。汽車制造行業(yè)與其它行業(yè)有著相識之處,但它又與普通的制造行業(yè)有著不同之處。為了加快系統(tǒng)的開發(fā)效率,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性,需要將生產(chǎn)過程和任務(wù)處理進(jìn) 行分離,而傳統(tǒng)的信息管理系統(tǒng)則無法完成上述要求。 我們通過對案例的分析可得出系統(tǒng)的制造過程包括,安裝輪胎、安裝車架、安裝發(fā)動機(jī)和質(zhì)檢,可以用流程圖描述如圖 51 所示 : 圖 51 應(yīng)用案例流程圖 28 案例分析與設(shè)計(jì) 案例體系架構(gòu) 案例整體上采用面向服務(wù)的體 系架構(gòu),在表現(xiàn)層上遵循 struts2 的 mvc 模式。 業(yè)務(wù)邏輯層:處理業(yè)務(wù)邏輯的 Action,主要負(fù)責(zé)處理 web 頁面發(fā)出的請求和調(diào)用服務(wù)層提供的服務(wù)。而對數(shù)據(jù)庫的訪問會產(chǎn)用 hibernate 進(jìn)行訪問 。以安裝發(fā)動機(jī)為例,定義的安裝發(fā)動機(jī)的 任務(wù)處理 服務(wù)的地址為:址為: transition來顯示表示,從安裝發(fā)動機(jī)的例子可以看出,安裝完發(fā)動機(jī)后 會 到安裝輪胎的任務(wù)節(jié)點(diǎn)。 ? OfflineHandler:完成汽車的下線工作,它會將生產(chǎn)的汽車加入對應(yīng)的產(chǎn)品庫中。 當(dāng)調(diào)用 jpmb4ws 提供的創(chuàng)建流程實(shí)例后,會創(chuàng)建一個相應(yīng)的流程實(shí)例,此時系統(tǒng)界面如圖 58 所示。依次類推,流程會被工作人員依次觸發(fā),直到整個汽車安裝過程完成。 圖 57 系統(tǒng)界面圖 —— 流程 33 圖 58 系統(tǒng)界面圖 —— 安裝車架 圖 59 系統(tǒng)界面圖 —— 安裝發(fā)動機(jī) 34 第 6 章 總結(jié)與展望 通過對現(xiàn)有工作流技術(shù)的學(xué)習(xí)和研究,本文提出并實(shí)現(xiàn)了一個基于 jbpm的面向服務(wù)的工作流引擎 —— jbpm4ws。 本 文對 jbpm4ws 的研發(fā)是基于對 jbpm 的擴(kuò)展和改進(jìn)。并給出系統(tǒng)的完整設(shè)計(jì)。但 eclipse 集成開發(fā)環(huán)境不適用于業(yè)務(wù)人員,且隨著 web 技術(shù)的飛速發(fā)展,開發(fā)一款基于 web 的可視化流程定義工具才更能滿足用戶需求。在對系統(tǒng)實(shí)現(xiàn)介紹時,主要介紹了流程的部署和卸載,流程服務(wù)的執(zhí)行三個功能服務(wù)。然后再 action 中調(diào)用 jbpm4ws 引擎提供的接口,進(jìn)而完成整個系統(tǒng)的設(shè)計(jì)。當(dāng)汽車安裝人員調(diào)用安裝汽車車架后,流程實(shí)例會被觸發(fā)到下一個狀態(tài),安裝發(fā)動 32 機(jī)。 部署實(shí)施 系統(tǒng)功能服務(wù)設(shè)計(jì)完成后,按照 節(jié)描述的方式將功能服務(wù)發(fā)布成 web 服務(wù),流程引擎就可以通過操作流程的接口對部署的功能服務(wù)進(jìn)行調(diào)用。圖 54 是兩個功能服務(wù)的接口定義類,該接口繼承了 IWorkProcess 和 IValidateProcess,其中 IWorkProcess 是由 jbpm4ws 定義的任務(wù)處理需要實(shí)現(xiàn)的接口, IValidateProcess 是由 jbpm 定義的規(guī)則校驗(yàn)需要實(shí)現(xiàn)的接口: 圖 54 makecar 接口定義圖 該接口的實(shí)現(xiàn)類是 MakeCarImpl,該類中有兩個核心方法 execute和 validate,其中 execute 執(zhí)行任務(wù)處理,而 validate 執(zhí)行規(guī)則校驗(yàn)。 系統(tǒng)流程設(shè)計(jì) 根據(jù)系統(tǒng)需求,可以用 jpdl4ws設(shè)計(jì)相應(yīng)的流程定義文件,具體描述如圖 53所示。 服務(wù)層( web service):主要是通過 cxf 發(fā)布的功能服務(wù),供上層的流程引擎和業(yè)務(wù)邏輯層使用。圖52 就是系統(tǒng)的整體架構(gòu)圖 。本文是在分析和改進(jìn)的 jbpm4ws 工作流引擎的基礎(chǔ)上,實(shí)現(xiàn)基于jbpm4ws 的汽車制造管理系統(tǒng)的簡單原型。汽車制造的實(shí)際過程包含很多業(yè)務(wù)流程,例如安裝輪胎、安裝車架、安裝發(fā)動機(jī)和質(zhì)檢等。下面以流程部署 接口的發(fā)布 為例介紹服務(wù)的發(fā)布步驟: ( 1) 將 ManageProcessComponentService 標(biāo)注為 web 服務(wù),如圖 411 所 示: 、圖411 ManageProcessComponentService 類 Web 服務(wù)標(biāo)注 ( 2) 將 deploy 標(biāo)注為 web 方法,如圖 412 所示: 圖 412 deploy 方法標(biāo)注 ( 3) 對要發(fā)布的 ManageProcessComponentService 類進(jìn)行 spring 配置,如圖413 所 示,其中, endpoint 配置服務(wù)發(fā)布的端口, implementor 配置服務(wù)的實(shí)現(xiàn),address 配置服務(wù)部署的地址; 圖 413 部署服務(wù)的 spring 配置 ( 4) 對 web 工程的 進(jìn)行配置,如圖 414 所 示,其中, servlet 元素配 26 置了一個 cxf 處理服務(wù)的 servlet 類, servletmapping元素配置了服務(wù)的映射位置,paramvalue 中配置的 webinf/ 是配置服務(wù)的 spring 的 xml文件的位置; 圖 414 部署服務(wù)的 配置 ( 5) 將打包后的 web 工程部署到 tomcat 中,啟動 tomcat 即可完成服務(wù)的發(fā)布。 pleteTask 將 一次完成下面三個過程: j b p m 4 w s 引 擎 客 戶 端 M a n a g e P r o c e s s I n s t a n c eJ b p m C o n t e x t P r o c e s s C o m p o n e n t D e p l o y I m p T a s k S e r v i c e D a o I m p l T a s k S e r v i c e D a o I m p lC o m p l e t e T a s kc o m p l e t e T a s kf i n d T a s k B y I n s t a n c e I d任 務(wù) 服 務(wù) 綁 定 信 息i n v o k e V a l i d a t ef a l s ef a l s ef a l s ec o m p l e t e T a s k消 息 2f i n d T a s k B y I n s t a n c e I d任 務(wù) 服 務(wù) 綁 定 信 息i n v o k e V a l i d a t et r u ei n v o k e W o r k er e s u l tt r u e , r e s u l tc o m p l e t e T a s kr e s u l t 圖 410 執(zhí)行流程服務(wù)時序圖 ( 1) 調(diào)用 TaskServiceDaoImp 類的 findTaskByInstanceId 方法,查找任務(wù)與服務(wù)的綁定信息; ( 2) 調(diào)用 InvokeService 類的 invokeValidate 方法進(jìn)行前置規(guī)則校驗(yàn); ( 3) TaskServiceDaoImp 類判斷前置規(guī)則是否滿足,如果滿足則調(diào)用InvokeService 類的 invokeWork 方法完成任務(wù)處理,并返回 true;如果前置規(guī)則不滿足,則返回 false。最后ManageProcessComponent 類調(diào)用 ProcessComponentDeployImp 類的 deploy 方法,ProcessComponentDeployImp 類會調(diào)用 TaskServiceDaoImp 類的 save 方法,將任務(wù)與服務(wù)的綁定 信息部署到數(shù)據(jù)庫中。這些功能服務(wù)主要包括,流程的部署、卸載,流程任務(wù)的執(zhí)行,而對于其它的功能服務(wù)由于是由 jbpm 完成, jbpm4ws 只是調(diào)用 jbpm 的一個中間代理層,在此就不在做介紹。 22 ? : jbpm4ws 對 jbpm 的代理,在該包中將構(gòu)建一個對 jbpm的代理,所有對 jbpm 的訪問都將通過該包提供的接口類來進(jìn)行,該包包含兩個類 ProcessEngineFactoryBean 和 JbpmProxy,其中ProcessEngineFactoryBean 是生成 jbpm 的 ProcessEngine 的核心類,該類會讀取 jbpm 的配置文件,并生成相應(yīng)的 ProcessEngine,而 JbpmProxy 是訪問 jbpm 的接口,所有對 jbpm 的調(diào)用都會通過 JbpmProxy 來完成。 ? : jbpm4ws 任務(wù)處理服務(wù)接口包,它是 jbm4ws 與任務(wù)處理服務(wù)進(jìn)行通訊的接口包,開發(fā)人員在使用 jbpm4ws 引擎來定制任務(wù)處理服務(wù)時需要實(shí)現(xiàn)該接口包中定義的接口,該包的核心接口是IWorkProcess。 ? : jbpm4ws 對數(shù)據(jù)流的處理,主要完成數(shù)據(jù)流之間的轉(zhuǎn)換。 ? : jbpm4ws 對流程實(shí)例管理的核心包,該包實(shí)現(xiàn)了 service 層 ManageProcessInstanceService 接口的所有方法。c o m . j b p m 4 w s . c o r ec o m . j b p m 4 w s . j b p mc o m . j b p m 4 w s . v a l i d a t ec o m . j b p m 4 w s . s e r v i c ec o m . j b p m 4 w s . e x c e p t i o nc o m . j b p m 4 w s . w o r kc o m . j b p m 4 w s . j p d l 4 w sc o m . j b p m 4 w s . u t i l 圖 45 jbpm4ws 的核心包圖 ? : jbpm4ws 的對外提供的服務(wù),在 中包含 ManageProcessComponentService 和 ManageProcessInstanceService兩個核心接口,其中 ManageProcessComponentService 提供對流程的管理服務(wù),而 ManageProcessInstanceService 提供對流程實(shí)例的管理服務(wù)。 jbpm4ws 內(nèi)核:它是 jbpm4ws 的核心,包括 service 層的實(shí)現(xiàn),對數(shù)據(jù)庫的訪問、流程調(diào)度、任務(wù)調(diào)度、 jpdl4ws 解析 五 個功能模塊,其中數(shù)據(jù)訪問、流程調(diào)度、任務(wù)處理、 xml 解析都是為 service 的實(shí)現(xiàn)提供服務(wù),它們彼此之間無依賴關(guān)系 。任務(wù)處理服務(wù)和規(guī)則校驗(yàn)服務(wù)中都含有一個 location 屬性,它描述的是服務(wù)所在的地址,類型是 string。因此,在 jpdl 原有的 task 元素的基礎(chǔ)上,添加 taskservice 子元素,圖 42 是 jpdl4ws 中任務(wù)節(jié)點(diǎn)的 schema 描述。 由圓角矩形表示的 jbpm 引擎會對