• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181, 文章 - 2, 評論 - 85, 引用 - 0
            數(shù)據(jù)加載中……

            用于實(shí)現(xiàn) Web 服務(wù)的 SOA 編程模型,第 5 部分: 面向服務(wù)的用戶界面

            面向服務(wù)的編程模型可以簡化程序到用戶 (program-to-human) 的交互的開發(fā),方法是在用戶或者管理員控制下在表示層抽象化接口、標(biāo)準(zhǔn)化消息以及聚合獨(dú)立信息源。本文是關(guān)于 IBM 的 SOA 編程模型的系列文章的第 5 部分,介紹了用戶面對的服務(wù)并提供了用戶界面 (UI)。本系列前面的文章介紹了與語言無關(guān)的數(shù)據(jù)訪問和基于面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)概念的 Web 服務(wù)的編程模型。

            面向服務(wù)的體系結(jié)構(gòu)的用戶界面

            在文獻(xiàn)中,對 Web 服務(wù)的討論通常是在程序到程序 (program-to-program) 交互的上下文中進(jìn)行的。然而,

            模型-視圖-控制器(Model-View-Controller,MVC)范例是現(xiàn)代大多數(shù) UI 應(yīng)用程序框架的基礎(chǔ)。SOA 操作提供模型層,而 UI 位于視圖層。UI 技術(shù)可以在各種設(shè)備上呈現(xiàn)信息,這些設(shè)備包括的范圍很廣,從窗口小部件和智能電話到瀏覽器和能夠進(jìn)行大量客戶端處理的富客戶機(jī)。中間件和工具將視圖層 UI 技術(shù)連接到模型層 Web 服務(wù)和數(shù)據(jù)。

            在 SOA 方法中,宿主組件的環(huán)境抽象成容器,它提供已知的服務(wù)集。從 UI 的角度來說,承載客戶端 UI 組件的三個主要的容器是:

            • 基本 Web 瀏覽器。
            • 使用 Java?Script 和動態(tài) HTML 增強(qiáng)的 Web 瀏覽器。
            • IBM Workplace? Client Technology?——具有本地 IBM WebSphere? Application Server 客戶機(jī)支持的 Eclipse 富客戶機(jī)。

            這些容器可以通過支持下列技術(shù)得以增強(qiáng):Servlet、JavaServer Page (JSP) 和 JSP Tag;用于頁面排序的 Struts;用于高級頁面組合的 JavaServer Face (JSF);以及合并在同一頁面上的多應(yīng)用程序視圖的 Portlet 技術(shù)。

            UI 開發(fā)框架

            UI 開發(fā)框架可以簡化創(chuàng)建面對用戶的復(fù)雜應(yīng)用程序的過程。通常使用下列的 UI 框架來創(chuàng)建 UI 組件:

            • Struts,擁有最大的開發(fā)人員社區(qū)和異常工具支持,是 Apache 開放源代碼項(xiàng)目,它早于 Java Portlet 規(guī)范 JSR 168(請參閱參考資料以獲得 Struts Web 站點(diǎn)的鏈接)。Struts 是使用 servlet/JSP 范例開發(fā)基于服務(wù)器的 UI 的多頁 MVC 框架。Struts 的一個特殊版本 V1.1 庫支持 IBM WebSphere Portal 上的 JSR 168 Portlet。
            • JavaServer Faces 是 Java Web 應(yīng)用程序的 MVC 實(shí)現(xiàn),以增量方式構(gòu)建于以前的技術(shù)之上。它很好地適應(yīng)了 Portlet 開發(fā),提供 Portlet 和 Servlet、聲明處理、確認(rèn)和事件處理。JSF 頁面具有一個或多個與該頁面上的 UI 控件交互的本地模型。這些控件將 UI 屬性呈現(xiàn)給輸出,而復(fù)雜的邏輯確保它們的表示是在“正確的”地方。客戶端模型可以連入企業(yè)服務(wù)總線 (Enterprise Service Bus) 來發(fā)送和接收事件。
            • Java Widget Library (JWL),是一個可供門戶和 Portlet 程序員使用的擴(kuò)展窗口小部件集,向 JSF 添加 JavaScript 客戶端處理,而且將得到 IBM Rational? Suite? DevelopmentStudio 的支持。更新客戶機(jī)本地視圖省去了往返服務(wù)器的過程,縮短了幾個數(shù)量級的響應(yīng)時間,而且極大地改善了用戶體驗(yàn)。

            門戶 提供了最好的 UI 支持。在門戶體系結(jié)構(gòu)中,Portlet(通常是使用上面提到的某種 UI 框架開發(fā)的)是基本構(gòu)件。使用這種體系結(jié)構(gòu),開發(fā)人員可以把主要精力放在他們的應(yīng)用程序的獨(dú)特方面,并且將生命周期、每個用戶的自定義、聚合以及與其他組件的集成等公共功能委派給中間件。

            下面幾部分將單個服務(wù)和門戶的 Portlet 組件描述成服務(wù)聚合機(jī)制。







            面向服務(wù)的 UI 的 Portlet

            Portlet 組件實(shí)現(xiàn)了標(biāo)準(zhǔn)服務(wù)接口和協(xié)議。Java Portlet 規(guī)范和用于遠(yuǎn)程 Portlet 的 Web 服務(wù)(Web Services for Remote Portlet,WSRP)標(biāo)準(zhǔn)分別定義了 Java 和 Web 服務(wù)的這個接口(請參閱參考資料以獲得更多關(guān)于 WSRP 的信息)。這兩個標(biāo)準(zhǔn)非常相似,以致如果存在合適的容器或者代理,為任一接口編寫的 Portlet 都可互換。

            Java Portlet 示例

            每個 Java Portlet 都實(shí)現(xiàn)了該 Portlet 接口或者擴(kuò)展了實(shí)現(xiàn)它的類。這個接口定義了 Portlet 和它的容器之間的服務(wù)約定,以及 Portlet 的生命周期:

            • 初始化 Portlet 并將其放入服務(wù)中(init 方法)
            • 處理請求(processActionrender 方法)
            • 除去服務(wù)的 Portlet(destroy 方法)

            在處理請求期間,Portlet 容器調(diào)用 Portlet 的:

            • processAction 方法來通知 Portlet 用戶行為。每個客戶機(jī)只有一個基于用戶的行為被觸發(fā)。Portlet 可以發(fā)出一個重定向、改變它的 Portlet 模式或窗口狀態(tài)或者更改它的狀態(tài)。
            • render 方法來請求標(biāo)記片段。

            Portlet 還可以調(diào)用更多的服務(wù)來執(zhí)行所需的功能。清單 1 示例使用 Web 服務(wù)來檢索和顯示特定用戶的股票報(bào)價(jià)。


            清單 1. 股票報(bào)價(jià) Portlet 代碼示例
            												
            																		public class StockQuotePortlet extends GenericPortlet {
            
            	private ServiceManager serviceManager;
            
            	public void init(PortletConfig config) throws PortletException {
            		serviceManager = new ServiceManager();
            	}
            
            	public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
            		
                    	response.setContentType("text/html");    
            
                    	// invoke autogenerated wrapper to locate service
            		NetXmethodsServicesStockquoteStockQuoteServiceLocator loc = 
            			new NetXmethodsServicesStockquoteStockQuoteServiceLocator();
            		NetXmethodsServicesStockquoteStockQuotePortType port = 
            			loc.getNetXmethodsServicesStockquoteStockQuotePort();
            
            		// loop through all stock quotes the user is interested in
            		PortletPreferences prefs = request.getPreferences();
            		Iterator quoteKeys = prefs.getMap().keys().iterator();
            		String key;
            		Float quote;
            		StockBean quoteBean = new StockBean();
            		while ( quoteKeys.hasNext() ) {
            			key = quoteKeys.next();
            	    		quote =  port.getQuote (key);
            			quoteBean.add(key, quote);
            		}
            
            		request.setAttribute("StockQuoteBean", quoteBean);
            
            		// render stock quotes using a JSP        
                    PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("jsp/View.jsp");
                    rd.include(request,response);
            
            	}
            }
            			
            												
            										

            這一部分演示了您可以如何使用 Java Portlet 規(guī)范來實(shí)現(xiàn) UI 服務(wù),以及您的 Portlet 可以如何調(diào)用其他 Web 服務(wù)。下一部分將展示如何使用 WSRP 將 UI 作為 Web 服務(wù)發(fā)布。

            用于遠(yuǎn)程 Portlet 的 Web 服務(wù)

            WSRP 是遠(yuǎn)程呈現(xiàn) Portlet 的標(biāo)準(zhǔn),使門戶能夠從多個源聚合內(nèi)容。WSRP 將 Web 服務(wù)的集成能力擴(kuò)展到面向表示的組件,并將視圖層公開為跨平臺、實(shí)現(xiàn)語言和供應(yīng)商共享。可以發(fā)現(xiàn)內(nèi)容和應(yīng)用程序提供者并將其插入遵循標(biāo)準(zhǔn)的應(yīng)用程序中,而不必進(jìn)行任何額外的編程工作。

            典型的 Web 服務(wù)使用遠(yuǎn)程表示范例,這意味著所有的視圖邏輯在客戶機(jī)上執(zhí)行,而應(yīng)用程序邏輯和數(shù)據(jù)層(控制器和模型)則駐留于服務(wù)器上。與此相反,WSRP 使用分布式范例將客戶機(jī)和服務(wù)器的表示分開。


            圖 1. 面向數(shù)據(jù)的 Web 服務(wù)和 WSRP 面向表示的 Web 服務(wù)的比較
            WSRP 比較

            上圖展示了這一差異。左邊是典型的面向數(shù)據(jù)的 Web 服務(wù),它提供了無格式的數(shù)據(jù);它必須完全依賴于客戶端的呈現(xiàn)代碼來表示數(shù)據(jù)。(這意味著需要在客戶機(jī)上安裝和管理客戶端應(yīng)用程序組件。)右邊是 WSRP 服務(wù);它的分布式表示邏輯將表示任務(wù)分成:

            • 生成標(biāo)記語言。
            • 將標(biāo)記片段聚合成一個 Web 頁面(沒有顯示)。
            • 通過標(biāo)準(zhǔn)客戶端容器呈現(xiàn)標(biāo)記語言。

            WSRP 示例

            清單 2 展示了一個通過簡單對象訪問協(xié)議(Simple Object Access Protocol,SOAP)從 WSRP 使用者發(fā)出的 WSRP getMarkup 請求的示例。


            清單 2. 通過 SOAP 發(fā)出的 WSRP GetMarkup 請求
            												
            																		<?xml version="1.0" encoding="UTF-8"?>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 				 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
                  <soapenv:Body>
                     <getMarkup xmlns="urn:oasis:names:tc:wsrp:v1:types"> 
                        <registrationContext>
                           <registrationHandle>192.168.66.57_1096235652731_0</registrationHandle> 
                        </registrationContext>
                        <portletContext>
                           <portletHandle>0.1</portletHandle>   
                        </portletContext>   
                        <runtimeContext>    
                           <userAuthentication>wsrp:none</userAuthentication>    
                           <portletInstanceKey>ProxyTest_row1_col1_p1</portletInstanceKey>    
                           <namespacePrefix>Pluto_ProxyTest_row1_col1_p1_</namespacePrefix>   
                        </runtimeContext>   
                        <userContext>    
                           <userContextKey>dummyUserContextKey</userContextKey>   
                        </userContext>   
                        <markupParams>    
                           <secureClientCommunication>false</secureClientCommunication>    
                           <locales>en</locales>    
                           <locales>de</locales>    
                           <mimeTypes>text/html</mimeTypes>    
                           <mode>wsrp:view</mode>    
                           <windowState>wsrp:normal</windowState>    
                           <clientData>     
                              <userAgent>WSRP4J Proxy Portlet</userAgent>    
                           </clientData>    
                           <markupCharacterSets>UTF-8</markupCharacterSets>    
                           <validNewModeswsrp:view</validNewModes>    
                           <validNewModes>wsrp:help</validNewModes>    
                           <validNewModes>wsrp:edit</validNewModes>    
                           <validNewWindowStates>wsrp:normal</validNewWindowStates>>    
                           <validNewWindowStates>wsrp:maximized</validNewWindowStates>    
                           <validNewWindowStates>wsrp:minimized</validNewWindowStates>   
                        </markupParams>  
                     </getMarkup> 
                  </soapenv:Body>
               </soapenv:Envelope>
             			
            												
            										

            WSRP 生產(chǎn)者對這個請求的響應(yīng)是 HTML 片段,使用者(通常是門戶)可以將其聚合成一個完整的文檔,例如門戶頁面。

            不是將每個應(yīng)用程序或 Portlet 部署到有意使用它的每個服務(wù)器上,而是跨網(wǎng)絡(luò)邊界共享應(yīng)用程序,這具有明顯的優(yōu)勢。WSRP 支持:

            • 更簡單的管理——門戶管理員可以瀏覽要提供的 WSRP 服務(wù)的注冊中心,而不是管理可插入組件的本地部署。用戶受益于及時使用隨需應(yīng)變的新服務(wù)和內(nèi)容集成。
            • 負(fù)載分配——跨多個服務(wù)器分配負(fù)載。
            • 減少基礎(chǔ)設(shè)施成本——應(yīng)用程序可以共享承載的基礎(chǔ)設(shè)施。例如,只分配后端銀行應(yīng)用程序的表示層(通過 WSRP)保護(hù)了應(yīng)用程序提供者的安全計(jì)算環(huán)境,而與此同時,用戶仍可以與共享的 UI 進(jìn)行交互。
            • 控制內(nèi)容表示——在門戶重新分配內(nèi)容時,內(nèi)容和應(yīng)用程序提供者可以極大地?cái)U(kuò)展新用戶的范圍。






            門戶:面向服務(wù)的 UI 的動態(tài)集成

            門戶的視圖層將多個后端服務(wù)的 UI 集成為一個集中管理的 UI,這樣可以統(tǒng)一分離的 IT 基礎(chǔ)設(shè)施,并通過控制單一的 UI 向用戶提供 IT 服務(wù)的單一視圖。最初分開設(shè)計(jì)的應(yīng)用程序可以連接起來構(gòu)成組合應(yīng)用程序,用于支持新的功能。例如,連接到協(xié)作 Portlet 的電子郵件 Portlet 可以過濾收件箱,使僅當(dāng)寄件人在線并可以聊天時才顯示所收到的電子郵件——這種能力是這兩個原始應(yīng)用程序所不具備的。

            這種 portal 模型的重要意義在于改善了隨需應(yīng)變業(yè)務(wù) (On Demand Business) 的敏捷性。管理員成為應(yīng)用程序集成者,定義新的頁面,向它們添加 Portlet,將 Portlet 連接在一起并設(shè)置權(quán)限(訪問控制)——不用編程——來創(chuàng)建新的組合應(yīng)用程序。自服務(wù)的門戶使用戶可以改變他們的工作環(huán)境,以適應(yīng)他們獨(dú)特的需求。門戶體系結(jié)構(gòu)解放了應(yīng)用程序開發(fā)人員,使其能夠全神貫注地創(chuàng)造新的業(yè)務(wù)價(jià)值。

            將來,門戶甚至能夠集成組合服務(wù),因而能夠在更高的層次上聚合 UI。門戶可以無縫地與來自其他門戶的內(nèi)容相集成,從而提供水平的、企業(yè)級的內(nèi)容集成。







            總結(jié)

            使用門戶/Portlet 體系結(jié)構(gòu),將 SOA 概念應(yīng)用到用戶界面,并委派公共的軟件生命周期功能給 UI 容器,這改善了軟件開發(fā)人員的時間價(jià)值 (time-to-value)。WSRP 標(biāo)準(zhǔn)通過 Web 服務(wù)交付 UI 組件,為內(nèi)容提供者和內(nèi)容使用者提供便利,從而在不用進(jìn)行任何編程的情況下支持某種類型的應(yīng)用程序集成。

            posted on 2006-04-17 04:01 wsdfsdf 閱讀(189) 評論(0)  編輯 收藏 引用 所屬分類: 技術(shù)文章

            99精品国产在热久久| 久久综合精品国产一区二区三区 | 人妻无码中文久久久久专区| 99久久夜色精品国产网站| 亚洲精品乱码久久久久久久久久久久 | 久久国产色AV免费观看| 国产午夜久久影院| 色青青草原桃花久久综合| 一本色道久久HEZYO无码| 久久线看观看精品香蕉国产| 精品久久久久久无码国产| 久久久精品人妻一区二区三区蜜桃| 久久久久久精品免费免费自慰| 久久99国产精品久久99果冻传媒| 久久久免费观成人影院| 久久久久AV综合网成人| 久久精品中文字幕有码| 久久精品国产第一区二区三区 | 久久亚洲国产精品五月天婷| 国内精品九九久久久精品| 欧美粉嫩小泬久久久久久久| 久久99国产精品久久久| 一本久久a久久精品亚洲| 久久久噜噜噜久久中文字幕色伊伊| 久久99国产综合精品| 亚洲综合伊人久久综合| 日日狠狠久久偷偷色综合0| 久久久91精品国产一区二区三区| 日韩人妻无码精品久久久不卡| 久久久免费观成人影院 | 久久人爽人人爽人人片AV| 热久久最新网站获取| 久久丝袜精品中文字幕| 国内精品伊人久久久久影院对白 | 久久久久亚洲Av无码专| 思思久久精品在热线热| 亚洲国产成人精品无码久久久久久综合 | 亚洲国产欧美国产综合久久| 一本色道久久88综合日韩精品 | 91精品日韩人妻无码久久不卡| 久久亚洲AV成人出白浆无码国产|