SOA 編程模型系列
對于任何獨立程序員來(lái)說(shuō),有效的掌握和應用飛速增長(cháng)的軟件技術(shù)、實(shí)踐、工具和平臺,變得越來(lái)越困難,當然更不用說(shuō)非程序員了。然而,如果業(yè)務(wù)流程轉換能夠成功進(jìn)行,很多的非程序員就可以使用現有的 IT 資產(chǎn)來(lái)進(jìn)行他們的工作,而不用去學(xué)習繁瑣的底層技術(shù)細節。本文描述了一個(gè)新的面向服務(wù)體系結構(SOA)編程模型,該模型實(shí)現了業(yè)務(wù)關(guān)系的分離,因此企業(yè)中具備不同技術(shù)水平和工作角色的人,即使不是專(zhuān)業(yè)的 IT 人員,也可以在軟件開(kāi)發(fā)生命周期每個(gè)階段創(chuàng )建和使用 IT 資產(chǎn)。這可以顯著(zhù)提高隨需應變企業(yè)的業(yè)務(wù)靈活性。
引言
IBM 產(chǎn)品逐漸應用了 SOA 和編程模型。程序員構建服務(wù)、使用服務(wù),并且開(kāi)發(fā)聚集服務(wù)的解決方案。我們在這里使用"程序員(programmer)"這個(gè)泛稱(chēng),因為 SOA 編程模型的一個(gè)關(guān)鍵方面是將"編程"的概念擴展到非傳統開(kāi)發(fā)人員的工作角色和技能,比如業(yè)務(wù)分析員和腳本語(yǔ)言用戶(hù)。
大多數關(guān)于 Web 服務(wù)的文章主要集中在服務(wù)接口和這些接口的使用方面。為了補充接口標準和最佳實(shí)踐,IBM 引入了一個(gè)編程模型,來(lái)實(shí)現服務(wù)并將它們組合為解決方案。擴展 IBM 軟件平臺的范圍,使之能夠被更多的用戶(hù)團體使用 -- 包括非傳統的開(kāi)發(fā)人員 -- 這個(gè)模型提供了新的組件類(lèi)型與用戶(hù)的角色、目標、技能和概念框架相匹配。這些組件類(lèi)型使更直觀(guān)的開(kāi)發(fā)工具可以使用。另一個(gè)主要的主題是通過(guò)編程模型特性和功能的逐步透明化來(lái)增強可使用性。
我們介紹了實(shí)現這些目標的一些新的編程模型元素。我們介紹了如何利用它們來(lái)使您選擇、開(kāi)發(fā)、建議或管理的軟件能夠更加容易的開(kāi)發(fā)、重用和消費。將軟件構造為服務(wù)對于按需的企業(yè)來(lái)說(shuō)更加有價(jià)值,因為不具備太多技能的開(kāi)發(fā)人員可以將其"接入"到解決方案中,或者編入一個(gè)業(yè)務(wù)流程編排流中來(lái)滿(mǎn)足快速變更的業(yè)務(wù)需求。不管你是大型企業(yè)或者小型業(yè)務(wù)的開(kāi)發(fā)人員、獨立軟件供應商(ISV),還是應用程序提供者或者中間件供應商,你都可以通過(guò)這種方式構造你的軟件,從而從中受益。那么,讓我們立即開(kāi)始應用 SOA 原理。
SOA 編程模型的亮點(diǎn)
讓我們首先重點(diǎn)介紹 SOA 編程模型的幾個(gè)主要特性。
服務(wù)數據對象(SDO)是 IBM SOA 中的一個(gè)基礎概念。SDO 大大提高了開(kāi)發(fā)人員的生產(chǎn)力,并且將你從如何訪(fǎng)問(wèn)特定后端數據源、應用程序和服務(wù)的技術(shù)細節中解脫出來(lái)。它們提供了簡(jiǎn)化的抽象,使程序員可以更多的集中在業(yè)務(wù)邏輯上。SDO 還提供了統一的消息表示來(lái)與服務(wù)交互,淘汰了用于數據表示的復雜技術(shù)迷宮,僅僅訪(fǎng)問(wèn)單個(gè)統一模型。
SOA 編程模型同樣需要統一的范型來(lái)創(chuàng )建和訪(fǎng)問(wèn)業(yè)務(wù)邏輯。為了易于使用,服務(wù)應該隱藏實(shí)現技術(shù)之間的差別,并應該建立在比現有編程結構(比如 Enterprise Java?Bean(EJB))更高級別的抽象上。服務(wù)可以通過(guò)組裝到模塊(這些模塊可以組成解決方案)中的組件來(lái)實(shí)現。通過(guò)組件公開(kāi)的服務(wù)可以使用可定位的接口來(lái)調用。您可以使用 Web 服務(wù)描述語(yǔ)言(WSDL)、Java 或其他語(yǔ)言來(lái)描述接口。這個(gè)實(shí)現類(lèi)型可以有對所需服務(wù)的待定引用,在將組件結合在一起執行之前,這些服務(wù)是滿(mǎn)足需求的。
這個(gè)編程模型還引入了良好定義的組件類(lèi)型,對程序員開(kāi)發(fā)和部署到解決方案中的常用構件建模。例子包括"無(wú)格式舊 Java 對象"、業(yè)務(wù)流程執行語(yǔ)言(BPEL)流程、結構化查詢(xún)語(yǔ)言(SQL)服務(wù)、Adaptive Business Objects、通過(guò) Java 連接器體系結構(J2C)資源適配器訪(fǎng)問(wèn)的 CICS?程序、使用 SAP 業(yè)務(wù)應用程序編程接口的應用程序、Java 2 Enterprise Edition(J2EE)無(wú)狀態(tài)會(huì )話(huà) bean 和 MQSeries? 應用程序。
企業(yè)服務(wù)總線(xiàn)是多協(xié)議結構的一個(gè)關(guān)鍵角色,將服務(wù)組件編成無(wú)縫的交互,通過(guò)在消息路徑中加入被稱(chēng)為中介的特別組件,來(lái)代理服務(wù)間的交互,而不用更改現有的端點(diǎn),從而允許在核心級別上處理企業(yè)關(guān)注的內容 -- 比如審核、日志、路由、不匹配接口的適配、等價(jià)組件的增量替換、安全等。
新的流程語(yǔ)言縮小了 IT 概念和業(yè)務(wù)構件之間的間隙。很重要的一個(gè)是 BPEL。雖然流程可以通過(guò)業(yè)務(wù)分析員引入圖形化工具來(lái)定義,但它也是一個(gè)可執行程序。流程在按需業(yè)務(wù)轉換中占有重要的地位,例如為擴展價(jià)值鏈描述長(cháng)時(shí)間運行的可執行流程。通過(guò)擴展價(jià)值鏈,我們可以跨越多個(gè)供應商和 IT 域來(lái)進(jìn)行業(yè)務(wù)安排,比如一個(gè)零售商和他的多個(gè)獨立的供應商,保險公司及其眾多的第三方理賠員,IT 外購狀況等。
業(yè)務(wù)狀態(tài)機(business state machine)是業(yè)務(wù)分析師可以通過(guò)圖形工具創(chuàng )建流程的另一個(gè)編程框架,并且在流程設計引擎中執行。狀態(tài)機可以表示業(yè)務(wù)構件 -- 比如采購單、保險索賠等 -- 這些轉換通過(guò)一些良好定義的狀態(tài)來(lái)響應特定的生命周期"事件"。
需要重用的組件可以封裝為具有可變店(points of variability)的模板,可以在放入解決方案中時(shí)進(jìn)行設計。這種適配成為我們的編程模型的第一部分,同時(shí)結合規則語(yǔ)言和相關(guān)的工具,為新型用戶(hù)提供定制的能力。
另一個(gè)創(chuàng )新領(lǐng)域是新的解決方案模型,它讓部署者、管理者和其它業(yè)務(wù)用戶(hù)可以將組件組裝成解決方案。在開(kāi)發(fā)的時(shí)候,你可以將服務(wù)實(shí)現與托管服務(wù)的拓撲(系統架構師建模的部署拓撲)關(guān)聯(lián)在一起。模型捕捉的系統需求和環(huán)境假設在早期的實(shí)現中進(jìn)行校驗,降低了應用程序生命周期的費用,并且極大的提高了可靠性和可計賬性(accountability)。該模型的特性還包括現有應用程序的后期綁定、數據轉換中介和適配器,可以通過(guò)企業(yè)服務(wù)總線(xiàn)來(lái)實(shí)現面向服務(wù)的交互。
總的來(lái)說(shuō),SOA 編程模型將開(kāi)發(fā)和部署活動(dòng)分割為不同的階段,這些階段可以發(fā)生在不同的時(shí)間,并且可以通過(guò)不同的個(gè)人使用不同的技能來(lái)實(shí)現。這就產(chǎn)生了關(guān)系的分離,使軟件組件可以被重用。它也將軟件體驗劃分為單獨用戶(hù)的業(yè)務(wù)角色、技能和任務(wù)。最終,它使軟件生命周期可以適應按需企業(yè)的需要,因為它們通過(guò)針對業(yè)務(wù)靈活性重新設計 IT 流程來(lái)尋求更高的有效性。
編程模型的概念
編程模型通常是 IBM SOA 和 IBM 產(chǎn)品的核心。它定義了程序員可以構建和使用的概念和抽象。運行時(shí)產(chǎn)品,例如 WebSphere? Application Server,DB2?和 CICS,可以運行或托管編程模型構件。開(kāi)發(fā)工具支持編程模型構件的建模和實(shí)現、組裝到應用程序(解決方案),以及部署到運行時(shí)環(huán)境中。最后,系統管理產(chǎn)品、代理和設備支持對運行時(shí)和它們托管的編程模型構件的管理。
編程模型是什么?雖然目前沒(méi)有公認的一般定義,但我們喜歡將它定義為:
程序員構建的一套部件類(lèi)型。部件類(lèi)型包括多種編程模型構件:超文本標記語(yǔ)言(HTML)文件、數據庫存儲過(guò)程、Java 類(lèi)、可擴展標記語(yǔ)言(XML)Schema 定義、定義 MQSeries 消息的 C 結構,等等。
一系列角色,將具備相似技能和知識的開(kāi)發(fā)和管理人員分組。用這種方式對開(kāi)發(fā)人員分類(lèi)有助于生產(chǎn)適應于角色的工具,使非程序員可以實(shí)現服務(wù)并將服務(wù)組裝為解決方案。業(yè)務(wù)分析人員定義業(yè)務(wù)流程,銷(xiāo)售專(zhuān)家定義顧客分類(lèi)的策略并計算產(chǎn)品折扣。每一種角色包含:
角色所具備的技能。例如,用戶(hù)界面開(kāi)發(fā)人員開(kāi)發(fā)界面,用來(lái)呈現應用程序或者解決方案的功能構件。假設這個(gè)角色了解正在開(kāi)發(fā)的應用程序和它的業(yè)務(wù)目標,充分了解應用程序的用戶(hù)及他們的任務(wù),精通一些用戶(hù)界面設計方法,能夠通過(guò)為每個(gè)任務(wù)選擇恰當的類(lèi)型來(lái)創(chuàng )建易于使用的用戶(hù)接口。
角色交互(消費或者生產(chǎn))所用的部件類(lèi)型和應用程序接口。例如,動(dòng)態(tài)頁(yè)面設計人員 -- 角色 -- 生產(chǎn) JavaServer Page(JSP)并消費 EJB -- 部件類(lèi)型 -- 包裝現有的信息資源和應用程序。
角色使用的工具。例如,Web 開(kāi)發(fā)人員所用的適合于角色的工具是所見(jiàn)即所得的頁(yè)面設計工具,用來(lái)構建動(dòng)態(tài)頁(yè)面,使用與 HTML 和 JSP 標簽庫相關(guān)的控件,并將控件連接到 EJB。
延伸閱讀
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/