日期:2004年5月17日
摘要
讓我們也趟一趟建模這潭混水吧,描述建模的一些挑戰(zhàn),并提供一個業(yè)務(wù)流程建模狀態(tài)概述。在本系列中的第一篇文章(WLDJ,第3卷,第4期)中,我論述了架構(gòu)藍圖的重要性,同時也詳述了為構(gòu)建健壯的、企業(yè)級集成解決方案而創(chuàng)建可重復方法的最佳實踐,目的是服務(wù)于那些能夠適應(yīng)和靈活的企業(yè)。
作者:Labro Dimitriou
讓我們也趟一趟建模這潭混水吧,描述建模的一些挑戰(zhàn),并提供一個業(yè)務(wù)流程建模狀態(tài)概述。
在本系列中的第一篇文章(WLDJ,第3卷,第4期)中,我論述了架構(gòu)藍圖的重要性,同時也詳述了為構(gòu)建健壯的、企業(yè)級集成解決方案而創(chuàng)建可復用方法的最佳實踐,目的是服務(wù)于那些能夠適應(yīng)和靈活的企業(yè)。在高度分布和時刻變化的業(yè)務(wù)生態(tài)系統(tǒng)中,作為連接性的支柱,我認為該服務(wù)是將SOA和BPMS與Web服務(wù)合并起來的統(tǒng)一結(jié)構(gòu)。在業(yè)務(wù)流程和BPMS是一個進化性的新技術(shù)革新(計算中的頭等公民)的分布式計算中,SOA是一個進化性的步驟。最后我用基本業(yè)務(wù)服務(wù)(EBS)的概念結(jié)束,EBS是通過企業(yè)信息總線(另外一個時代錯誤的和重載的術(shù)語)可用于企業(yè)的小的工作單元。EBS組合提供企業(yè)級重用的最終指南。通過將現(xiàn)有的EBS、新業(yè)務(wù)事件以及人力資源與自適應(yīng)公司目標相結(jié)合,新的業(yè)務(wù)流程正在接近實時的情況下出現(xiàn)。
在本文中,我介紹了新出現(xiàn)的業(yè)務(wù)流程設(shè)計模式,這些模式提供可應(yīng)對長期的、企業(yè)級業(yè)務(wù)挑戰(zhàn)的以BPM為中心的架構(gòu)解決方案。在描述了模型的外觀之后,我們將業(yè)務(wù)流程分解成已知組件并試圖理解伴隨而來的設(shè)計挑戰(zhàn)。最后,我將提供一個業(yè)務(wù)-流程設(shè)計模式的建議分類法。
與此同時,虛構(gòu)的汽車保險代理機構(gòu)(其業(yè)務(wù)流程是獲取汽車保險報價,這正是我要建模的)的董事會要求我在提出解決方案之前等待一段時間。他們正在經(jīng)歷業(yè)務(wù)流程的重新設(shè)計階段并準備通過一項新的政策。該政策規(guī)定所有的報價都要由外部保險商提供。保險商通過虛擬的協(xié)作式B2B交易獲利。此外,作為流程的一部分,他們通過安全的Web服務(wù)進行信譽報告檢查的談判。因此,不管我在第一篇文章中許諾了什么,且為了完整性,我將不得不推遲到下一篇文章中進行本討論。
建模的問題
Booch et al告訴我們“模型是現(xiàn)實的簡化”和“最好的模型是和現(xiàn)實相聯(lián)系的”;但是我們要對誰的現(xiàn)實進行建模呢?而且,我們使用哪種建模范例或者說框架來對建??蚣苓M行建模呢?以及為什么我們需要模型?模型可能會比較恐怖,因為它會使您忘掉現(xiàn)實。考慮以下類比:業(yè)務(wù)領(lǐng)域(business domains)好比是夢,而模型就是您對夢的闡釋。不久您會只記住了夢的闡釋而忘卻了夢。為此,我的目標不是去詳盡的解釋所有這些問題,即使我有這個能力。這里只是闡明基本的概念,并簡要描述涉及以下幾個方面的且為人們所普遍接受的觀念和挑戰(zhàn),(1)用流程-業(yè)務(wù)流程對業(yè)務(wù)生態(tài)系統(tǒng)進行建模;(2)使用對業(yè)務(wù)流程進行建模的建模框架;(3)選擇一種語言/語法來表示建模框架;和(4)選擇一個圖形符號來可視化呈現(xiàn)業(yè)務(wù)流程。
業(yè)務(wù)流程可很好地對協(xié)作式業(yè)務(wù)生態(tài)系統(tǒng)進行建模,且BPMS框架可成功的消除業(yè)務(wù)和IT之間的阻抗失配問題。但是我們應(yīng)該使用誰的建模標準呢?BPML的出現(xiàn)和使用已有一段時間了,但看上去BPEL4WS是贏家。很明顯,兩個標準都使用XML作為實現(xiàn)之選擇。另一方面,UML陣營也沒有停滯不前。UML序列圖表用于建模已經(jīng)足夠好了嗎?關(guān)于OMG的模型驅(qū)動架構(gòu),而不和特征驅(qū)動架構(gòu)或域驅(qū)動設(shè)計相混淆的亂哄哄的是什么?當然,更不用提眾多的其他標準了,如XPDL、ebXML、XLANG、WSCL、WSFL和許多其他正在研制過程中的標準,如YAWL(yet another workflow language)。現(xiàn)在是打破公共謬誤的好時間了:與流行的看法相反,工作流和流程確實有非常相似的方面。在工作流軟件公司劫用了術(shù)語“工作流”來表示文檔流和工作分配之前更是如此,BPM技術(shù)推廣人,包括我自己,不希望和過去的事情如<e>AI和工作流引擎有什么關(guān)系。(這里我使用<e>而不是傳統(tǒng)的E來表示防火墻之外和整個業(yè)務(wù)生態(tài)系統(tǒng)的AI。)很明顯,圖形化、控制流表示和圖形理論是工作流和類似流程的公共方面。所以從現(xiàn)在開始,我將交替使用工作流和流程這兩個術(shù)語。
業(yè)務(wù)-流程模型并不封裝特定業(yè)務(wù)領(lǐng)域的知識,但卻有定義業(yè)務(wù)內(nèi)容的表達力。另一方面,業(yè)務(wù)內(nèi)容的不透明對業(yè)務(wù)協(xié)議有著不確定性的影響,使得異常處理和補償交易(compensating transactions)更具挑戰(zhàn)性。
流程建模所采用的兩個主要的數(shù)學/建模理論是:(1)Petri網(wǎng),和(2)π-微積分(π-calculus)或差分和補充概念分別是狀態(tài)圖表、時間隨機網(wǎng)絡(luò)和環(huán)境微積分。
Petri網(wǎng)是由C.A.Petri在20世紀60年代早期提出來的,作為對分布式系統(tǒng)進行建模的數(shù)學工具,特別用于并發(fā)、不確定論、通信和同步的概念。π-微積分(π-calculus)是由Milner、Parrow和Walker所定義,作為“移動流程的微積分(Calculus of Mobile Processes)”。基于Petri 網(wǎng)語言的性能優(yōu)于基于狀態(tài)的工作流,但是在對多個并發(fā)流程和復雜同步需求進行建模時,它卻有一定的困難并可能提高復雜程度。
圖1
簡單來說,曲線圖含有與邊緣線相連的節(jié)點。Petri網(wǎng)是一種帶有節(jié)點的曲線圖,節(jié)點是位置(圓形)或轉(zhuǎn)換(矩形)和令牌。不同類型的節(jié)點通過弧線連接在一起?;【€有兩種:輸入和輸出。一個位置可擁有一個或多個令牌。流程的狀態(tài)是由位置和令牌建模的,而狀態(tài)轉(zhuǎn)換是由轉(zhuǎn)換建模的。圖1圖示了作為Petri網(wǎng)的B2C和B2B的交互,一客戶分別從一個代理和保險商流程請求保險報價。私有流程從本質(zhì)上說獨立運行,但是必須通過共享點進行同步。Wil van der Aalst教授的論文用了若干個很好的示例對Petri網(wǎng)進行了簡單的介紹,并提供了一個applet來設(shè)計您自己的Petri網(wǎng)。
π-微積分對通過網(wǎng)絡(luò)拓撲可動態(tài)改變的通道所進行并發(fā)流程通信進行建模。節(jié)點是流程,邊緣線是命名通道。流程可以通過通道交換名稱,且除了通道名稱外沒有其他值。例如,符號x(y).P 表示流程P通過通道x接收一個值y。P1|P2表明P1和P2是兩個并發(fā)流程。最后,(y)表示通過一個通道a發(fā)送一個名稱y。例如,某用戶通過一個保險Web站點請求報價的情況可能是這樣的:
webChannel(sendData).RequestQuote | webChannel (getData).ProcessQuote,
其中RequestQuote和PeocessQuote是兩個并行運行的流程。
您可能會問,為什么要用這些形式主義使事情更加復雜化呢?因為不這樣的話,它等于不用雙帳簿入帳技術(shù)和普通的分類總帳進行賬目管理,并希望最后的總和為0。基本的流程幾何幫助我們(BPM引擎和下一代業(yè)務(wù)活動監(jiān)視器)來找到死鎖和競態(tài)條件、將流程簡化為更簡單的,并找到最佳路徑、更好的機遇(基于業(yè)務(wù)規(guī)則)和回答其他感興趣的問題。BPMS的視野遠遠超過了流程的簡單執(zhí)行。正是由于BPMS的形式主義,才使我們現(xiàn)在有一個該運行時企業(yè)的直接實時API并實現(xiàn)執(zhí)行的天堂。
至于圖形符號,業(yè)務(wù)流程建模符號(BPMN)是學術(shù)界之外所不得不使用的惟一符號。當有人在談?wù)撝?/span>BPEL4WS頂部實現(xiàn)BPMN時,一些提供商已經(jīng)宣布了愿意遵從,包括Popkin Software(一個軟件分析工具提供商)和Intalio(一個專業(yè)BPM工具)。基于WebLogic Server(事實上的應(yīng)用服務(wù)器行業(yè)標準)的WebLogic Platform 8.1自帶的集成開發(fā)環(huán)境(IDE)用于設(shè)計和部署分布式應(yīng)用程序。該IDE使用了一些強大的和直觀的結(jié)構(gòu)來推動業(yè)務(wù)-流程的設(shè)計和開發(fā)??梢暬独晒Φ仉[藏了面向?qū)ο缶幊獭?/span>J2EE、J2EE CA、JMS和WS-WSDL的苛刻要求。而其他大多數(shù)供應(yīng)商使用典型的類似Visio的工作流或者面向?qū)ο蟮?/span>UML符號。
分解業(yè)務(wù)流程
圖2
業(yè)務(wù)流程管理方法實際上是一個自上而下的方法。起始于頂端,流程的寬度整合了靈活企業(yè)內(nèi)部的所有知識領(lǐng)域:業(yè)務(wù)情報、主題專業(yè)知識交互(UI和其他)、位置和組織邊界、遺留應(yīng)用程序、集成點以及數(shù)據(jù)需求。隨著我們增加流程的深度,我們要識別子流程(一些位于一組業(yè)務(wù)邊界的內(nèi)部的流程),直到單個業(yè)務(wù)規(guī)則的微觀級別。這個分層的自上而下的方法使BPMS成為正在消失的遺留產(chǎn)品的理想工具。企業(yè)級流程可以觸發(fā)并執(zhí)行子流程,依此類推。很明顯這個自上而下的方法推動著遞增式改變而不是“宇宙大爆炸式”。
Gregor Hohpe 和 Bobby Woolf(見 Enterprise Integration Patterns)的結(jié)論是:
業(yè)務(wù)流程組件將一系列的服務(wù)結(jié)合到一個邏輯單元,該單元和其他這樣單元通過消息傳送以實現(xiàn)高度的可伸縮、高彈性的邏輯和數(shù)據(jù)流。流程、對象和交互模式到業(yè)務(wù)流程組件的合并是將來的事情。
圖2提供了一個業(yè)務(wù)流程的分層視圖以及每層所涉及的相關(guān)設(shè)計模式。啟動一個業(yè)務(wù)流程始于參與者、真人(該組織的內(nèi)部或外部的人員)或者一個系統(tǒng)所觸發(fā)的業(yè)務(wù)事件。一個業(yè)務(wù)流程含有動態(tài)和靜態(tài)部分。
動態(tài)部分設(shè)計使用一個IDE內(nèi)的拖放機制,并通過控制流語言和消息傳送/連接點(包括<e>AL、遺留適配器和Web服務(wù))來封裝。該控制流軟件具有發(fā)散性,這使領(lǐng)域?qū)<液驮O(shè)計建模人員只需單擊一個按鈕,就可以對其進行更改和部署。消息是使用抽象和具體類實現(xiàn)的。具體類將依賴于協(xié)議的實現(xiàn)細節(jié)從控制流中隱藏了起來。
靜態(tài)層含有通常的幾個方面:業(yè)務(wù)服務(wù)、業(yè)務(wù)邏輯和數(shù)據(jù)。業(yè)務(wù)流程中的數(shù)據(jù)有兩個位置:在協(xié)議消息和業(yè)務(wù)內(nèi)容的交換中,和持久存儲堆棧和其他業(yè)務(wù)-流程元數(shù)據(jù)存儲庫的底部。為限制任何的RDBMS建模觀念,我想起了Graham的來自面向?qū)ο蠓椒ǎ?/i>Object-Oriented Methods): 原理和實踐(Principles and Practice)的數(shù)據(jù)視圖:“我堅信在受過傳統(tǒng)關(guān)系型數(shù)據(jù)庫系統(tǒng)教育的或者有這方面經(jīng)驗的一些人員的手中,數(shù)據(jù)驅(qū)動方法是危險的”。
BPEL4WS只是根據(jù)Web服務(wù)論述了消息傳送。與之相反,BEA的WebLogic Platform 8.1巧妙地使任何可想像的實體作為一個控件進行封裝,并暴露出可用作連接點的方法調(diào)用。通過自省,它甚至可以暴露出內(nèi)部方法作為“直接”連接點。在下一篇文章中我將討論控件的更多功能。
業(yè)務(wù)流程設(shè)計模式
很明顯,業(yè)務(wù)流程的動態(tài)層創(chuàng)建了業(yè)務(wù)流程模式的基礎(chǔ):將工作流和Web服務(wù)/消息傳送模式的結(jié)合。此外,作為OEM的一個新的品種,特定業(yè)務(wù)垂直的主題專業(yè)知識和技術(shù)的合并,啟動了高度可配置可執(zhí)行業(yè)務(wù)流程的組合和庫的延伸,我們將見證政策模式或最佳實踐業(yè)務(wù)流程的出現(xiàn)。
它們也將解決立法問題,如愛國法案(Patriot Act)和Sarbanes-Oxley、解釋最佳實踐、復雜的和充滿政治色彩的組織間引用數(shù)據(jù)問題、風險管理、數(shù)據(jù)緩沖策略和網(wǎng)格計算的SLA。
考慮一下引用數(shù)據(jù)問題:一份Tower引用數(shù)據(jù)報告告訴我們(1)組織每年花費320萬美元于數(shù)據(jù)引用;(2)有48%的受訪組織透露引用數(shù)據(jù)包含在超過10個系統(tǒng)中,8%的受訪組織說引用數(shù)據(jù)包含在令人驚訝的150個或更多的系統(tǒng)中;(3)劣質(zhì)引用數(shù)據(jù)導致30%的業(yè)務(wù)失敗;和(4)同樣的Tower報告透露人工輸入和有錯誤傾向的人工維護仍然是一個普遍的實踐。我還需要繼續(xù)說嗎?您已經(jīng)明白是什么意思了。傳統(tǒng)的EAI技術(shù)、數(shù)據(jù)復制以及企業(yè)級數(shù)據(jù)標準化的幼稚觀念不僅限制了成功,而且實際上將問題放大了,因為它會在整個企業(yè)范圍內(nèi)復制壞了的、不可靠的和沖突的數(shù)據(jù)。
但是基于BPMS的解決方案是如何可以解決這么大的一個問題呢?完整的答案和策略方法可以占滿BPM實踐指南的一章或兩章,或者是一個額度為百萬級的項目。不用給出大多的細節(jié),這里給出該方法的一些描述:對一塊具有與之相關(guān)聯(lián)的許多屬性引用數(shù)據(jù)進行可視化,比如一個大約為600的數(shù)量級。暗含的假定是企業(yè)內(nèi)部的不同組織對不同的屬性段或簇具有第一寫作權(quán);因此,按照主要的LOB用戶所有者將屬性分為主要的簇,比如6個域,每一個含有大約100個屬性。最后,對每一個域而言,設(shè)計和實現(xiàn)流程可管理每個屬性子集的生命周期,并包含該簇的生命周期和批準的政策(見圖3)。
圖3
換句話說,拿部門所有權(quán)、過程以及策略并在BPMS中實現(xiàn)之。這就是所有的BPM,對嗎?可執(zhí)行進程。該問題的核心現(xiàn)在是一個成功解決方案的關(guān)鍵。最后但并非最不重要的,您已經(jīng)解決了另一個和企業(yè)集成有關(guān)的具有挑戰(zhàn)性的問題:公司治理和技術(shù)解決方案的所有權(quán)。
學術(shù)團體已經(jīng)開發(fā)出了一組20個基本模式來準確定義所有主要的工作流模式。然后工作流可以依據(jù)已建立的模式進行測定。這些被分為6個主要種類:(1)基本控制流模式,(2)結(jié)構(gòu)化模式,(3)基于狀態(tài)的模式,(4)高級分支和同步模式,(5)取消模式,和(6)多實例模式。
1. 基本控制流模式是(a)順序,(b)并行分支,(c)同步,(d)互斥選擇,和(e)簡單合并。
2. 結(jié)構(gòu)化模式是(a)任意循環(huán)和(b)隱式中止。
3. 基于狀態(tài)的模式是(a)延期選擇(b)交叉存取并行路由選擇,和(c)里程碑。
4. 高級分支模式是(a)多重選擇,(b)同步合并,(c)多重合并,和(d)識別器。
5. 取消模式是(a)取消活動和(b)取消案例。
6. 多實例模式是(a)不帶同步的多實例,(b)具有先驗設(shè)計時知識的多實例,(c)具有先驗運行時知識的多實例,(e)不帶先驗設(shè)計時知識的多實例。
Eiendhoven 大學的Wil van der Aalst通過一個示例流程詳細描述了以上的一些模式。
模式3的(b)、模式5的(a)和(b)以及所有的模式6都需要消息傳送和Web服務(wù)模式。這些模式可以分為以下類別:服務(wù)訪問和配置模式包括包裝器外觀、組件配置器以及截取器。事件處理模式,包括反應(yīng)器、前攝器和接受器-連接器以及并發(fā)模式,包括活動對象、監(jiān)控對象以及領(lǐng)導者/追隨者架構(gòu)模式。Douglas Schmidt等在Pattern-oriented Software Architecture (第2卷): Patterns for Concurrent and Networked Objects 一文中對以上模式進行了很好的描述。Martin Fowler等的Addison Wesley Signature Series 也是連接性模式的另外一個好的來源。
BEA WebLogic Platform 8.1 去除了低級實現(xiàn)的需求。然而,必須認識到由于BPM實際上是憑借自身的實力成為一個編程范例的,制作意大利面條流程的前景和充滿GoTo的基本意大利面條一樣真實。合適的設(shè)計是我們強烈推薦的。
結(jié)束語
在本文中,我描述了建模背后的推理、對模型進行建模的必要性以及BPM標準前沿的當前狀態(tài)。我描述了BPMS如何提供一個自上而下的遞增式的方法以統(tǒng)一企業(yè)內(nèi)部所有的知識領(lǐng)域,并介紹了用于解決企業(yè)引用數(shù)據(jù)難題的一個高級最佳實踐方法。最后,我對工作流和連接模式進行了總結(jié)。
在本系列的最后一篇文章中,我將描述獲取保險報價業(yè)務(wù)案例并介紹BMP建模選項。然后我將使用本文介紹的一些工作流和連接性模式用BEA的WebLogic Platform 8.1實現(xiàn)一個解決方案,然后討論一些仍舊存在的限制和可能的解決方案。
屆時:流程無處不在。您能看到它們嗎?
參考文獻
l Engberg, U. and Nielsen, M. (1986). "A calculus of communicating systems with label-passing." Report DAIMI PB-208, Computer Science Department, University of Aarhus, Denmark.
l Milner, R.; Parrow, J.; and Walker, D. (1992). "A calculus of mobile processes, Parts I and II". Information and Computation, 100, 1, pp 1-77.
l van der Aalst, W. "Classical Petri nets: The basic model." http://tmitwww.tm.tue.nl/staff/wvdaalst/Courses/pm/pm2classicalpn.pdf
l ter Hofstede, A. (QUT); Kiepuszewski, B. (QUT); Barros, A. (UQ); Ommert, O.(EUT); Pijpers, T. (ATOS); et al. Workflow patterns. www.tm.tue.nl/it/research/patterns/
l Booch, G.; Rumbaugh, J.; and Jacobson, I. (1999). The Unified Modeling Language User Guide. Addison-Wesley.
l Hohpe, G. and Woolf, B. (2004). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley.
l BPEL4WS, Business Process Execution Language for Web Services. BEA, IBM, Microsoft.
l BPML, (2002). Business Process Modeling Language. Bpmi.org.
l Reference Data, (2001) "The Key to Quality STP and T+1." A Tower Reuters CAPCO report.
l Graham, I. (2000). Object-Oriented Methods: Principles and Practice. Addison-Wesley.
關(guān)于作者
如同我們前幾期中所討論的那樣,JTA樣式的事務(wù)處理提供了一種將多個數(shù)據(jù)更新捆綁到一起的方法,這樣一來,不管它成功與否,應(yīng)用邏輯都將安全運行,即便中途存在技術(shù)性問題也是如此。
本文是系列文章中的最后一篇,文中我將把最初兩篇(WLDJ,第三卷,第 4-5期)中所討論的一些BPM技術(shù)應(yīng)用到一個業(yè)務(wù)案例中去,目的是設(shè)計一個基于SOA的健壯的解決方案。特別地,我要(1)將該業(yè)務(wù)案例定義為一組高級策略,以及(2)運用業(yè)務(wù)流程優(yōu)化技術(shù)獲得一個高效的業(yè)務(wù)流程模型,并利用它封裝實際問題。該業(yè)務(wù)模型將包括啟動流程的業(yè)務(wù)事件、高級的處理線程以及這些處理線程如何分解為低級的企業(yè)級業(yè)務(wù)服務(wù)。然后,我還會討論針對建立概念驗證(POC)的各種結(jié)構(gòu)化的設(shè)計選項。但是首先,我要介紹一下BEA WebLogic Workshop 8.1的新的IDE編程范式,尤其是流程集成框架如何為建立SOA Web 服務(wù)集成應(yīng)用程序提供可靠的編程環(huán)境。
從數(shù)據(jù)庫客戶端/服務(wù)器工具到分布式應(yīng)用程序集成平臺
BEA新的IDE(集成開發(fā)環(huán)境))將為設(shè)計和部署J2EE應(yīng)用程序提供一個功能強大、無縫且完善的工具。如同MS Acess和PowerBuilder早在20世紀90年代用客戶端/服務(wù)器模型普及了任務(wù)關(guān)鍵型應(yīng)用程序的開發(fā),而無需深入了解RDBMS或TCP-IP通信的專業(yè)知識一樣,Workshop通過使用簡單的概念如控件、事件、方法和屬性來隱藏了面向?qū)ο螅?/span>OO)和J2EE的復雜性,而不會犧牲應(yīng)用程序的表達力和質(zhì)量??梢暬丶情_發(fā)人員和應(yīng)用程序基礎(chǔ)結(jié)構(gòu)之間的接口層。Workshop將可視化控件轉(zhuǎn)換成J2EE組件,并且,開發(fā)人員總是可以在需要時編寫JAVA代碼。
開發(fā)人員可以用Java Page Flow (JPF)創(chuàng)建復雜的基于Web的用戶接口。Workshop使用Struts,它是一個用接口工具綁定數(shù)據(jù)項的Model-View-Controller結(jié)構(gòu)的開放源代碼實現(xiàn)。這就是現(xiàn)在所謂的MVC1結(jié)構(gòu)化模式,與MVC2相反,它更類似于最初的Smalltalk模式,Smalltalk模式從業(yè)務(wù)模型中分離數(shù)據(jù)表示和用戶控制。在這里值得一提的是Barracuda是MVC1的模式的另一種開放源代碼實現(xiàn)(不是標準實現(xiàn)),它在簡單性方面接近Visual Studio .NET IDE提供的基于事件的UI。但本文不過多涉及它們之間的比較,我會在別的時機給予對比。Web 服務(wù)連接是作為Java Web 服務(wù)(JWS)文件而建立起來的,該文件是帶有簡單Javadoc注解的用于訪問Web服務(wù)功能的標準Java文件。開發(fā)人員只有在他希望的情況下才去關(guān)注SOAP協(xié)議、WSDL 以及XML綁定。
Java Control是WebLogic Workshop 8.1中惟一最為重要的概念。相當大部分的編程資源可以作為一個可視化的Java Control來處理。諸如一個遺流系統(tǒng)或是一個Web服務(wù),一個自定義Java對象或一個EJB,一個外部的資源或者一個實現(xiàn)一段專有商業(yè)邏輯的工作流,一個異步或雙向的消息有狀態(tài)或無狀態(tài)會話,都能表示為控件。開發(fā)人員通過處理事件和設(shè)置屬性來和控件進行交互,也可通過編寫自定義控件來擴展內(nèi)置控件。
業(yè)務(wù)案例
我們虛構(gòu)的但實際又很真實的汽車保險公司(Car Insurance Company ,CIC)面臨著競爭壓力、較低的利潤以及較高的遺留系統(tǒng)的運行和維護成本。存在的一些問題包括:客戶要求更短的決策時間;客戶的保險申請表在從前臺(front office)到中臺(middle office)的轉(zhuǎn)移過程中會出現(xiàn)錯誤放置;從遺留系統(tǒng)和龐大的數(shù)據(jù)倉庫中獲取信息仍具有一定難度;請求信用信息以及機動車輛記錄也是耗費時間且難以跟蹤的;最后,保險商來去匆匆使得通信需求不斷變化。
考慮到這些挑戰(zhàn),董事會投票通過了一些新的策略:(1)允許潛在客戶通過Web獲得時間為60秒的響應(yīng),以此建立電子商務(wù);(2)簡化信用核查過程,充分利用機動車部(DMV)剛剛部署完畢的新的安全Web服務(wù)接口;而且(3)通過建立一個B2B合作社區(qū),成為保險業(yè)界的領(lǐng)頭羊。如果項目預期目標得以實現(xiàn),董事會然后會決定淘汰使用一些過時的遺留系統(tǒng)。但是在這一階段,董事會強烈建議最充分利用所有的遺留系統(tǒng)和現(xiàn)有的數(shù)據(jù)。
業(yè)務(wù)規(guī)則
用戶訪問網(wǎng)站,輸入汽車類型、購買日期、每年行駛的里程(英里)、姓名、性別以及社會保險號。為了簡單起見,汽車類型分類緊湊型(compact)、家用型(sedan)和運動型多功能車(SUV),所對應(yīng)的基本保費分別是200、250和400。每年行駛的里程數(shù)產(chǎn)生一個里程因數(shù)(MF):每年行駛里程如果不到8,000英里,則MF值為1;如果是在8,000 到 20,000之間,MF值就是2;如果超過了20,000,那么MF值就是3。性別和年齡也產(chǎn)生一個性別年齡因數(shù)(SAF):對于二十四歲以下的男性,SAF值是4,二十五歲以下的女性,SAF值是3,二十四歲以上的男性和二十四歲到三十四歲之間的女性,SAF的值是2,三十四歲以上的女性,SAF值是1。保險公司使用DMV最新級別的安全Web服務(wù)來抽取駕駛員的記錄,使用基于多年收集的數(shù)據(jù)的專有方法,一個遺留的后臺應(yīng)用程序?qū)?/span>DMV進行評分并產(chǎn)生駕駛員歷史因數(shù)(driver profile factor, DPF),DPF是一個介于1和4的數(shù)字。最后的保費的計算方法是,基礎(chǔ)保費+加權(quán)因數(shù)*50,其中加權(quán)因數(shù)(WF)=(3*MF+4*SAF+4*DPF)/10。
如果加權(quán)因數(shù)WF小于20,代理商可以生成一個報價并返回給用戶,否則,需要發(fā)送用戶對報價的請求以承保。如果可能,保險商希望使用相同的方法來計算保費。然后用戶可以決定是否要申請該保險項目,在這種情況下用戶只需提交支付信息等。其余的過程就不在POC的范圍之內(nèi)了。
很明顯所有的這些規(guī)則都是不穩(wěn)定的而且會經(jīng)常變化和調(diào)整。它們中的大部分在不同復雜程度的多種系統(tǒng)中都得到了實現(xiàn),從電子表格到COBOL工作簿。報價請求的完成也需要人為的干預和協(xié)調(diào)。
這時應(yīng)考慮流程而不是功能。一個流程以一個預定義業(yè)務(wù)事件開始,并且是一個企業(yè)所做(而不是如何來做)的一系列工作,目標是產(chǎn)生與管理層和企業(yè)宗旨中設(shè)定的企業(yè)策略和企業(yè)遠景規(guī)劃相一致的結(jié)果。一個事件可以觸發(fā)一個或多個處理線程,并且可以位于企業(yè)的內(nèi)部或外部。賺錢事件通常是外部的,且在某些方式上與供應(yīng)鏈相關(guān)聯(lián)。事件可以是實際的或暫時的。結(jié)果可在防火墻的內(nèi)部或外部感覺到,而防火墻是虛構(gòu)的企業(yè)保護屏障。一個好的一致的命名規(guī)則始終很重要:一個動詞加上一個業(yè)務(wù)流程對象,即Get DMV records 和 Calculate Premiums;一個行動者加上一個動詞再加上一個實際事件的對象,即Customer Requests Quote;和一個臨時事件的“時間快照”定義,即Sixty Second Response 或 9:00 AM Consolidation。
很明顯,BPM設(shè)計和開發(fā)方法的優(yōu)點之一在于可視化工作流方面。然而,WebLogic Workshop 沒有開發(fā)“泳道”類型圖表的工具。處理設(shè)計階段不得不在紙上進行,或者使用類似Visio的繪圖工具或帶有設(shè)計功能的BPM工具。后一種方法會帶來兩個大的問題:
1. 導入/導出流程的負擔。
2. 更改時的可跟蹤性問題。Workshop 在其IDE的設(shè)計區(qū)內(nèi)甚至不允許同時查看兩個或更多個流程。這樣一個簡單的解決方案使得交互式設(shè)計會話更容易。
在本文中,對于兩級流程分解的第一級,我使用了OpenOffice 繪圖包。隨著流程的逐步深入并接近企業(yè)業(yè)務(wù)服務(wù)(Enterprise Business Services, EBS),我將開始在Workshop Studio中進行設(shè)計。我能夠在一個方框中將活動集合起來,并用描述性的名稱對其進行命名,也可隨意折疊。第一步是開發(fā)一個高級流程圖(見圖1),其中含有啟動業(yè)務(wù)事件的行動者或參與者,以及對子流程和活動的粗粒度分解。本圖表很有用。它是一個基線通信,并用作“稻草人”; 然而,它也有一個弱點。它遺漏了這么一個事實,即雙方之間的流程有兩個視圖。流程正如含有內(nèi)部和私有實現(xiàn)以及一個外部公共接口的對象。當然,這是全部相關(guān)并取決于您位于流程的哪一端。在本例下,是按照CIC的觀點分類的。圖2含有分布在“泳道”中的流程。從左至右共有5個流程: 請求報價公共流程、請求報價私有流程、處理報價私有流程、承保私有流程以及承保公共流程。
圖1
設(shè)計決策和架構(gòu)選擇
現(xiàn)在,您可能會認為已經(jīng)很好地理解了UI的構(gòu)建并認為這只是一個簡單的問題。不妨再想一下。選項之多就如同問題的類型一樣,而且每個選項都有其自己所面臨的挑戰(zhàn)。目前,我將討論兩個問題:事件通信和建立widget。
圖2
事件通信
用戶事件要么需要啟動一個進程并與之交互,要么附加到一個長時間運行的監(jiān)控進程。作為響應(yīng),該進程產(chǎn)生一個專為某特定的客戶提供服務(wù)的進程線程的實例,有點像一個TCP/IP服務(wù)器在監(jiān)聽一個端口,當有客戶發(fā)出請求時生成一個新的進程線程,并通過一個專用套接字簡化與新客戶的交互。但是用一個請求和應(yīng)答協(xié)議如何做到這一點呢?答案是不能,至少是不能用普通的和有效的方式實現(xiàn)。
作為受業(yè)務(wù)流程驅(qū)動的企業(yè)核心的業(yè)務(wù)事件和Web是不一致的。在這里不足為奇,http從來不被認為是一個成熟編程范式的替代品,而只是一個用于信息、圖片、文本等交換的純粹的協(xié)議。那么現(xiàn)在如何呢?在無狀態(tài)交互情況下不存在實際的問題。Web 服務(wù)可以封裝和簡化同步通信。在本質(zhì)上是異步的有狀態(tài)交互會話式Web服務(wù)情況下,它們可以在多用戶呼入過程中保持狀態(tài)。編程人員為會話式的Web 服務(wù)增加了回調(diào)功能。Web服務(wù)完成其服務(wù)后,客戶端代碼中的回調(diào)信號被激活。這是一個很棒的決不拖泥帶水的解決方案;然而,有些客戶端并不能含有回調(diào)。例如,使用http的Web頁面交互不能安裝回調(diào)。所以我們回到了起點,這就是大約30年前的輪詢。是的,輪詢。Web服務(wù)必須實現(xiàn)如areYouDoneYet ()的一個方法,返一個布爾值true或false。當服務(wù)完成后,將一個狀態(tài)變量從false更新為true。客戶代碼將一直輪詢或執(zhí)行areYouDoneYet ()方法,直到返回值為true。然后客戶可以調(diào)用Web服務(wù)的getResults ()方法得到結(jié)果。
構(gòu)建Widget
乍一看,JPF類似于流程流,但除了文字處理外二者沒有任何的共同之處。JPF管理http頁面之間的導航。Workshop 提供建立復雜UI的widget豐富的環(huán)境。特別強大的是Form Beans的使用,它管理表單數(shù)據(jù)的綁定、存儲和有效性驗證。JPF 通過會話式的Web服務(wù)與系統(tǒng)其他部分進行通信。Web服務(wù)使用了一個流程控件來執(zhí)行報價流程這一私有流程。由于 JPF 不能含有回調(diào)機制,所以Web 服務(wù)采用了上述的輪詢技術(shù)。此外,Web服務(wù)嵌入了60秒的計時器來監(jiān)控來自系統(tǒng)其他部分的響應(yīng)信號(見圖3)。
圖3
BEA WebLogic Integrator 提供了一個供應(yīng)用程序和流程容器交互的編程接口。作為流程的一部分,一個活動可能需要人為交互。Worklist 是一個簡單的基于HTTP的測試工具,它支持人為交互。它是一個工作隊列。很明顯,更好的設(shè)計是定義您自己的客戶端接口并使用Worklist Client API鏈接到流程引擎,但是建立這樣一個接口的細節(jié)超出了本文所討論的范圍。Worklist 提供了一個測試保險流程有效性的簡單方案。Gregor Hohpe 和 Bobby Woolf 在Enterprise Integration Patterns 中用了一章的篇幅描述了一個Loan Broker例子,非常類似于Underwriters B2B 生態(tài)系統(tǒng)的概念。它們特別描述了三種不同的模型:Fixed addressing、Distribution和Auction。使用Web服務(wù)、一組URL和消息通道的組合,可以建立一個完全可擴展的解決方案。
BPM 作為編程工具
在我以前的文章中,我曾經(jīng)說過,大多數(shù)的流程引擎都是作為一種狀態(tài)機(state machine)來實現(xiàn)的,同時Petri網(wǎng)已走向Turing完善。然后您可以證明用任何語言編寫的任何程序也都可以在BPM中實現(xiàn)。很明顯,某些語言在解決某些特定問題方面會優(yōu)于另外一些語言。在實現(xiàn)集成層或問題的不穩(wěn)定和快速變化方面,BPM語言是自然的選擇。
業(yè)務(wù)規(guī)則成為BPM實現(xiàn)的一個理想的候選。為了在此處說明清楚,我并不是指具有推理機(inference engine)等的人工智能專家系統(tǒng)意義上的業(yè)務(wù)規(guī)則。我指的是上述有關(guān)因數(shù)計算和保費意義上的業(yè)務(wù)規(guī)則。然而,我必須承認使用BPM工作流創(chuàng)建一個泛化的專家shell將是一個十分有趣的練習。為了說明這一點,我已經(jīng)將我們的商業(yè)規(guī)則實現(xiàn)為一個流程: computeFactors。我為三個不同的因數(shù)實現(xiàn)了一個平行的拆分。實際上,平行分支在邏輯上是并行的。WebLogic Server對分支的執(zhí)行進行了串行化。當網(wǎng)格計算和高性能計算普及時,真正的并行化可能只是附加的選項。目前,只有通過如Powerllel等專業(yè)公司的支持網(wǎng)格計算(grid-enabling)的軟件或Platform和Sun的Distributed Resource Manager (DRM)系統(tǒng)來使用這樣的選項。第三分支執(zhí)行可返回DMV因數(shù)的DMV Web服務(wù)。過程是:假設(shè)該Web服務(wù)已在Internet上提供,我將瀏覽器指向它并將WSDL文件下載我的本地磁盤上。然后,在 Workshop 中我瀏覽到該WSDL位置,右鍵單擊,并選擇Generate JCX from WSDL。得到的JCX 文件是一個Web服務(wù)控件,現(xiàn)在可以將該控件綁定到一個流程項。
結(jié)束語
WebLogic Platform 為基于SOA方案的部署提供了健壯的產(chǎn)品架構(gòu)。它提供了一個可實現(xiàn)企業(yè)級分布式方案的開發(fā)、部署和操作的高效環(huán)境??梢暬妒胶芎玫仉[藏了J2EE和面向?qū)ο蟮膹碗s性。我發(fā)現(xiàn),將幾乎所有的可用資源變成一個控件(一個帶有一致接口的計算組件),就是其最強大的功能??丶砸环N非常一致且可重復的方式利用了對象重用的功能,并使解決方案可根據(jù)不斷變化著的靈活企業(yè)進行輕松擴展。
流程是統(tǒng)一的構(gòu)造,可用于所有的開發(fā)階段。流程為通往建模的“巴別塔”駕起了一座橋梁。業(yè)務(wù)和技術(shù)現(xiàn)在可以用相同的語言。在宏觀層面上,流程是實現(xiàn)集成任務(wù)的自然之選。在微觀層面上,流程是實現(xiàn)解決方案的易變方面(如業(yè)務(wù)規(guī)則)的理想之地。實際上,BPM是頭等“計算公民”。
WebLogic Platform實現(xiàn)了一個綜合的BPM環(huán)境。然而,BEA并沒有提供BPM方案的一個關(guān)鍵組件:一個純粹的業(yè)務(wù)流程設(shè)計和建模環(huán)境。同樣地,很少業(yè)務(wù)分析師是對象建模人員,很少業(yè)務(wù)分析師會熟悉BEA的業(yè)務(wù)集成環(huán)境。但是鑒于建模領(lǐng)域內(nèi)部所發(fā)生的一系列大的事件如Rational Rose 和 TogetherSoft 的收購、Microsoft 對UML建模再次感興趣以及專注 BPM競爭對手不斷的成功,BEA正在致力于BPM for Business Analysts 的無所不包的下一個版本,它將可能和UML兼容!
最后,面向服務(wù)的架構(gòu)已經(jīng)成為現(xiàn)代分布式系統(tǒng)的通用結(jié)構(gòu)。普遍采用Web 服務(wù)作為連接技術(shù)極大地促進了協(xié)作。很明顯本領(lǐng)域還將有更大的發(fā)展。畢竟,問題積累的速度快于我們解答問題的速度。一些問題涉及到關(guān)鍵領(lǐng)域如安全和連網(wǎng)。Paul A. Watson 在其最近的一篇文章“Slipping In The Window: TCP Reset Attacks”中對作為我們技術(shù)基礎(chǔ)的TCP/IP 提出了置疑。如果有任何的疑問,我們對垃圾郵件的戰(zhàn)爭就宣告失敗,至少現(xiàn)在是這樣。我們可以靜止不動;我們從來沒有那樣過。IT商品化的時代還沒有到來。我預言在未來的2到3年中,能夠解決這些問題的新技術(shù)和技術(shù)革新將催生出下一代的分布式系統(tǒng),它將有更加成熟的、動態(tài)的和適應(yīng)性強的架構(gòu)范式。
屆時,流程將無處不在。您能看到它們嗎?
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面