解析SCA中的基本概念(5)
網(wǎng)址:
http://tech.51cto.com/art/200701/37675.htm 1.5.2JSP客戶(hù)端代碼片斷分析
那么如何在JSP頁(yè)面中來(lái)調用我們的HelloWorld服務(wù)組件呢?按照前面的介紹,我們需要通過(guò)StandaloneReference來(lái)調用。那么我們如何才能得到這個(gè)StandaloneReference的引用呢?這里涉及到SCA編程模式中很重要的一個(gè)概念,那就是ServiceManager。ServiceManager是一個(gè)SCA環(huán)境的核心類(lèi),全名為com.ibm.websphere.sca.ServiceManager。這個(gè)類(lèi)的作用主要就是能夠讓客戶(hù)端去定位一個(gè)服務(wù)提供方。一般調用的方式是通過(guò)ServiceManager的locateService(StringserviceRefName)方法。拿到服務(wù)之后,客戶(hù)端就可以調用服務(wù)中所提供的方法了。(熟悉J2EE編程的人員可以聯(lián)系對比JNDI的Lookup方法。)下面分別根據StandaloneReference引用的接口類(lèi)型來(lái)分析主要JSP代碼片斷。
當接口類(lèi)型是WSDL接口的情況
1.首先需要在JSP中導入相關(guān)的類(lèi),主要如下:
<%@pageimport="com.ibm.websphere.sca.ServiceManager"%> <%@pageimport="com.ibm.websphere.sca.Service"%> <%@pageimport="commonj.sdo.DataObject"%>
2.生成ServiceManager對象,并拿到相應的服務(wù)。
ServiceManagerserviceManager=newServiceManager(); Serviceservice=(Service)serviceManager.locateService ("HelloWorldInterfacePartner");
這里locateService()方法中的參數是standalonereference的實(shí)際名稱(chēng)。從某種程度上我們可以把外部的JSP/Servlet的Java代碼看成是Standalonereference的實(shí)現,這樣來(lái)理解服務(wù)組件之間的相互調用。
3.調用服務(wù)的方法。
Stringmsg=request.getParameter("message"); DataObjectresp=(DataObject)service.invoke("sendMessage",msg);
由于我們這里使用的是WSDL接口類(lèi)型,因此返回結果是以DataObject的形式存在。
4.顯式得到的結果。
<%=resp.getString("status")%>
通過(guò)調用DataObject的getString方法,我們拿到實(shí)際的返回結果,名為status的字符串。
當接口類(lèi)型是Java接口的情況
1.首先需要在JSP中導入相關(guān)的類(lèi),主要如下:
<%@pageimport="com.ibm.websphere.sca.ServiceManager"%> <%@pageimport="com.ibm.websphere.sca.Service"%> <%@pageimport="world.hello.hello.world.interface_.HelloWorldInterface"%>
2.生成ServiceManager對象,并拿到相應的服務(wù)。
ServiceManagerserviceManager=newServiceManager(); HelloWorldInterfaceservice= (HelloWorldInterface)serviceManager.locateService("HelloWorldInterfacePartner");
由于StandaloneReference的接口變成了Java接口,因此這里返回的服務(wù)可以直接造型成HelloWorldInterface類(lèi)型。
3.調用服務(wù)的方法。
Stringmsg=request.getParameter("message"); Stringresp=service.sendMessage(msg);
由于我們這里使用的是Java接口類(lèi)型,因此調用的方式就是正常的Java接口調用。
4.顯式得到的結果。
<%=resp%>
由于靜態(tài)調用方式得到的就是實(shí)際定義的類(lèi)型,因此這里字符串的顯式比較簡(jiǎn)單。
具體實(shí)際項目的代碼請參考本文附的項目交換文件包。
1.6結束語(yǔ)
本文介紹了SCA的主要目的和一些基本的概念,并展示了一個(gè)最為簡(jiǎn)單的服務(wù)組件例子。從上面的討論我們可以看到,SCA不但解決了統一調用的問(wèn)題,而且提供了一個(gè)服務(wù)組件架構。這個(gè)服務(wù)組件架構將在構建面向服務(wù)的架構中起到舉足輕重的作用,并在IBM的許多產(chǎn)品中會(huì )有所體現。