控件可以讓開發(fā)人員專注于編寫應(yīng)用程序邏輯和委派基礎(chǔ)性架構(gòu)問題,如異步消息傳送、會話和與遠(yuǎn)程資源的連接。但仍有很多復(fù)雜問題使這些應(yīng)用程序難以
管理。 在本文中,我們將使用內(nèi)建的Weblogic Workshop控件開發(fā)一個基于Web
services的示例應(yīng)用程序,并用它來說明管理面向服務(wù)的應(yīng)用程序的挑戰(zhàn)。最后,我們將演示Confuluent
Software公司如何給開發(fā)人員和IT人員提供可能的Web services管理解決方案,該方案與BEA WebLogic 8.1
Platform集成在一起。
為什么要面向服務(wù)? 很少有應(yīng)用程序還在獨自運行。相反,大多數(shù)應(yīng)用程序經(jīng)常被集成到應(yīng)用程序到應(yīng)用程序互連的復(fù)雜“網(wǎng)絡(luò)”中。這些應(yīng)用程序網(wǎng)絡(luò)通常是完全異構(gòu)的、鏈接不同公司所開發(fā)的應(yīng)用程序、運行在不同的平臺上、以不同的語言實現(xiàn),并且安全保護(hù)也各異。
更糟糕的是,利用現(xiàn)今緊密耦合的集成方法,每個應(yīng)用程序都敏銳地知曉其他應(yīng)用程序的特性。這樣,一個應(yīng)用程序的任何改變將會在整個網(wǎng)絡(luò)中引起一系列的級
聯(lián)變化。出現(xiàn)天文數(shù)字的開發(fā)和維護(hù)費用也不足為奇。同時,管理層會懷疑IT仍否重要,并逐年削減IT預(yù)算——總有一天,這就是緊密耦合的代價。 面向服務(wù)的構(gòu)架(SOA)提供了一個出路。面向服務(wù)的應(yīng)用程序通過利用基于標(biāo)準(zhǔn)的Web services技術(shù)來連接異構(gòu)環(huán)境。通過在應(yīng)用程序間實現(xiàn)松散的耦合,它們消除了變化管理上的惡夢,也就是,改變一個應(yīng)用程序的實現(xiàn)而不會中斷其他應(yīng)用程序。
WebLogic Workshop控件 BEA WebLogic Workshop通過為分布式組件的組裝提供易用的工具,使得構(gòu)建面向服務(wù)的應(yīng)用程序變得很容易,并且方便了在組件間往來的XML消息的長久會話。
在WebLogic
Workshop中,任何應(yīng)用程序的核心構(gòu)建塊是控件??丶秃孟窈唵蔚腏ava組件(具有方法和事件),通過屬性可自定義該組件的行為。控件隱藏了
J2EE底層問題,這些問題包括連接遠(yuǎn)程數(shù)據(jù)庫、Web
services、EJB對象和消息隊列。有了控件,通過設(shè)置屬性,而不是調(diào)用API,就可配置這些外部資源的連接。通過促進(jìn)輕松組裝松散耦合的應(yīng)用程序
組件,控件也為實現(xiàn)面向服務(wù)作出了貢獻(xiàn)。 為了進(jìn)一步增強松散耦合,WebLogicWorkshop 8.1也提供了可視化的編輯器(和XQuery支持),用來建立XML接口和底層Java對象間的映射。 讓我們剖析一個簡單的Web services應(yīng)用程序,看一看WebLogic Workshop是如何消除創(chuàng)建類似應(yīng)用程序的苦惱的。
訂單管理應(yīng)用程序示例 即使實現(xiàn)一個簡單的業(yè)務(wù)場景,例如我們訂單管理Web service示例,也會有大量的技術(shù)復(fù)雜難題:
- Web service必須和給客戶端用戶使用的WSDL定義文件一起部署在服務(wù)器上。
- 該服務(wù)依賴并使用多種后端組件,包括數(shù)據(jù)庫、EJB和其他遠(yuǎn)程Web services。
- 該服務(wù)必須強制按照被調(diào)用操作的次序執(zhí)行。
- 該服務(wù)必須允許多個客戶端并發(fā)調(diào)用。
訂單管理Web服務(wù)的示例顯示了如下操作:
- 用戶能夠檢查未決訂單的狀態(tài):
queryOrderStatus(String inAccountNumber, String inOrderNumber)
- 用戶可以創(chuàng)建一個新訂單:
createOrder(String inAccountNumber, String inOrderNumber)
- 用戶可以提交一個新創(chuàng)建的訂單:
commitOrder(String inAccountNumber, String inOrderNumber)
首先創(chuàng)建訂單,如果創(chuàng)建成功,則提交該訂單。createOrder和commitOrder必須按順序執(zhí)行。對于每個方法的調(diào)用,服務(wù)將會從客戶帳戶
中扣除一定費用。用戶帳戶作為EJB建模。訂單存儲在JDBC兼容的數(shù)據(jù)庫中。對于每一個新創(chuàng)建的訂單,commitOrder將通知遠(yuǎn)程服務(wù)器(通過一
個Web service調(diào)用)。 通過使用BEA WebLogic Workshop,并利用控件這一強大的概念,解決在創(chuàng)建像此類Web service的固有復(fù)雜性問題時是很容易的。圖1顯示了示例服務(wù)的設(shè)計視圖及其所用控件。
 圖1:示例的設(shè)計視圖
首先,在WebLogic Workshop中創(chuàng)建、部署和展示W(wǎng)eb service的過程是很直接的。簡單地創(chuàng)建一個Web
service工程、添加所有的方法、編寫邏輯并放置“Play”按鈕。此外,WebLogic
Workshop自動創(chuàng)建一組Web頁面來測試和運行該Web service(參見清單1)。
清單 1
/** * @common:operation */ public String queryOrderStatus(String inAccountNumber, String inOrderNumber) 然后對后端組件的訪問,如EJB、數(shù)據(jù)庫,或者甚至是遠(yuǎn)程Web services,則只是一個拖放動作(參見清單2)。一旦將使用的組件拖到項目中,它將作為一個對象出現(xiàn)在“代碼視圖”窗格中,并且可以很容易地集成到自定義代碼中。
清單 2
/** * Remote Web services * @common:control */ private service.NotifyOrderServiceControl serviceNotify; 第三,確認(rèn)在WebLogic Workshop中能夠以給定順序調(diào)用各種方法。從Web service所提供的每個操作能被標(biāo)記為會話的一部分。這個標(biāo)記也表明了操作涉及到會話中的哪個部分,這樣強制必須調(diào)用這些操作中的訂單(參見清單3)。
清單 3
/** * Create a new order * @common:operation * @jws:conversation phase="start" */ public void createOrder(String inAccountNumber, String inOrderNumber) 最后,WebLogic Workshop會話能夠為多個用戶保持環(huán)境。會話標(biāo)記指出要在會話期間保持環(huán)境信息(狀態(tài))。使用這種機制,訂單管理服務(wù)能夠同時處理多個客戶端。
部署面向服務(wù)的應(yīng)用程序也帶來了新的挑戰(zhàn) 不幸的是,世上沒有免費的午餐。面向服務(wù)的應(yīng)用程序大幅削減了開發(fā)和維護(hù)的費用,但代價就是管理復(fù)雜度的增加: 監(jiān)視應(yīng)用程序的健康狀況,不僅僅是組件
單管理應(yīng)用程序示例。當(dāng)前的管理工具僅僅監(jiān)視單個組件和組件的低級基礎(chǔ)架構(gòu)?;谶@點,我們沒辦法驗證一個分布式Web
services應(yīng)用程序是否工作正常。如果應(yīng)用程序使用外部Web
services(如合作伙伴的報價服務(wù)),那么只會激化這個問題。由于沒有方法管理外部公司所運行的服務(wù)器,所以常規(guī)的監(jiān)視方法完全沒用了。因此在被憤
怒的經(jīng)理訓(xùn)斥前,您如何檢測正在出現(xiàn)的問題?
不知道去哪里排除故障 一旦你開始每過幾分鐘
就被不高興的銷售副主管所訓(xùn)斥,因為訂單管理應(yīng)用程序出錯了(在季度結(jié)束前兩天),您應(yīng)該到哪里去查找罪魁禍?zhǔn)啄??是提供訪問由制造IT部門所管理的存貨
系統(tǒng)的WebLogic Workshop控件嗎?是這個應(yīng)用程序所依賴的眾多Web
services之一嗎?更糟的是,您怎么知道應(yīng)用程序依賴哪個Web
services和外部資源?隨著訓(xùn)斥頻率的增加,您僅有的資源都用來開始記錄多個系統(tǒng)的眾多日志上了。
記錄審核和記帳的請求和響應(yīng)
要求內(nèi)部IT部門追蹤軟件應(yīng)用程序的使用也在日漸增加,以便不同的業(yè)務(wù)部門支付其公平的IT投入份額。同樣,任何跨越公司邊界實現(xiàn)業(yè)務(wù)流程自動化的應(yīng)用
程序也必須擁有一個計劃,用來解決發(fā)送者和接收者之間的拒付糾紛。在調(diào)用程序和被調(diào)用程序時的一致消息日志記錄,是處理這些審核和記帳需求的關(guān)鍵。IT經(jīng)
理如何確保所有的開發(fā)人員在所有的入口點和退出點都實現(xiàn)正確級別的日志記錄?對于使用XML加密進(jìn)行加密的消息,您如何確保當(dāng)消息被清除時沒有記錄(這會
破壞公司的保密政策)?對于由打包應(yīng)用程序本身所發(fā)布的Web services,如何完成消息日志記錄?
確保始終如一地執(zhí)行安全策略
即使在簡化的示例應(yīng)用程序中,一份文檔也會在應(yīng)用程序組件間傳送多次。當(dāng)調(diào)用createOrder操作時,客戶端程序發(fā)送一個P.O;一旦該訂單被提
交,這個PO最終會被送到不同的Web
service。為了確保端到端的保密性和完整性,開發(fā)人員可以使用WS-Security、XML加密和XML簽名(BEA WebLogic
8.1支持WS-Security)。擁有這些能力是很好的,但是如果沒有堅持使用,就沒有購買意義了。安全構(gòu)架師如何確保所有的企業(yè)間Web
services在處理消息前都驗證了消息的數(shù)字簽名呢? 在開始將松散耦合的、分布式的應(yīng)用程序向行業(yè)范圍中部署時,這只是IT人員需要應(yīng)對的某些新挑戰(zhàn)。為了簡潔,這里我們選擇只關(guān)注幾個關(guān)鍵問題。順便還提及了很多其他問題——包括實現(xiàn)故障切換和處理傳輸層故障的重試規(guī)劃、實現(xiàn)單點登錄和服務(wù)版本控制。
評估用于管理SOA部署的新管理工具
現(xiàn)在,您應(yīng)該確信成功部署Web服務(wù)最初需要處理一大堆棘手的管理問題。即使現(xiàn)今您的Web
services仍然處于試驗階段,您也不應(yīng)該推遲考慮管理方面的問題。好消息就是很多管理工具多已著眼于此。壞消息也是這樣。很多新的Web
services管理工具、應(yīng)用服務(wù)器管理工具、系統(tǒng)管理工具、XML路由工具、管理器的管理工具等等,“Web
services”這個單詞似乎要揭露出它所有的數(shù)據(jù)表。 下面看一看為管理您所創(chuàng)建的、新的面向服務(wù)的應(yīng)用程序找尋評估工具時要注意的幾件事情。 它能非侵入地監(jiān)視所有WebLogic控件和Web Services的調(diào)用嗎?
在BEA WebLogic
8.1中,使用控件訪問所有外部資源。這樣監(jiān)視延遲和所有控件調(diào)用的輸入/輸出的管理工具就能可視化地提供應(yīng)用程序依賴的所有組件。該工具應(yīng)該能“探察”
任何Web
services,而不管用于發(fā)布這些服務(wù)的平臺是什么(J2EE應(yīng)用服務(wù)器、.NET、集成代理或者打包應(yīng)用程序)。監(jiān)視控件和分布式Web
services必須以一個非侵入的方式來完成。這至少意味著應(yīng)該能夠插入管理層而無需改變?nèi)魏螒?yīng)用程序。但是管理層應(yīng)該超越此要求,還應(yīng)該能夠不侵入應(yīng)
用程序的運行時行為。例如,管理層應(yīng)該利用處理中的SOAP偵聽機制,在任何可能的情況下都減少延遲開銷并避免添加新的故障點。
它能跟蹤端到端事務(wù)流和會話嗎? 為了使您能夠排除分布式應(yīng)用程序故障,管理工具必須能夠?qū)崟r跟蹤應(yīng)用程序的執(zhí)行。該跟蹤必須包括應(yīng)用程序用到的所有控件。
BEA Weblogic
8.1簡化了異步的、會話的、應(yīng)用程序到應(yīng)用程序交互的創(chuàng)建——為了跟蹤這些會話,管理工具必須能夠標(biāo)識和關(guān)聯(lián)那些共享會話環(huán)境的消息,并具備可視化表示
執(zhí)行時間線的能力。進(jìn)行故障排除的同時,您應(yīng)該能夠從一個會話中所涉及的所有Web服務(wù)調(diào)用的高層次視圖向下查看,直到關(guān)于該服務(wù)內(nèi)所用任何控件的執(zhí)行細(xì)
節(jié)。一旦問題限定到特定的控件,會話系統(tǒng)管理工具就可以用于調(diào)試。然后,您可以垂直向下移動執(zhí)行,通過支持基礎(chǔ)架構(gòu)的多個層,從Java對象到應(yīng)用服務(wù)
器,向下直到操作系統(tǒng),最終到達(dá)到硬件服務(wù)器。
它能夠主動管理Web Services間的交互嗎?
為了確保持續(xù)地實施IT策略,如日志和安全,這些動作必須從應(yīng)用程序代碼中提取出來,而用一個分離的策略管理層來自動執(zhí)行。例如,開發(fā)人員無需再明確地
編寫代碼來記錄Web
service請求和響應(yīng)消息。也不必編寫代碼來驗證數(shù)字簽名或者進(jìn)行壓縮,或檢查病毒,或任何此類操作問題。相反,通過截取消息和主動地操縱消息內(nèi)容,
管理層應(yīng)該負(fù)責(zé)強制實行策略。如果公司以后改變了策略,例如,決定只記錄消息頭部而不記錄所有消息內(nèi)容,就無需更改代碼。一個簡單的配置改變就能夠獲得成
功。
它能夠與您的WebLogic 8.1開發(fā)環(huán)境集成嗎? 從過
去來看,應(yīng)用程序已經(jīng)開發(fā)和測試完畢后,工作通常集中在管理上。即使對于被動的監(jiān)控工具這也不是最理想的。而對于使用主動的管理工具,這將是災(zāi)難性的。有
了需要攔截傳送中的消息并作用于消息的管理層,開發(fā)和管理之間的分裂消失了。需要在開發(fā)周期中先行解決管理問題,以便能夠以和生產(chǎn)中相同的方法執(zhí)行所有的
測試(功能和性能)。正如上面所討論的,主動管理工具幫助完成持久策略執(zhí)行,方法是用中心配置的策略處理器替換隱藏在每個服務(wù)中的代碼。要在開發(fā)早期解決
管理問題,并在處理安全和日志時使用配置替代編碼,您的管理工具必須與您的WebLogic開發(fā)工具和您的端到端程序開發(fā)過程完美地集成。
在全異的遠(yuǎn)程服務(wù)之間,它能夠為安全/QOS策略提供單點配置嗎?
隨著應(yīng)用程序內(nèi)Web services使用的膨脹,多個應(yīng)用程序?qū)l(fā)布和使用Web
services。管理工具應(yīng)該能夠允許您集中查看,為環(huán)境中的任何服務(wù)提供監(jiān)控、安全和QOS策略,并能向多個服務(wù)“廣播”管理策略的更新,而不必本地
逐臺服務(wù)器和逐個服務(wù)地進(jìn)行配置。
Confluent 的Web Services管理解決方案 Confluent提供了一個管理工具,可將其插入到BEA WebLogic Workshop IDE中,并添加了易用的管理功能。它允許您自動監(jiān)視Web services和所有組成控件的執(zhí)行,而無需任何額外的編碼。 讓我們在運行中快速了解這個工具,使用它管理我們的示例應(yīng)用程序。
一旦您啟動了BEA的CORE,您會注意到在BEA WebLogic
Workshop環(huán)境下半部分的一些其他窗格(參見圖2)。在右下方,有一個Configure
Policy窗格,可使用它定義運行策略,以強制實行Web
service,如日志、簽名檢查或者調(diào)用第三方SAML提供商。左下方窗格顯示了訂單管理Web
service使用的控件——dbOrderManagement、serviceNotify和ejbAccount。單擊相應(yīng)的控件可切換監(jiān)視控件。
 圖2:Runtime View選項卡
點擊Runtime View 選項卡可顯示所有與服務(wù)相關(guān)的會話細(xì)節(jié)。例如,在5422毫秒的時間內(nèi)成功完成一個會話(表示一個訂單事務(wù)開始于13.38.39)。用戶也可以回顧會話、簡單的操作、成功和失敗的數(shù)目。
Operations 選項卡能夠顯示所選會話的詳細(xì)信息(參見圖3)。它顯示了所選會話中調(diào)用的所有Web
service操作。它用一個圖形顯示了這些操作、它們的時間、延遲和狀態(tài)的次序。注意payload窗格同時顯示了觸發(fā)執(zhí)行操作的SOAP消息和發(fā)回請
求者的SOAP結(jié)果。
 圖3:Operations選項卡
點擊Controls 選項卡可以看到更多關(guān)于所選操作內(nèi)所調(diào)用的控件細(xì)節(jié)。對于每個被調(diào)用的控件,它的名稱、類型、操作、狀態(tài)和延遲都顯示在表格和圖中。 總之,Runtime View 窗格允許程序員分析Web service在多個層次的運行時行為:從會話層到操作層,最后到底層控件。 要了解關(guān)于Confluent用于BEA Weblogic的Web services管理軟件的更多信息,可以查閱BEA Premier Component Gallery:http://dev2dev./products/wlworkshop81/partners/index.jsp,或者查閱www.。
結(jié)束語 除了WSDL、UDDI和SOAP,還有很多面向服務(wù)的應(yīng)用程序。BEA WebLogic 8.1提供了一個全面的平臺,用以開發(fā)企業(yè)級面向服務(wù)的應(yīng)用程序。但是請記住,要盡早開始考慮管理問題。在過去忽略這一說教可能不是致命的。但現(xiàn)在是。 示例應(yīng)用程序的源代碼見:www./weblogic/sourcec.cfm。
附錄:示例應(yīng)用程序源代碼
import examples.ejb20.basic.containerManaged.Account;
public class OrderManagementService implements com.bea.jws.WebService { /** * EJB holding user accounts * @common:control */ private ejbControl.AccountEJBControl ejbAccount;
/** * The remote service where notifications of committed orders are sent * @common:control */ private service.NotifyOrderServiceControl serviceNotify;
/** * The orders database control * @common:control */ private database.OrderManagementDB dbOrderManagement;
// The fee charged when ever a transaction is performed private final int BASIC_FEE = 10;
/** * @common:operation */ public String queryOrderStatus(String inAccountNumber, String inOrderNumber) throws Exception { int result = dbOrderManagement.checkOrder(inOrderNumber); withdraw(inAccountNumber, BASIC_FEE); return String.valueOf(result); }
/** * Created a new order * @common:operation * @jws:conversation phase="start" */ public void createOrder(String inAccountNumber, String inOrderNumber) throws Exception { dbOrderManagement.insertOrder(inOrderNumber); withdraw(inAccountNumber, BASIC_FEE); }
/** * Commits a new order * @common:operation * @jws:conversation phase="finish" */ public void commitOrder(String inAccountNumber, String inOrderNumber) throws Exception { serviceNotify.notifyOrder(inOrderNumber); withdraw(inAccountNumber, BASIC_FEE); }
/** * Withdraws money from a customer account */ private double withdraw(String accountKey, double withdrawAmount) throws Exception { return getAccount(accountKey).withdraw(withdrawAmount); }
/** * <p>Helper function -- returns an EJB account for a given key<p> * * @return An Account object */ private Account getAccount(String accountKey) throws Exception { return ejbAccount.findByPrimaryKey(accountKey); } }
原文出處 http://www./story/?storyid=42997&DE=1
作者簡介 |
|
Amit
Dayal是Confluent Software公司產(chǎn)品管理方面的副主管,該公司是Web
services管理軟件方面的主要提供商。Amit在企業(yè)軟件方面有超過14年的經(jīng)驗。在為Confluent公司工作之前,Amit是
interKeel公司的創(chuàng)始人,該公司在Web services管理類中是一個先鋒。 |
|
Didier
Guzzoni是現(xiàn)在是Confluent
Software公司的高級軟件工程師。他于1996年畢業(yè)于瑞士聯(lián)邦理工大學(xué),獲得軟件工程碩士學(xué)位。他曾是VerticalNet的研究工程師,在那
里他參加了OSM項目,該項目是促進(jìn)和協(xié)調(diào)Web Services的基礎(chǔ)結(jié)構(gòu)。他作為一名研究工程師在SRI(Stanford Research
Institute)International公司開始其職業(yè)生涯,從事OAA(Distributed software
architecture)項目,并為CHIC! Lab(Computer Human Interface
Center)工作,他的研究重點是未來多模式用戶界面。他還曾積極參與移動機器人項目,其中機器人被認(rèn)為是實施團(tuán)隊協(xié)作以執(zhí)行合作任務(wù)的物理載體。 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1633380
|