控件可以讓開(kāi)發(fā)人員專(zhuān)注于編寫(xiě)應用程序邏輯和委派基礎性架構問(wèn)題,如異步消息傳送、會(huì )話(huà)和與遠程資源的連接。但仍有很多復雜問(wèn)題使這些應用程序難以管理。 在本文中,我們將使用內建的Weblogic Workshop控件開(kāi)發(fā)一個(gè)基于Webservices的示例應用程序,并用它來(lái)說(shuō)明管理面向服務(wù)的應用程序的挑戰。最后,我們將演示ConfuluentSoftware公司如何給開(kāi)發(fā)人員和IT人員提供可能的Web services管理解決方案,該方案與BEA WebLogic 8.1Platform集成在一起。
為什么要面向服務(wù)?
很少有應用程序還在獨自運行。相反,大多數應用程序經(jīng)常被集成到應用程序到應用程序互連的復雜“網(wǎng)絡(luò )”中。這些應用程序網(wǎng)絡(luò )通常是完全異構的、鏈接不同公司所開(kāi)發(fā)的應用程序、運行在不同的平臺上、以不同的語(yǔ)言實(shí)現,并且安全保護也各異。
更糟糕的是,利用現今緊密耦合的集成方法,每個(gè)應用程序都敏銳地知曉其他應用程序的特性。這樣,一個(gè)應用程序的任何改變將會(huì )在整個(gè)網(wǎng)絡(luò )中引起一系列的級聯(lián)變化。出現天文數字的開(kāi)發(fā)和維護費用也不足為奇。同時(shí),管理層會(huì )懷疑IT仍否重要,并逐年削減IT預算——總有一天,這就是緊密耦合的代價(jià)。
面向服務(wù)的構架(SOA)提供了一個(gè)出路。面向服務(wù)的應用程序通過(guò)利用基于標準的Web services技術(shù)來(lái)連接異構環(huán)境。通過(guò)在應用程序間實(shí)現松散的耦合,它們消除了變化管理上的惡夢(mèng),也就是,改變一個(gè)應用程序的實(shí)現而不會(huì )中斷其他應用程序。
WebLogic Workshop控件
BEA WebLogic Workshop通過(guò)為分布式組件的組裝提供易用的工具,使得構建面向服務(wù)的應用程序變得很容易,并且方便了在組件間往來(lái)的XML消息的長(cháng)久會(huì )話(huà)。
在WebLogicWorkshop中,任何應用程序的核心構建塊是控件??丶秃孟窈?jiǎn)單的Java組件(具有方法和事件),通過(guò)屬性可自定義該組件的行為??丶[藏了J2EE底層問(wèn)題,這些問(wèn)題包括連接遠程數據庫、Webservices、EJB對象和消息隊列。有了控件,通過(guò)設置屬性,而不是調用API,就可配置這些外部資源的連接。通過(guò)促進(jìn)輕松組裝松散耦合的應用程序組件,控件也為實(shí)現面向服務(wù)作出了貢獻。
為了進(jìn)一步增強松散耦合,WebLogicWorkshop 8.1也提供了可視化的編輯器(和XQuery支持),用來(lái)建立XML接口和底層Java對象間的映射。
讓我們剖析一個(gè)簡(jiǎn)單的Web services應用程序,看一看WebLogic Workshop是如何消除創(chuàng )建類(lèi)似應用程序的苦惱的。
訂單管理應用程序示例
即使實(shí)現一個(gè)簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,例如我們訂單管理Web service示例,也會(huì )有大量的技術(shù)復雜難題:
訂單管理Web服務(wù)的示例顯示了如下操作:
首先創(chuàng )建訂單,如果創(chuàng )建成功,則提交該訂單。createOrder和commitOrder必須按順序執行。對于每個(gè)方法的調用,服務(wù)將會(huì )從客戶(hù)帳戶(hù)中扣除一定費用。用戶(hù)帳戶(hù)作為EJB建模。訂單存儲在JDBC兼容的數據庫中。對于每一個(gè)新創(chuàng )建的訂單,commitOrder將通知遠程服務(wù)器(通過(guò)一個(gè)Web service調用)。
通過(guò)使用BEA WebLogic Workshop,并利用控件這一強大的概念,解決在創(chuàng )建像此類(lèi)Web service的固有復雜性問(wèn)題時(shí)是很容易的。圖1顯示了示例服務(wù)的設計視圖及其所用控件。

首先,在WebLogic Workshop中創(chuàng )建、部署和展示W(wǎng)eb service的過(guò)程是很直接的。簡(jiǎn)單地創(chuàng )建一個(gè)Webservice工程、添加所有的方法、編寫(xiě)邏輯并放置“Play”按鈕。此外,WebLogicWorkshop自動(dòng)創(chuàng )建一組Web頁(yè)面來(lái)測試和運行該Web service(參見(jiàn)清單1)。
清單 1
/**
* @common:operation
*/
public String queryOrderStatus(String inAccountNumber, String inOrderNumber)
然后對后端組件的訪(fǎng)問(wèn),如EJB、數據庫,或者甚至是遠程Web services,則只是一個(gè)拖放動(dòng)作(參見(jiàn)清單2)。一旦將使用的組件拖到項目中,它將作為一個(gè)對象出現在“代碼視圖”窗格中,并且可以很容易地集成到自定義代碼中。
清單 2
/**
* Remote Web services
* @common:control
*/
private service.NotifyOrderServiceControl serviceNotify;
第三,確認在WebLogic Workshop中能夠以給定順序調用各種方法。從Web service所提供的每個(gè)操作能被標記為會(huì )話(huà)的一部分。這個(gè)標記也表明了操作涉及到會(huì )話(huà)中的哪個(gè)部分,這樣強制必須調用這些操作中的訂單(參見(jiàn)清單3)。
清單 3
/**
* Create a new order
* @common:operation
* @jws:conversation phase="start"
*/
public void createOrder(String inAccountNumber, String inOrderNumber)
最后,WebLogic Workshop會(huì )話(huà)能夠為多個(gè)用戶(hù)保持環(huán)境。會(huì )話(huà)標記指出要在會(huì )話(huà)期間保持環(huán)境信息(狀態(tài))。使用這種機制,訂單管理服務(wù)能夠同時(shí)處理多個(gè)客戶(hù)端。
部署面向服務(wù)的應用程序也帶來(lái)了新的挑戰
不幸的是,世上沒(méi)有免費的午餐。面向服務(wù)的應用程序大幅削減了開(kāi)發(fā)和維護的費用,但代價(jià)就是管理復雜度的增加:
監視應用程序的健康狀況,不僅僅是組件
單管理應用程序示例。當前的管理工具僅僅監視單個(gè)組件和組件的低級基礎架構?;谶@點(diǎn),我們沒(méi)辦法驗證一個(gè)分布式Webservices應用程序是否工作正常。如果應用程序使用外部Webservices(如合作伙伴的報價(jià)服務(wù)),那么只會(huì )激化這個(gè)問(wèn)題。由于沒(méi)有方法管理外部公司所運行的服務(wù)器,所以常規的監視方法完全沒(méi)用了。因此在被憤怒的經(jīng)理訓斥前,您如何檢測正在出現的問(wèn)題?
不知道去哪里排除故障
一旦你開(kāi)始每過(guò)幾分鐘就被不高興的銷(xiāo)售副主管所訓斥,因為訂單管理應用程序出錯了(在季度結束前兩天),您應該到哪里去查找罪魁禍首呢?是提供訪(fǎng)問(wèn)由制造IT部門(mén)所管理的存貨系統的WebLogic Workshop控件嗎?是這個(gè)應用程序所依賴(lài)的眾多Webservices之一嗎?更糟的是,您怎么知道應用程序依賴(lài)哪個(gè)Webservices和外部資源?隨著(zhù)訓斥頻率的增加,您僅有的資源都用來(lái)開(kāi)始記錄多個(gè)系統的眾多日志上了。
記錄審核和記帳的請求和響應
要求內部IT部門(mén)追蹤軟件應用程序的使用也在日漸增加,以便不同的業(yè)務(wù)部門(mén)支付其公平的IT投入份額。同樣,任何跨越公司邊界實(shí)現業(yè)務(wù)流程自動(dòng)化的應用程序也必須擁有一個(gè)計劃,用來(lái)解決發(fā)送者和接收者之間的拒付糾紛。在調用程序和被調用程序時(shí)的一致消息日志記錄,是處理這些審核和記帳需求的關(guān)鍵。IT經(jīng)理如何確保所有的開(kāi)發(fā)人員在所有的入口點(diǎn)和退出點(diǎn)都實(shí)現正確級別的日志記錄?對于使用XML加密進(jìn)行加密的消息,您如何確保當消息被清除時(shí)沒(méi)有記錄(這會(huì )破壞公司的保密政策)?對于由打包應用程序本身所發(fā)布的Web services,如何完成消息日志記錄?
確保始終如一地執行安全策略
即使在簡(jiǎn)化的示例應用程序中,一份文檔也會(huì )在應用程序組件間傳送多次。當調用createOrder操作時(shí),客戶(hù)端程序發(fā)送一個(gè)P.O;一旦該訂單被提交,這個(gè)PO最終會(huì )被送到不同的Webservice。為了確保端到端的保密性和完整性,開(kāi)發(fā)人員可以使用WS-Security、XML加密和XML簽名(BEA WebLogic8.1支持WS-Security)。擁有這些能力是很好的,但是如果沒(méi)有堅持使用,就沒(méi)有購買(mǎi)意義了。安全構架師如何確保所有的企業(yè)間Webservices在處理消息前都驗證了消息的數字簽名呢?
在開(kāi)始將松散耦合的、分布式的應用程序向行業(yè)范圍中部署時(shí),這只是IT人員需要應對的某些新挑戰。為了簡(jiǎn)潔,這里我們選擇只關(guān)注幾個(gè)關(guān)鍵問(wèn)題。順便還提及了很多其他問(wèn)題——包括實(shí)現故障切換和處理傳輸層故障的重試規劃、實(shí)現單點(diǎn)登錄和服務(wù)版本控制。
評估用于管理SOA部署的新管理工具
現在,您應該確信成功部署Web服務(wù)最初需要處理一大堆棘手的管理問(wèn)題。即使現今您的Webservices仍然處于試驗階段,您也不應該推遲考慮管理方面的問(wèn)題。好消息就是很多管理工具多已著(zhù)眼于此。壞消息也是這樣。很多新的Webservices管理工具、應用服務(wù)器管理工具、系統管理工具、XML路由工具、管理器的管理工具等等,“Webservices”這個(gè)單詞似乎要揭露出它所有的數據表。
下面看一看為管理您所創(chuàng )建的、新的面向服務(wù)的應用程序找尋評估工具時(shí)要注意的幾件事情。
它能非侵入地監視所有WebLogic控件和Web Services的調用嗎?
在BEA WebLogic8.1中,使用控件訪(fǎng)問(wèn)所有外部資源。這樣監視延遲和所有控件調用的輸入/輸出的管理工具就能可視化地提供應用程序依賴(lài)的所有組件。該工具應該能“探察”任何Webservices,而不管用于發(fā)布這些服務(wù)的平臺是什么(J2EE應用服務(wù)器、.NET、集成代理或者打包應用程序)。監視控件和分布式Webservices必須以一個(gè)非侵入的方式來(lái)完成。這至少意味著(zhù)應該能夠插入管理層而無(wú)需改變任何應用程序。但是管理層應該超越此要求,還應該能夠不侵入應用程序的運行時(shí)行為。例如,管理層應該利用處理中的SOAP偵聽(tīng)機制,在任何可能的情況下都減少延遲開(kāi)銷(xiāo)并避免添加新的故障點(diǎn)。
它能跟蹤端到端事務(wù)流和會(huì )話(huà)嗎?
為了使您能夠排除分布式應用程序故障,管理工具必須能夠實(shí)時(shí)跟蹤應用程序的執行。該跟蹤必須包括應用程序用到的所有控件。
BEA Weblogic8.1簡(jiǎn)化了異步的、會(huì )話(huà)的、應用程序到應用程序交互的創(chuàng )建——為了跟蹤這些會(huì )話(huà),管理工具必須能夠標識和關(guān)聯(lián)那些共享會(huì )話(huà)環(huán)境的消息,并具備可視化表示執行時(shí)間線(xiàn)的能力。進(jìn)行故障排除的同時(shí),您應該能夠從一個(gè)會(huì )話(huà)中所涉及的所有Web服務(wù)調用的高層次視圖向下查看,直到關(guān)于該服務(wù)內所用任何控件的執行細節。一旦問(wèn)題限定到特定的控件,會(huì )話(huà)系統管理工具就可以用于調試。然后,您可以垂直向下移動(dòng)執行,通過(guò)支持基礎架構的多個(gè)層,從Java對象到應用服務(wù)器,向下直到操作系統,最終到達到硬件服務(wù)器。
它能夠主動(dòng)管理Web Services間的交互嗎?
為了確保持續地實(shí)施IT策略,如日志和安全,這些動(dòng)作必須從應用程序代碼中提取出來(lái),而用一個(gè)分離的策略管理層來(lái)自動(dòng)執行。例如,開(kāi)發(fā)人員無(wú)需再明確地編寫(xiě)代碼來(lái)記錄Webservice請求和響應消息。也不必編寫(xiě)代碼來(lái)驗證數字簽名或者進(jìn)行壓縮,或檢查病毒,或任何此類(lèi)操作問(wèn)題。相反,通過(guò)截取消息和主動(dòng)地操縱消息內容,管理層應該負責強制實(shí)行策略。如果公司以后改變了策略,例如,決定只記錄消息頭部而不記錄所有消息內容,就無(wú)需更改代碼。一個(gè)簡(jiǎn)單的配置改變就能夠獲得成功。
它能夠與您的WebLogic 8.1開(kāi)發(fā)環(huán)境集成嗎?
從過(guò)去來(lái)看,應用程序已經(jīng)開(kāi)發(fā)和測試完畢后,工作通常集中在管理上。即使對于被動(dòng)的監控工具這也不是最理想的。而對于使用主動(dòng)的管理工具,這將是災難性的。有了需要攔截傳送中的消息并作用于消息的管理層,開(kāi)發(fā)和管理之間的分裂消失了。需要在開(kāi)發(fā)周期中先行解決管理問(wèn)題,以便能夠以和生產(chǎn)中相同的方法執行所有的測試(功能和性能)。正如上面所討論的,主動(dòng)管理工具幫助完成持久策略執行,方法是用中心配置的策略處理器替換隱藏在每個(gè)服務(wù)中的代碼。要在開(kāi)發(fā)早期解決管理問(wèn)題,并在處理安全和日志時(shí)使用配置替代編碼,您的管理工具必須與您的WebLogic開(kāi)發(fā)工具和您的端到端程序開(kāi)發(fā)過(guò)程完美地集成。
在全異的遠程服務(wù)之間,它能夠為安全/QOS策略提供單點(diǎn)配置嗎?
隨著(zhù)應用程序內Web services使用的膨脹,多個(gè)應用程序將會(huì )發(fā)布和使用Webservices。管理工具應該能夠允許您集中查看,為環(huán)境中的任何服務(wù)提供監控、安全和QOS策略,并能向多個(gè)服務(wù)“廣播”管理策略的更新,而不必本地逐臺服務(wù)器和逐個(gè)服務(wù)地進(jìn)行配置。
Confluent 的Web Services管理解決方案
Confluent提供了一個(gè)管理工具,可將其插入到BEA WebLogic Workshop IDE中,并添加了易用的管理功能。它允許您自動(dòng)監視Web services和所有組成控件的執行,而無(wú)需任何額外的編碼。
讓我們在運行中快速了解這個(gè)工具,使用它管理我們的示例應用程序。
一旦您啟動(dòng)了BEA的CORE,您會(huì )注意到在BEA WebLogicWorkshop環(huán)境下半部分的一些其他窗格(參見(jiàn)圖2)。在右下方,有一個(gè)ConfigurePolicy窗格,可使用它定義運行策略,以強制實(shí)行Webservice,如日志、簽名檢查或者調用第三方SAML提供商。左下方窗格顯示了訂單管理Webservice使用的控件——dbOrderManagement、serviceNotify和ejbAccount。單擊相應的控件可切換監視控件。

點(diǎn)擊Runtime View 選項卡可顯示所有與服務(wù)相關(guān)的會(huì )話(huà)細節。例如,在5422毫秒的時(shí)間內成功完成一個(gè)會(huì )話(huà)(表示一個(gè)訂單事務(wù)開(kāi)始于13.38.39)。用戶(hù)也可以回顧會(huì )話(huà)、簡(jiǎn)單的操作、成功和失敗的數目。
Operations 選項卡能夠顯示所選會(huì )話(huà)的詳細信息(參見(jiàn)圖3)。它顯示了所選會(huì )話(huà)中調用的所有Webservice操作。它用一個(gè)圖形顯示了這些操作、它們的時(shí)間、延遲和狀態(tài)的次序。注意payload窗格同時(shí)顯示了觸發(fā)執行操作的SOAP消息和發(fā)回請求者的SOAP結果。

點(diǎn)擊Controls 選項卡可以看到更多關(guān)于所選操作內所調用的控件細節。對于每個(gè)被調用的控件,它的名稱(chēng)、類(lèi)型、操作、狀態(tài)和延遲都顯示在表格和圖中。
總之,Runtime View 窗格允許程序員分析Web service在多個(gè)層次的運行時(shí)行為:從會(huì )話(huà)層到操作層,最后到底層控件。
要了解關(guān)于Confluent用于BEA Weblogic的Web services管理軟件的更多信息,可以查閱BEA Premier Component Gallery:http://dev2dev.bea.com/products/wlworkshop81/partners/index.jsp,或者查閱www.confluentsoftware.com。
結束語(yǔ)
除了WSDL、UDDI和SOAP,還有很多面向服務(wù)的應用程序。BEA WebLogic 8.1提供了一個(gè)全面的平臺,用以開(kāi)發(fā)企業(yè)級面向服務(wù)的應用程序。但是請記住,要盡早開(kāi)始考慮管理問(wèn)題。在過(guò)去忽略這一說(shuō)教可能不是致命的。但現在是。
示例應用程序的源代碼見(jiàn):www.sys-con.com/weblogic/sourcec.cfm。
附錄:示例應用程序源代碼
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.sys-con.com/story/?storyid=42997&DE=1

| 作者簡(jiǎn)介 | |
| Amit Dayal是Confluent Software公司產(chǎn)品管理方面的副主管,該公司是Web services管理軟件方面的主要提供商。Amit在企業(yè)軟件方面有超過(guò)14年的經(jīng)驗。在為Confluent公司工作之前,Amit是 interKeel公司的創(chuàng )始人,該公司在Web services管理類(lèi)中是一個(gè)先鋒。 | |
| Didier Guzzoni是現在是Confluent Software公司的高級軟件工程師。他于1996年畢業(yè)于瑞士聯(lián)邦理工大學(xué),獲得軟件工程碩士學(xué)位。他曾是VerticalNet的研究工程師,在那 里他參加了OSM項目,該項目是促進(jìn)和協(xié)調Web Services的基礎結構。他作為一名研究工程師在SRI(Stanford Research Institute)International公司開(kāi)始其職業(yè)生涯,從事OAA(Distributed software architecture)項目,并為CHIC! Lab(Computer Human Interface Center)工作,他的研究重點(diǎn)是未來(lái)多模式用戶(hù)界面。他還曾積極參與移動(dòng)機器人項目,其中機器人被認為是實(shí)施團隊協(xié)作以執行合作任務(wù)的物理載體。 | |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1633380
聯(lián)系客服