隨筆 - 251  文章 - 504  trackbacks - 0
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          本博客系個人收集材料及學(xué)習(xí)記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 202865
          • 排名 - 284

          最新評論

          級別:?初級??王強(qiáng),?軟件工程師,?日本富士施樂(FujiXerox)


          2003?年?8?月?01?日

          商業(yè)流程執(zhí)行語言BPEL4WS(Business?Process?Execution?Language?For?Web?Services)是專為整合Web?Services而制定的一項規(guī)范標(biāo)準(zhǔn)。它從本質(zhì)上來說是IBM的WSFL和Microsoft的XLANG的結(jié)合物,目前已經(jīng)成為業(yè)界標(biāo)準(zhǔn)。WSFL?支持圖形化的流程,而XLANG在結(jié)構(gòu)化構(gòu)造方面有獨(dú)到的方法,而BPEL4WS正是吸取了兩者的優(yōu)點,同時摒棄了一些復(fù)雜繁瑣的部分,形成了一種較為自然的描述商業(yè)活動的抽象高級語言。
          引言


          在本文的前三篇文章中(商業(yè)流程開發(fā)新紀(jì)元--BPEL4WS語言介紹,第1部分:特點介紹及使用技巧提示,第2部分:如何有針對性的利用RUP來規(guī)范BPEL4WS系統(tǒng)開發(fā)流程,BPEL4WS語言介紹,第3部分:利用UML對BEPL4WS系統(tǒng)進(jìn)行建模),已經(jīng)向讀者介紹了BPEL4WS語言的主要特點,BPEL4WS主要元素使用技巧以及利用外部Web服務(wù)的一些技巧;在軟件過程方面著重介紹了在利用BPEL4WS語言進(jìn)行系統(tǒng)開發(fā)時如何合理利用現(xiàn)有成熟軟件過程RUP(Rational?Unified?Process)進(jìn)行有針對性的系統(tǒng)開發(fā);在BPEL4WS系統(tǒng)建模方面簡要介紹了在開發(fā)過程中為什么要利用UML(Unified?Modeling?Language)對BPEL4WS系統(tǒng)進(jìn)行建模以及如何用UML來構(gòu)架BPEL4WS系統(tǒng)的體系結(jié)構(gòu)。在本中將向讀者介紹如何有針對性的利用UML核心架構(gòu)對BPEL4WS系統(tǒng)進(jìn)行建模。希望本文的內(nèi)容會對您對UML核心架構(gòu)的理解有所幫助。?

          (注:對于BPEL4WS的基本語法介紹以及UML的詳細(xì)語言規(guī)范由于篇幅原因并沒有包括在本文中,讀者可以參閱附錄中的相關(guān)資料介紹;?
          在文中出現(xiàn)的"BPEL4WS系統(tǒng)"與"用BPEL4WS語言開發(fā)的商業(yè)系統(tǒng)"同義)?

          正文

          根據(jù)不同系統(tǒng)的不同性質(zhì),一些模型可能比另一些模型要重要。例如,對于數(shù)據(jù)密集型系統(tǒng),表達(dá)靜態(tài)設(shè)計視圖的模型將占主導(dǎo)地位。對于圖形用戶接口密集型系統(tǒng),靜態(tài)和動態(tài)用況視圖就顯得相當(dāng)重要。在實時系統(tǒng)中,動態(tài)進(jìn)程視圖尤為重要。而在多層分布式系統(tǒng)中,尤其是在BPEL4WS系統(tǒng)中,實現(xiàn)模型和實施模型相對于其它系統(tǒng)來說就變得更加的重要。?

          在利用BPEL4WS語言進(jìn)行系統(tǒng)開發(fā)的過程中利用UML進(jìn)行建模的方法和對普通的軟件系統(tǒng)進(jìn)行建模的方法大體上是相同的,但由于BPEL4WS系統(tǒng)本身的特點決定了只有針對性地進(jìn)行建模活動才能取得更有價值的成果,再加上利用UML建模的過程實際上就是在遵循UML?Specification的基礎(chǔ)上,利用UML提供的一些核心要素對要開發(fā)的系統(tǒng)進(jìn)行可視化、詳述、構(gòu)造和文檔化的過程,所以我們可以針對UML的三個基本核心要素(基本構(gòu)造塊、規(guī)則、公共機(jī)制)來結(jié)合BPEL4WS語言的特點來有針對性地進(jìn)行建模活動。而如何有針對性的利用UML核心架構(gòu)對BPEL4WS系統(tǒng)進(jìn)行建模成為了一個重要的問題,在下面的內(nèi)容中將會較細(xì)致的介紹UML中主要元素的特點和如何在建模活動中有傾向性地向BPEL4WS系統(tǒng)靠攏。?


          <一>基本構(gòu)造塊

          在UML中的基本構(gòu)造塊可以劃分為主要的三大類,每一類又可以細(xì)分為上圖所示的許多小類。對于一個小型的項目來說,也許我們只會用到這些元素的一部分,但對于一個規(guī)模較大、較復(fù)雜的項目,特別是像BPEL4WS系統(tǒng)這樣的多層分布式系統(tǒng)來說,在我們建模的過程中,基本上會用到上面的每一種構(gòu)造塊,只是側(cè)重點要根據(jù)項目的特點的不同而定了。在UML的構(gòu)造塊中,我們利用"事物"可以對BPEL4WS模型中最具代表性的成分進(jìn)行抽象;利用"關(guān)系"把BPEL4WS系統(tǒng)中的各種相關(guān)事物結(jié)合在一起;利用"圖"來聚集整個BPEL4WS系統(tǒng)中的相關(guān)的事物。接下來讓我們來分析每一類基本構(gòu)造塊的特點,以及如何有針對性地利用它們對BPEL4WS系統(tǒng)進(jìn)行建模。?

          <1.1>基本構(gòu)造塊中的4種事物:


          <1.1.1>結(jié)構(gòu)事物(Structural?thing):是整個UML模型中的名詞。它們通常是模型的靜態(tài)部分,在BPEL4WS系統(tǒng)中,我們可以利用結(jié)構(gòu)事物來描述一些重要的概念或者物理元素,我們必須能夠捕捉到整個BPEL4WS系統(tǒng)中存在的所有的相關(guān)的結(jié)構(gòu)事物,只有在完整的系統(tǒng)語義的基礎(chǔ)上,我們才可能進(jìn)一步地發(fā)現(xiàn)和得到系統(tǒng)的動態(tài)特性。在利用UML建模時,我們一共可以用到7種結(jié)構(gòu)事物,它們分別是:?

          類(Class):是對一組具有相同屬性、相同操作、相同關(guān)系和相同語義的對象的描述。我們利用一個類可以實現(xiàn)一個或多個接口。在BPEL4WS系統(tǒng)中,類是最基礎(chǔ)的系統(tǒng)構(gòu)造部分,值得我們多加注意的是我們應(yīng)該把外部服務(wù)抽象成類的概念來進(jìn)行建模活動,這在后面的類圖介紹中會進(jìn)行解釋。?

          接口(Interface):是描述了一個類或構(gòu)件的一個服務(wù)的操作集合。因此,接口描述元素的外部可見行為。一個接口可以描述一個類或構(gòu)件的全部行為或部分行為。值得我們注意的是,我們只是利用接口定義了一組操作的描述(即特征標(biāo)記),而不是操作的實現(xiàn),所有具體的實現(xiàn)都由類或者構(gòu)件來完成。在BPEL4WS系統(tǒng)中,如果外部的Web服務(wù)提供給我們的服務(wù)是"暗盒操作",也就是我們不知道操作的具體內(nèi)部流程,我們就可以把這些操作抽象到某個接口中,而這些接口由那些抽象成類的Web服務(wù)來實現(xiàn)。?

          協(xié)作(Collaboration):定義了一個交互,它是由一組共同工作以提供某協(xié)作行為的角色和其他一些相關(guān)元素構(gòu)成的一個群體,這些協(xié)作行為從范圍上來說要大于所有元素的各自行為的總和。因此,協(xié)作是有結(jié)構(gòu)、行為和維度的。要注意的一點是,一個給定的類可以參與幾個協(xié)作,而這些協(xié)作表現(xiàn)了系統(tǒng)構(gòu)成模式的實現(xiàn)。我們在對BPEL4WS系統(tǒng)建模的時候,在抽象出系統(tǒng)相應(yīng)的用況之后,就要用協(xié)作來實現(xiàn)這些用況,用況就好比是一篇論文的前言,告訴了我們這篇論文是講什么的,而協(xié)作就是具體的內(nèi)容。?

          用況(Use?case):是對一組動作序列的描述,系統(tǒng)執(zhí)行這些動作序列將產(chǎn)生一個對某個特定的參與者有特定價值的結(jié)果。我們利用用況來對BPEL4WS模型中的行為事物結(jié)構(gòu)化,我們通常通過協(xié)作來實現(xiàn)某一個用況。如果想建立一個完善的BPEL4WS系統(tǒng)模型,用況可以說是至關(guān)重要的部分,因為所有的用戶需求我們都要在用況中體現(xiàn)出來,可以說用況是開發(fā)人員與用戶進(jìn)行交互的窗戶,在系統(tǒng)的測試階段,測試用例的創(chuàng)建也要以用況為基礎(chǔ),不論是BPEL4WS系統(tǒng)還是其他系統(tǒng),用戶滿意度才是判斷這個系統(tǒng)是否成功的最重要的因素。?

          主動類(Active?class):是這樣的一種特殊的類,其對象至少擁有一個進(jìn)程或線程,并且它能夠啟動控制活動。主動類的對象所描述的元素的行為與其他元素的行為并發(fā),除了這一點之外,它和類是一樣的。由于BPEL4WS流程本身就具有主動類的特征(每一個流程擁有自己的進(jìn)程,并能自動啟動控制活動),所以我們可以把流程本身抽象成主動類。?

          構(gòu)件(Component):是整個系統(tǒng)中物理的、可替代的部件,它遵循且提供一組接口的實現(xiàn)。在一個系統(tǒng)中,你將遇到不同類型的部署構(gòu)件,如?C?O?M?+構(gòu)件和Java?Beans,以及在開發(fā)過程中所產(chǎn)生的制品構(gòu)件,如源代碼文件。通常構(gòu)件是一個描述了一些邏輯元素(如類、接口和協(xié)作)的物理包。對于構(gòu)件在BPEL4WS系統(tǒng)中的使用,我們可以把每一個為我們提供Web服務(wù)的服務(wù)站點抽象成是一個特殊的"構(gòu)件",具體介紹在構(gòu)件圖的介紹中說明。?

          節(jié)點(Node):是在運(yùn)行時存在的物理元素,它表示了一種可計算的資源,它通常至少有一些記憶能力和處理能力。一個構(gòu)件集可以駐留在一個節(jié)點內(nèi),也可以從一個節(jié)點遷移到另一個節(jié)點。在一般的系統(tǒng)建模時,如在C/S模式的時候,節(jié)點往往就是客戶機(jī)和服務(wù)器;而在N-Tier模式時,也就是多層架構(gòu)時,除了客戶機(jī)和服務(wù)器外,還要將應(yīng)用服務(wù)器,也就是中間層建模為相應(yīng)的節(jié)點。在BPEL4WS系統(tǒng)中,比較特殊的一點是我們應(yīng)該將一個服務(wù)提供商抽象成是一個節(jié)點,在這個特殊的節(jié)點中提供了一系列的Web服務(wù),更詳細(xì)的內(nèi)容在實施圖的說明中介紹。?

          <1.1.2>行為事物(Behavioral?thing):是UML模型的動態(tài)部分。我們可以把它們看作是模型中的動詞,它們描述了系統(tǒng)中存在的行為動作。在利用UML對BPEL4WS系統(tǒng)進(jìn)行建模時,共有兩類主要的行為事物可以供我們使用:?

          交互(Interaction):是這樣一種行為,它由在特定語境中共同完成一定任務(wù)的一組對象之間交換的消息組成。一個對象群體的行為或單個操作的行為可以用一個交互來描述。交互涉及一些其他元素,包括消息、動作序列(由一個消息所引起行為)和鏈(對象間的連接)。?

          狀態(tài)機(jī)(state?machine):是這樣一種行為,它描述了一個對象或一個交互在生命期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列。單個類或一組類之間協(xié)作的行為可以用狀態(tài)機(jī)來描述。一個狀態(tài)機(jī)涉及到一些其他元素,包括狀態(tài)、轉(zhuǎn)換(從一個狀態(tài)到另一個狀態(tài)的流)、事件(觸發(fā)轉(zhuǎn)換的事物)和活動(對一個轉(zhuǎn)換的響應(yīng))。?

          在這里,由于篇幅關(guān)系,只介紹了行為事務(wù)的基本概念,在我們對BPEL4WS系統(tǒng)建模的時候,對于行為事務(wù)的建模是體現(xiàn)在相應(yīng)的系統(tǒng)圖模型中,這在下面的圖模型說明中會有介紹。?

          <1.1.3>分組事物(Group?thing):是UML模型的組織部分。它們一般是由整體系統(tǒng)分解下來的小的功能集合。在所有的分組事物中,最主要的分組事物是包,而在對BPEL4WS系統(tǒng)建模時我們利用最多的也是包。?

          包(Package):是把元素組織成組的機(jī)制,這種機(jī)制具有多種用途。結(jié)構(gòu)事物、行為事物甚至其他的分組事物都可以放進(jìn)包內(nèi)。包不像構(gòu)件(僅在運(yùn)行時存在),它純粹是概念上的(即它僅在開發(fā)時存在)。在BPEL4WS系統(tǒng)中,包的使用比較自由,我們可以根據(jù)自己的需要劃分系統(tǒng)中的各個部分,例如可以按外部Web服務(wù)的功能來劃分這些Web服務(wù)。?

          (注:包是用來組織UML模型的基本分組事物。它也有變體,如框架、模型和子系統(tǒng)等(它們是包的不同種類)。在JAVA中已經(jīng)直接支持了包的概念,而在C#中雖然沒有明確提出包的概念,但是C#中的命名空間概念實際上與包的概念是一致的)?

          <1.1.4>注釋事物(Annotation?thing):是UML模型的解釋部分。我們可以用注釋事物來描述、說明和標(biāo)注整個UML模型中的任何元素。有一種最主要的注釋事物,我們稱為注解。?

          注解(Note):是一個依附于一個元素或一組元素之上,對它進(jìn)行約束或解釋的簡單符號。注解可能是大家最容易忽視的部分,當(dāng)我們編碼的時候,程序注釋的重要性我想大家都知道,而當(dāng)我們對BPEL4WS系統(tǒng)或其他系統(tǒng)建模的時候,確容易忘掉為我們建立的系統(tǒng)模型元素加上詳細(xì)的注釋,對一個中小型系統(tǒng)來說,也許并不會有太大的危害,而對于一個復(fù)雜的系統(tǒng)模型來說,也許一時的偷懶會造成以后致命的潛伏的錯誤,所以寧可在建模時放慢進(jìn)度也要爭取建立一個完備的系統(tǒng)模型,為以后的review和測試階段打下良好的基礎(chǔ)。?

          <1.2>基本構(gòu)造塊中的4種關(guān)系:


          依賴(Dependency):?
          是兩個事物之間的一種語義關(guān)系,其中一個事物(獨(dú)立事物)發(fā)生變化會影響另一個事物(依賴事物)的語義。在BPEL4WS系統(tǒng)中,我們要善于挖掘系統(tǒng)中存在的依賴關(guān)系,如在BPEL4WS系統(tǒng)中,外部Web服務(wù)之間就可能存在著依賴關(guān)系。?

          關(guān)聯(lián)(Association):?
          是一種結(jié)構(gòu)關(guān)系,我們用它來描述一組鏈,鏈?zhǔn)菍ο笾g的連接。不論是對BPEL4WS系統(tǒng)還是其他系統(tǒng)來說,關(guān)聯(lián)關(guān)系恐怕是我們在建模時用到的最多的一種關(guān)系,系統(tǒng)元素之間的關(guān)系如果不能明顯的由其他三類關(guān)系來表示,都可以抽象為關(guān)聯(lián)關(guān)系。?

          (注:聚合是一種特殊類型的關(guān)聯(lián),它描述了整體和部分間的結(jié)構(gòu)關(guān)系)?

          泛化(Generalization):?
          是一種特殊/一般關(guān)系,特殊元素(子元素)的對象可替代一般元素(父元素)的對象,也就是我們在面向?qū)ο髮W(xué)中常常提起的繼承。用這種方法,子元素共享了父元素的結(jié)構(gòu)和行為。在BPEL4WS系統(tǒng)中,泛化關(guān)系的使用并沒有什么特殊的地方,只要注意能清楚明了地刻畫出系統(tǒng)相關(guān)元素之間所存在的繼承關(guān)系就行了。?

          實現(xiàn)(Realization):?
          是UML元素之間的語義關(guān)系,其中的一個元素制定了由另一個元素保證執(zhí)行的契約。在圖形上,我們可以把實現(xiàn)看作是泛化和依賴關(guān)系兩種圖形的結(jié)合體。?

          在BPEL4WS系統(tǒng)中,一般來說,我們會在兩個地方需要使用實現(xiàn)關(guān)系,一是用在接口和實現(xiàn)它們的類或構(gòu)件之間,另一種是用在用況和實現(xiàn)它們的協(xié)作之間,這些地方都是具有BPEL4WS系統(tǒng)特性的地方,大家在建模的時候要多加注意。?

          <1.3>基本構(gòu)造塊中的9種圖:


          類圖(Class?diagram):展現(xiàn)了一組對象、接口、協(xié)作和它們之間的關(guān)系。?
          在對面向?qū)ο笙到y(tǒng)的建模中所建立的最常見的圖就是類圖。我們可以用類圖來給出系統(tǒng)的靜態(tài)設(shè)計視圖,我們可以通過主動類的類圖給出整個系統(tǒng)的靜態(tài)進(jìn)程視圖。類圖恐怕是大家最熟悉使用的一種圖形了,因為自從有了面向?qū)ο蟮睦碚撘院螅惡皖悎D就成為最基礎(chǔ)的面向?qū)ο罄碚摗T趯PEL4WS系統(tǒng)建模的時候,開始時最困難的部分可能就是識別系統(tǒng)中到底有哪些相關(guān)對象,也就是抽象出有哪些類,對于識別對象并抽象出類的方法,由于篇幅關(guān)系在這里就不詳細(xì)說了,大家可以參看清華大學(xué)出版的一本很有名的書《面向?qū)ο蟮姆治觥罚ㄉ劬S忠,楊芙清),很實用的教材。在這里要提醒大家注意的是,在BPEL4WS系統(tǒng)中,應(yīng)該把所有的外部Web服務(wù)抽象成類(用版類Stereotype擴(kuò)展過的),而對于流程本身,也應(yīng)該抽象成類的概念,這樣所有BPEL4WS系統(tǒng)的元素都被抽象成類這種有固定形態(tài)特點的事物,這樣就為以后的系統(tǒng)動態(tài)分析打好了基礎(chǔ)。?

          對象圖(Object?diagram):展現(xiàn)了一組對象以及它們之間的關(guān)系。?
          對象圖描述了在類圖中所建立的事物的實例的靜態(tài)快照。雖然對象圖也給出了系統(tǒng)的靜態(tài)設(shè)計視圖或者靜態(tài)進(jìn)程視圖,但它們都是從真實的或原型案例的角度建立起來的。對于BPEL4WS系統(tǒng)的建模來說,對象圖并不是重點,因為過細(xì)致的對象圖會降低系統(tǒng)模型的抽象程度,這是不利于我們從更高的層次理解整個系統(tǒng)的架構(gòu)和運(yùn)作,但有的時候?qū)ο髨D也是必不可少的,特別是當(dāng)我們要表示出位于某個確定狀態(tài)的類對象之間的關(guān)系時。?

          用況圖(Use?case?diagram):展現(xiàn)了一組用況、參與者(一種特殊的類,可以為用戶或者是別的系統(tǒng))及其它們之間的關(guān)系。?
          我們通常利用用況圖給出整個系統(tǒng)的靜態(tài)用況視圖。這些圖對于系統(tǒng)的行為進(jìn)行組織和建模是非常重要的。值得注意的是,在用況圖中,我們應(yīng)該很好地利用用況之間的泛化關(guān)系,也就是繼承關(guān)系,這樣可以更清晰地把一個較復(fù)雜的商業(yè)用況劃分為幾個較簡單的用況(父用況和子用況),這對于我們在BPEL4WS系統(tǒng)中理解一些復(fù)雜的商業(yè)行為很有好處。?

          順序圖(Sequence?diagram):?
          在系統(tǒng)中,順序圖是一種強(qiáng)調(diào)消息的時間順序的交互圖。對于BPEL4WS系統(tǒng)的建模來說,順序圖應(yīng)該說是最重要的一種圖,雖然順序圖和協(xié)作圖是同構(gòu)的,也就是說是可互相轉(zhuǎn)化的,但由于順序圖強(qiáng)調(diào)了時間上的概念,這與一個實際商業(yè)流程的運(yùn)作是完全一致的,再加上BPEL4WS系統(tǒng)中所調(diào)用的各種外部Web服務(wù)在順序圖中可以很好的、形象的表現(xiàn)出來,所以當(dāng)我們要對具體的商業(yè)流程建模的時候,順序圖是我們最好的選擇。?

          協(xié)作圖(Collaboration?diagram):?
          協(xié)作圖也是一種交互圖,不過它主要強(qiáng)調(diào)了收發(fā)消息的對象的結(jié)構(gòu)組織的交互圖。對于一般的系統(tǒng)建模(如MIS系統(tǒng))來說,協(xié)作圖與順序圖是一樣重要的,而對于BPEL4WS系統(tǒng)來說,由于我們所關(guān)心的商業(yè)流程是有時間順序的,所以我們應(yīng)該先考慮創(chuàng)建完備的順序圖,對于一些用順序圖表示不太適合的交互(如涉及到復(fù)雜的消息傳遞),我們可以用協(xié)作圖將其表示出來。?

          (注:在這里,我要對交互圖作一些補(bǔ)充說明,首先,順序圖和協(xié)作圖都是交互圖,而且順序圖和協(xié)作圖是同構(gòu)的,這也就意味著它們是可以相互轉(zhuǎn)換的。另外一點需要注意的事,我們在系統(tǒng)建模的時候應(yīng)該使交互圖專注于整個系統(tǒng)的動態(tài)視圖,這是因為UML中的交互圖本質(zhì)上展現(xiàn)了一種交互,而這種交互是由一組對象和它們之間的關(guān)系組成的,包括了在它們之間可能發(fā)送的消息)?

          狀態(tài)圖(Statement?diagram):展現(xiàn)了一個狀態(tài)機(jī),它由狀態(tài)、轉(zhuǎn)換、事件和活動組成。?
          狀態(tài)圖也主要專注于整個系統(tǒng)的動態(tài)視圖,系統(tǒng)的狀態(tài)圖對于接口,類或協(xié)作的行為建模尤為重要,而且它還強(qiáng)調(diào)了對象行為的時間順序,這一點是非常有助于對反應(yīng)式系統(tǒng)建模的,也就是說對BPEL4WS系統(tǒng)建模來說是非常重要的(因為BPEL4WS系統(tǒng)實際上也帶有一部分反應(yīng)式系統(tǒng)的特點)。在為BPEL4WS系統(tǒng)所建立的模型中,狀態(tài)圖最重要的用處就是為流程本身的狀態(tài)以及外部Web服務(wù)的狀態(tài)建模。隨著流程的運(yùn)行,系統(tǒng)各個部分的狀態(tài)可能都會發(fā)生變化,我們一定要能捕捉到這些變化,并把這些變化體現(xiàn)在相應(yīng)的狀態(tài)圖中。?

          活動圖(Activity?diagram):是一種特殊的狀態(tài)圖,它展現(xiàn)了在系統(tǒng)內(nèi)從一個活動到另一個活動的流程。?
          活動圖在專注于系統(tǒng)的動態(tài)視圖的同時,強(qiáng)調(diào)了對象間的控制流程,這對系統(tǒng)的功能建模特別的重要。在利用活動圖對BPEL4WS系統(tǒng)建模的時候我們要注意,最好能把商業(yè)流程中發(fā)生的一系列商業(yè)事件(如客戶身份認(rèn)證,信用卡號認(rèn)證等)以一一對應(yīng)的關(guān)系對應(yīng)到流程的活動圖中的每一個活動;如果有必要的話,再對每一個活動進(jìn)行更深層次的分析,構(gòu)建出每一個活動本身的交互圖和活動圖。?

          構(gòu)件圖(Component?diagram):展現(xiàn)了一組構(gòu)件之間的組織和依賴。?
          對于構(gòu)件圖,我們首先要知道的是構(gòu)件圖不能反映出系統(tǒng)的動態(tài)特性,構(gòu)件圖專注于描述系統(tǒng)的靜態(tài)實現(xiàn)視圖。在我們對任何一個系統(tǒng)建模時(當(dāng)然包括BPEL4WS系統(tǒng)),構(gòu)件圖不可避免的要與類圖相關(guān)聯(lián),因此我們通常把構(gòu)件映射成一個或多個類、接口或協(xié)作。對于一般的系統(tǒng)來說,大部分的構(gòu)件都存放在本地系統(tǒng)上,我們可以從大體上把這些構(gòu)件分為兩類,一類是"內(nèi)部構(gòu)件",也就是自己開發(fā)的構(gòu)件;另一類是"外部導(dǎo)入構(gòu)件",也就是通常所說的第三方構(gòu)件,而對于BPEL4WS系統(tǒng)來說,由于它本身的特殊性(對外部Web服務(wù)的依賴性)決定了我們在建模時一定要用構(gòu)件圖完整地體現(xiàn)出整個流程所涉及到的所有的外部Web服務(wù)以及本地提供的Web服務(wù),我們可以把每一個為我們提供Web服務(wù)的服務(wù)站點抽象成是一個"構(gòu)件",而在這個特殊的"構(gòu)件"中為我們提供了一系列的Web服務(wù)功能。?

          實施圖(Deployment?diagram):展現(xiàn)了對運(yùn)行時處理節(jié)點以及其中的構(gòu)件的配置。?
          通過構(gòu)造系統(tǒng)的實施圖,我們就可以構(gòu)造出整個系統(tǒng)體系結(jié)構(gòu)的靜態(tài)實施視圖。在我們對BPEL4WS系統(tǒng)建模的時候,實施圖往往都要與構(gòu)件圖相關(guān),通常在系統(tǒng)的每個節(jié)點中都包含一個或多個構(gòu)件。我們可以擴(kuò)展實施圖中節(jié)點的概念,在擴(kuò)展出的新的節(jié)點的概念中,一個節(jié)點不一定就是一個處理節(jié)點,我們可以將一個服務(wù)提供商抽象成是一個節(jié)點,而一個服務(wù)提供商可能會為我們提供幾種不同的Web服務(wù)(即幾個不同的服務(wù)站點),那這些服務(wù)站點就可以被抽象為"構(gòu)件",這樣就可以很好的與構(gòu)件圖結(jié)合起來對BPEL4WS系統(tǒng)建模。?

          (注:?在對BPEL4WS系統(tǒng)建模時,并不限定僅使用這9種圖,但這9種圖在實際應(yīng)用中是最常用也是最方便使用的)?

          <二>規(guī)則

          在對BPEL4WS系統(tǒng)建模的時候,我們不能簡單地把UML構(gòu)造塊按隨機(jī)的方式放在一起。像任何語言一樣,UML有它自身的一套規(guī)則,這些規(guī)則描述了一個結(jié)構(gòu)良好的模型看起來應(yīng)該像什么。對于為BPEL4WS系統(tǒng)所構(gòu)建的模型,我們要求這個模型應(yīng)該在語義上是前后一致的,并且與所有的相關(guān)模型協(xié)調(diào)一致。在建模的時候,UML有用于描述如下事物的語義規(guī)則:?

          命  名:為事物、關(guān)系和圖起名。?

          范  圍:給一個名稱以特定含義的語境。?

          可見性:怎樣讓其他人使用或看見名稱。?

          完整性:事物如何正確、一致地相互聯(lián)系。?

          執(zhí)  行:運(yùn)行或模擬動態(tài)模型的含義是什么。?

          值得注意的一點是,當(dāng)我們對BPEL4WS系統(tǒng)進(jìn)行建模時除了要建造一些結(jié)構(gòu)良好的模型以外,我們在系統(tǒng)的開發(fā)期間所建造的模型往往需要發(fā)展變化,并可以由許多人員(所有的項目涉及人即Stakeholders)以不同的方式、在不同的時間進(jìn)行觀察。由于這個原因,下述的情況是常見的,即我們不僅要建造一些結(jié)構(gòu)良好的模型,也要建造一些這樣的臨時模型:?

          省   略:隱藏某些元素以簡化視圖。?

          不完全性:可以遺漏某些的元素。?

          不一致性:不保證模型的完整性。?

          在BPEL4WS系統(tǒng)開發(fā)的整個生命期內(nèi),隨著系統(tǒng)細(xì)節(jié)的展開和變動,不可避免地要出現(xiàn)這些不太規(guī)范的模型。但我們應(yīng)該時刻牢記,我們的任務(wù)是專注于BPEL4WS系統(tǒng)中最重要的分析、設(shè)計和實現(xiàn),而為了解決這些重要問題,將促使我們不斷地修改我們所建立的模型、完善我們所建立的模型,這樣隨著時間的推移和系統(tǒng)設(shè)計的深入,我們?yōu)锽PEL4WS系統(tǒng)所建立的模型將具有更好的結(jié)構(gòu)。?


          ?<三>公共機(jī)制


          在UML中有4種貫穿整個語言且一致應(yīng)用的公共機(jī)制,因此使得UML變得較為簡單;而特別值得我們注意的是,對于BPEL4WS系統(tǒng)的建模來說,這些機(jī)制顯得尤為的重要,如果沒有這些公共機(jī)制,我們是不可能構(gòu)建出語義上完備的BPEL4WS系統(tǒng)的。這4種公共機(jī)制分別是:?

          <3.17>詳述:在建模的過程中,我們利用UML的圖形表示發(fā)來對BPEL4WS系統(tǒng)進(jìn)行可視化,利用UML的詳述來描述BPEL4WS系統(tǒng)的細(xì)節(jié)問題。在文章前面提到的注釋的問題實際上就是詳述機(jī)制的問題,一個完備的BPEL4WS系統(tǒng)不僅要包括完整的系統(tǒng)模型元素,還要有詳細(xì)的詳述才能稱得上是一個健壯的系統(tǒng)。?

          <3.2>修飾:UML表示法中的每一個元素都有一個基本符號,可以把各種修飾細(xì)節(jié)加到這個符號上以擴(kuò)展其含義。在BPEL4WS系統(tǒng)中,我們可以較自由的對系統(tǒng)中的各個元素進(jìn)行修飾以擴(kuò)充其含義,但要注意要保證這種擴(kuò)充是在受控制的范圍中。?

          <3.3>通用劃分:在對BPEL4WS系統(tǒng)建模時,我們可以采用兩種通用劃分的手段,一種是對類和對象的劃分(類是一個抽象,而對象是這種抽象的一個具體形式);第二種是對接口和實現(xiàn)的分離(接口聲明了一個契約,而實現(xiàn)則表示了對該契約的具體實施,它負(fù)責(zé)如實地實現(xiàn)接口的完整語義)。?

          <3.4>擴(kuò)展機(jī)制:擴(kuò)展機(jī)制是對已有的UML語義按不同系統(tǒng)的特點合理地進(jìn)行擴(kuò)展。?

          UML擴(kuò)展機(jī)制包括:?

          <3.4.1>構(gòu)造型(Stereo?type):?
          我們在對BPEL4WS系統(tǒng)建模的時候,會發(fā)現(xiàn)現(xiàn)有的UML構(gòu)造塊不能完整無歧義地表示出BPEL4WS系統(tǒng)中的每一元素,因此我們可以利用構(gòu)造型來擴(kuò)展UML的詞匯,我們可以利用它來創(chuàng)造新的構(gòu)造塊,這個新創(chuàng)造的構(gòu)造塊既可以從現(xiàn)有的構(gòu)造塊派生,又專門針對我們要解決的問題。?

          <3.4.2>標(biāo)記值(Tagged?value):?
          利用標(biāo)記值,我們可以擴(kuò)展UML構(gòu)造塊的特性,我們可以根據(jù)我們的需要來創(chuàng)建詳述元素的新元素。?

          <3.4.3>約束(Constraint):?
          如果我們需要對UML構(gòu)造塊的語義進(jìn)行擴(kuò)展,我們就可以使用約束機(jī)制,這種機(jī)制使我們可以增加新的規(guī)則和修改現(xiàn)有的規(guī)則。?

          (注:由于BPEL4WS系統(tǒng)本身所固有的特點,決定了在我們對其進(jìn)行建模時不得不對UML中的一些部分進(jìn)行擴(kuò)展,但有一點我們必須要注意,那就是我們一定要讓我們對UML所作出的擴(kuò)展保持在我們的控制范圍內(nèi),簡單的說就是我們只可以以受控的方式來進(jìn)行擴(kuò)展,而不能任意地、無限制地進(jìn)行擴(kuò)展,我們必須保證我們利用UML擴(kuò)展機(jī)制對BPEL4WS系統(tǒng)所作的建模活動是可理解、可控制的,如果任意地擴(kuò)展,就會使我們在對系統(tǒng)進(jìn)行建模的過程中偏離利用UML建模的真正目的--信息交流)?


          給開發(fā)者的建議


          "不積跬步無以至千里",學(xué)習(xí)掌握UML的過程是一個漫長的過程,有時還會覺得有些乏味,但當(dāng)你真真掌握了它并靈活的運(yùn)用它在你的工作中的時候,你就會發(fā)現(xiàn)你不曾想到的樂趣。現(xiàn)在UML2.0已經(jīng)問世了,而BPEL4WS語言也有了新的版本,它們都添加了很多的新的東西,也去掉了一些舊的東西,但我相信本文的內(nèi)容對于新的Specification來說也是同樣適用的,對于新技術(shù)新知識我覺得我們應(yīng)該抱著一種積極的態(tài)度去學(xué)習(xí)和掌握它們,而不應(yīng)該處于一種被動的狀態(tài),越早行動起來就能越早的收到回報,千萬不要猶豫不決,就像《誰偷了我的奶酪》中說的那樣,讓我們都作一只敢于迎接變化的小老鼠吧!?


          結(jié)束語


          在本文中向讀者簡要介紹了有關(guān)如何有針對性的利用UML核心架構(gòu)對BPEL4WS系統(tǒng)進(jìn)行建模的問題。在下一篇文章中,我將會在簡要的介紹一些有關(guān)商業(yè)系統(tǒng)和商業(yè)流程的特點之后,為大家舉一個實際的例子(貫穿分析,設(shè)計和實現(xiàn))來闡明有關(guān)利用BPEL4WS進(jìn)行系統(tǒng)開發(fā)和商業(yè)流程架構(gòu)時應(yīng)注意的細(xì)節(jié)問題,例子可能不長,但會涵蓋UML中最重要的部分。?


          參考資料?

          BPEL4WS語言規(guī)范?v.1.1?
          http://www.ibm.com/developerworks/library/ws-bpel/?


          UML(Unified?Modeling?Language)語言規(guī)范?v.1.5?
          http://www.omg.org/technology/documents/formal/uml.htm?


          RUP(Rational?Unified?Process)語言規(guī)范?
          http://www.rational.com/products/rup/index.jsp?


          ?

          posted on 2006-09-10 16:24 matthew 閱讀(448) 評論(0)  編輯  收藏 所屬分類: Web Services and SOA
          主站蜘蛛池模板: 津市市| 通山县| 县级市| 忻城县| 安远县| 云霄县| 封开县| 腾冲县| 新化县| 河源市| 平度市| 垦利县| 天津市| 昌图县| 榕江县| 莱西市| 吐鲁番市| 华宁县| 依兰县| 绵竹市| 广灵县| 黄梅县| 神木县| 酒泉市| 韶山市| 荣昌县| 阿瓦提县| 武夷山市| 泸溪县| 普定县| 萨嘎县| 安龙县| 青川县| 恩平市| 宜宾县| 邛崃市| 濉溪县| 元江| 浦北县| 扎兰屯市| 宜兰市|