月蝕傳說

          浮躁讓人失去理智
          posts - 25, comments - 101, trackbacks - 0, articles - 0
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理
          1.簡介

          Entry Point是SCA中模塊的“入口”。模塊可以通過Entry Point將自身定義好的組件(Component)發(fā)布成一個可供外部遠(yuǎn)程訪問的服務(wù),這所謂的“遠(yuǎn)程服務(wù)”都是通過一些標(biāo)準(zhǔn)的協(xié)議進(jìn)行訪問的,最常見的就是Web服務(wù),所以我們可以這樣去理解Entry Point:

          Entry Point是將SCA組件發(fā)布成各種可供標(biāo)準(zhǔn)遠(yuǎn)程技術(shù)所訪問模型,這里的遠(yuǎn)程訪問技術(shù)可以是Web Service,JMS或者EJB等。

          在這篇文章中,我將介紹如何使用Balto SCA容器,利用Entry Point來將已有的組件發(fā)布成一個可用Web服務(wù)。對SCA中組件的概念不明白的讀者可以先看看SCA程序設(shè)計(jì)系列的第一篇《本地服務(wù)》,或者可以看一下《淺談SCA》,都能幫助你理解一些SCA基本的概念。

          2.如果定義Entry Point

          Entry Point的定義是寫在sca.module文件中的,它的XML格式如下:

          < entryPoint? name ="xs:NCName" ?multiplicity ="0..1?or?1..1?or?0..n?or?1..n" ? > *
          ???? < interface .interface-type />

          ??? ?< binding .binding-type?uri ="xs:anyURI" /> +
          ???? < reference > wire-target-URI </ reference >

          </ entryPoint >

          下面簡單介紹一下Entry Point的XML文章中各個元素以及屬性的含義:

          首先是entryPoint的屬性name,這個屬性是表示的是該Entry Point的名稱

          interface元素是指entryPoint對應(yīng)的接口。(讀者可以看一下《本地服務(wù)》,了解更多interface的信息)

          binding元素表示entryPoint在發(fā)布該遠(yuǎn)程服務(wù),采用的什么樣的遠(yuǎn)程協(xié)議進(jìn)行綁定的。通常情況下都使用的是WebService Binding,除此之外,還有Ejb,JMS的Binding。

          reference元素是指該Entry Point將哪個組件做為遠(yuǎn)程服務(wù)發(fā)布的實(shí)際調(diào)用對象。或者我們理解為:將哪個組件做為遠(yuǎn)程服務(wù)發(fā)布了出去

          在這一篇文章中我們只討論基于Web服務(wù)的綁定方式,所以整篇文章中所提到的Binding,都是WebService Binding。

          組件通過Entry Point發(fā)布出去后,外部就可以通過Entry Point所設(shè)置的Binding的具體網(wǎng)絡(luò)協(xié)議對該組件進(jìn)行訪問。也就是說,如果我們想要使本地的一些Java類發(fā)布成一個Web Service,那在SCA容器中,只需要將這個Java類做成組件,然后再發(fā)布成Web服務(wù)綁定的Entry Point;同樣我們還可以把它發(fā)布成EJB的形式。更重要的是,如果我們在Entry Point中,指定了多種Binding方式,那該組件服務(wù)就可以通過多種遠(yuǎn)程協(xié)議進(jìn)行訪問。

          3.示例

          為了證明Entry Point的確能夠幫助開發(fā)人員簡單地發(fā)布Web 服務(wù),這里我們來一個示例工程。
          示例工程代碼下載

          準(zhǔn)備工作:
          下載WTP 1.0 下載Balto SCA

          首先我們將下載好的Balto SCA容器釋放到某處,然后在WTP的首選項(xiàng)中,找到Server項(xiàng),然后添加一個Tomcat 5.5 Runtime,路徑指向剛才釋放的Balto SCA的地方:

          install_balto.JPG


          小貼士:在上一篇文章《ExternalService應(yīng)用》中我已經(jīng)提到了,Balto?SCA是整合了Tomcat,Balto本身就是一個Tomcat容器,只是修改了Tomcat的一些信息,能對部署的Web應(yīng)用進(jìn)行SCA方面的一些管理,所以使用Balto?SCA就像使用Tomcat一樣。


          在WTP中新建一個動態(tài)Web工程,取名為balto_entrypoint_test

          new_wtp_pro.JPG



          然后我們建立一個接口Cat

          @Remotable
          public ? interface
          ?Cat?{
          ????
          int
          ?getAge();
          ????
          ????
          float
          ?getWeight();
          ????
          ????String?getName();
          ????
          ????AppearanceTypeImpl?getAppearance();
          ????
          ????String?callingIt(String?name);
          }

          注意,該接口我們利用了SCA的Remotable標(biāo)簽進(jìn)行標(biāo)識,這是因?yàn)锽alto?容器中,對Entry?Point所指定的組件接口是有一定要求的,該要求就是要這個組件是一個遠(yuǎn)程的,所以這里我們需要構(gòu)建一個Remotable的組件接口

          接下來我們做一個類MyCat,實(shí)現(xiàn)Cat接口,并且指明該MyCat是一個組件,而服務(wù)則接口則是Cat接口,也就是在MyCat類上標(biāo)明@Service 標(biāo)簽(不明白的讀者可以看SCA程序設(shè)計(jì)第一篇文章 《本地服務(wù)》

          @Service(Cat. class )
          public ? class ?MyCat? implements
          ?Cat?{

          ????
          public ? int
          ?getAge()?{
          ????????
          return ? 1
          ;
          ????}

          ????
          public ? float
          ?getWeight()?{
          ????????
          return ? 10.89f
          ;
          ????}

          ????
          public
          ?String?getName()?{
          ????????
          return ? " DuoDuo "
          ;
          ????}

          ????
          public
          ?AppearanceTypeImpl?getAppearance()?{
          ????????AppearanceType?app?
          =
          ?AppearanceFactory.eINSTANCE.createAppearanceType();
          ????????
          ????????EyesType?eyes?
          =
          ?AppearanceFactory.eINSTANCE.createEyesType();
          ????????
          ????????CoatType?coat?
          =
          ?AppearanceFactory.eINSTANCE.createCoatType();
          ????????
          ????????eyes.setColor(
          " Deep?Blue "
          );
          ????????
          ????????coat.setColor(
          " White "
          );
          ????????coat.setHeight(
          " Height "
          );
          ????????
          ????????app.setCoat(coat);
          ????????app.setEyes(eyes);
          ????????
          return
          ?(AppearanceTypeImpl)app;
          ????}

          ????
          public
          ?String?callingIt(String?name)?{
          ????????
          return ? " Hello? " ? + ?name? + ? " ?,?MIAO~~~ "
          ;
          ????}

          }

          好了,上面的創(chuàng)建好的Cat接口以及MyCat實(shí)現(xiàn)類,已經(jīng)為我們的整個SCA模塊生成了一個可用的Component了。

          Balto在解析Java Annotation的時候,如果發(fā)現(xiàn)了@Service標(biāo)簽,就會主動將這個類注冊成為一個Component,并且,該Component的名字是它對應(yīng)的服務(wù)接口的名字,這里也就是Cat。

          接下來就是要將這個Component接到Entry Point上,并通過Web服務(wù)發(fā)布出去。

          在工程的src下新建一個sca.module文件(必須在src下),我們在文件中寫入:

          <? xml?version="1.0"?encoding="ASCII" ?>
          < module? xmlns ="http://www.osoa.org/xmlns/sca/0.9"
          ????xmlns:v
          ="http://www.osoa.org/xmlns/sca/values/0.9"
          ????name
          ="balto_entryPoint_test" >
          ????
          < entryPoint? name ="Cat" >
          ????????
          < interface .java?interface ="org.uxteam.balto.test.Cat" ? />
          ????????
          < binding .ws
          ????????????port
          ="http://localhost:8080/balto_entrypoint_test/sca/services/LookingCat?
          ????????????????? wsdl#wsdl.endpoint(LookingCatService/LookingCatServiceSOAPBinding)"
          ? />

          ????????
          < reference > Cat </ reference >
          ????
          </ entryPoint >
          </ module >

          這個就是我們所定義的Entry Point

          Web服務(wù)名 : Cat
          interface:java接口,接口類是Cat接口
          binding :Web服務(wù)綁定,但后面port給出的信息在目前的Balto版本中是不會關(guān)心的。
          reference:指定了我們剛才建立的Cat組件。

          現(xiàn)在我們打開WTP的Server視圖:

          new_server.JPG

          新建一個Server,Runtime就是我們的Balto,然后再將剛做的balto_entrypoint_test工程加入到server中,啟動!

          我們會發(fā)現(xiàn)在控制臺打出了一些信息,如果沒有發(fā)生異常,Balto SCA容器就算是啟動成功了:

          balto_entrypoint_console.JPG

          測試Web服務(wù)

          我們現(xiàn)在需要測試一下發(fā)布出去的Web服務(wù)是否能用。

          首先,打開WTP的Web服務(wù)測試Web頁面:

          web_service_explorer.JPG



          然后選擇WSDL Page項(xiàng),我們會發(fā)現(xiàn)一下的一個界面,在文本中輸入:

          http://localhost:8080/balto_entrypoint_test/sca/services/Cat?wsdl

          小貼士:Balto容器在處理Web服務(wù)使用的是Axis2,也就是說純粹的是通過Axis2的Servlet來處理Web服務(wù)請求的,所以,Balto在Web應(yīng)用啟動的階段,為這些輸入SCA管理范圍內(nèi)的Web應(yīng)用,動態(tài)加入了Axis2,而由于目前Balto并不完善,所以在處理Servlet-Mapping的時候,都默認(rèn)給出了“/sca/services”做為Web服務(wù)映射的URL。從上面這段URL可以看出,這是一個請求WSDL文檔的URL。


          點(diǎn)擊GO后我們發(fā)現(xiàn)在頁面左側(cè)出現(xiàn)了一個樹形結(jié)構(gòu)的東西。點(diǎn)開它,呵呵,看見了沒,我們發(fā)布的Web服務(wù)方法全在這兒呢。

          cat_ws.JPG

          隨便選擇一個,然后在右側(cè)輸入?yún)?shù)后點(diǎn)擊GO。成功后在Status中我們可以點(diǎn)開Source,查看一下返回的SOAP相信信息。我們拿callIt做個例子:

          return_source.JPG

          信息準(zhǔn)確無誤,成功了。

          4.小結(jié)

          我們這里所提到的Entry Point是在SCA 0.9規(guī)范中給出了,而在0.9版本后,Entry Point已經(jīng)改名了.

          通過Entry Point這種"暴露服務(wù)"方式,開發(fā)人員能夠很容易地將自己的Component注冊成為一個遠(yuǎn)程可用的服務(wù),這正是SOA中所提出的那樣:服務(wù)是可運(yùn)行在獨(dú)立節(jié)點(diǎn)上的,利用規(guī)范的接口描述,讓消費(fèi)者能夠在任何地方訪問到.SCA中所提出的Entry Point其實(shí)就是一個獨(dú)立服務(wù)的訪問入口,所以在SCA規(guī)范的0.9版本以后Entry Point這個名詞就沒有再沿用,而是支持將它改為了Service,這更能準(zhǔn)確地表明它的性質(zhì)吧.

          本文中并沒有具體講解如何使用XSD中的復(fù)雜類型來作為Web服務(wù)中的類型,但示例工程中是有的,有興趣的朋友可以看一看.

          本人文筆有限,有什么不對的地方還請大家指出,謝謝收看,再見。


          評論

          # re: SCA程序設(shè)計(jì)——Entry Point : 讓W(xué)eb服務(wù)發(fā)布簡單起來  回復(fù)  更多評論   

          2006-12-01 11:15 by 壞男孩
          寫的太詳細(xì)了,,,

          # re: SCA程序設(shè)計(jì)——Entry Point : 讓W(xué)eb服務(wù)發(fā)布簡單起來  回復(fù)  更多評論   

          2007-01-16 20:35 by teamlet
          SCA 規(guī)范 0.95已經(jīng)把Entry Point,Moduel換掉改稱為Service,Composite

          # re: SCA程序設(shè)計(jì)——Entry Point : 讓W(xué)eb服務(wù)發(fā)布簡單起來  回復(fù)  更多評論   

          2007-06-19 16:01 by wsalvin
          OSOA已發(fā)布 SCA 1.0版 2007-03-15

          # re: SCA程序設(shè)計(jì)——Entry Point : 讓W(xué)eb服務(wù)發(fā)布簡單起來  回復(fù)  更多評論   

          2007-09-03 21:02 by jackyrong
          由于本人公司里存在不少遺留系統(tǒng),有用java,php,asp,asp.net的四類系統(tǒng),而且還有不少和合作伙伴的接口程序(之前都是用HTTP來交換數(shù)據(jù)的),現(xiàn)在而且本人的碩士畢業(yè)
          論文設(shè)計(jì)也是做SOA方面的,但目前遇到了一個難題,那就是到底SOA應(yīng)該如何從開始進(jìn)行架構(gòu)設(shè)計(jì),如何提煉業(yè)務(wù),并且如何將SOA的思想應(yīng)用到公司的實(shí)際系統(tǒng)中,我目前只整理了一下,感覺可以用到SCA/SDO/BPEL/ESB這些東西,ESB打算用MULE的開源,
          SCA/SDO打算用APACHE的TUSCANY,但不知道有什么好的架構(gòu)設(shè)計(jì)的方法呢?
          主站蜘蛛池模板: 公安县| 尉氏县| 韶山市| 福安市| 习水县| 临澧县| 兴山县| 天津市| 渝中区| 崇明县| 山东省| 台湾省| 江阴市| 江油市| 青冈县| 大埔县| 竹北市| 黑龙江省| 宣恩县| 晋宁县| 临沂市| 咸宁市| 淄博市| 南开区| 望谟县| 绥江县| 六安市| 四子王旗| 博客| 南丰县| 敦煌市| 深圳市| 扶余县| 乐业县| 营口市| 汉川市| 博乐市| 林甸县| 巴东县| 中牟县| 云浮市|