一、一些概念
????WebService技術(shù)現(xiàn)在幾乎無處不在,以前玩.NET的時(shí)候最開始接觸這個(gè)概念,C#語言對(duì)WebService近似原生性的支持使我們用C#可以非常迅速的開發(fā)出一個(gè)WebService,沒有任何復(fù)雜煩擾的步驟。
????后來沒有機(jī)會(huì)再在.Net Framework上面開發(fā),轉(zhuǎn)投了Java的懷抱,想要開發(fā)出一個(gè)WebService感覺比較,搞一堆命令生成一堆什么代碼,好不容易才能搭出來,嘗試一次之后終于還是放棄了,覺得麻煩。
????Java6.0出來之后對(duì)WebService也說原生支持了,所以再做畢業(yè)設(shè)計(jì)的時(shí)候想到體驗(yàn)一下Java6.0的WebService,果然容易上手很多,易用。畢業(yè)設(shè)計(jì)把這個(gè)計(jì)算在內(nèi),智能設(shè)備+WebService可以作為系統(tǒng)應(yīng)用的一部分。
???開始代碼之前先大概說說我對(duì)這幾個(gè)概念的理解
????WebService 是分布式應(yīng)用程序組件,這么說可能太抽象,這其實(shí)以經(jīng)不是一個(gè)新的概念了,但是突然間要解釋這個(gè)名次還比較不容易。它其實(shí)是構(gòu)建在已有技術(shù)基礎(chǔ)上的一個(gè)概念,WebService的核心是xml、soap、wsdl等,客戶可以通過web請(qǐng)求的方式使用WebService。或者說得更通俗點(diǎn)就是服務(wù)提供商把他提供的服務(wù)發(fā)布到Internet上,然后客戶可以通過Internet使用這個(gè)服務(wù)。
????RMI這個(gè)東西上手也不那么容易,不過這個(gè)概念可以簡(jiǎn)單點(diǎn)來理解,就是不同JVM之間通訊的一個(gè)手段,這里調(diào)用的是Java代碼。不同的JVM可以在不同的機(jī)器上或者是同一臺(tái)機(jī)器上。這個(gè)純Java的分布式應(yīng)用的一個(gè)典型的Solution. RMI技術(shù)和CORBA互為補(bǔ)充。
???
???對(duì)于CORBA我沒有詳細(xì)學(xué)習(xí)過,不過概念很容易懂,CORBA 允許應(yīng)用程序和其他的應(yīng)用程序通訊,而不論他們?cè)谑裁吹胤交蛘哂烧l來設(shè)計(jì)。CORBA和語言實(shí)現(xiàn)是無關(guān)的,C++和Java實(shí)現(xiàn)的系統(tǒng)通過CORBA通信。EMA里面就有這個(gè)CORBA。
二、協(xié)作的需求模型
????下面切入正題,說說WebService和RMI的協(xié)作。我們先來看這個(gè)需求的模型是怎么樣的。看下圖
???????????????????????????????
?
???系統(tǒng)要求有Smart device對(duì)遠(yuǎn)程的JVM2里的程序控制,所以我們引入了WebService,通過WebService間接調(diào)用JVM2里的東西,WebSerivce本身運(yùn)行在JVM1,JVM1和JVM2可以在不同機(jī)器上,這里demo程序是在一臺(tái)機(jī)器上運(yùn)行的。
???WebService在這里既是SmartDevice的Server端,又是RMI的Client端。RMI的Server端在JVM2的App里作為一部分服務(wù)存在。
三、代碼分解,下面我們開始demo這個(gè)協(xié)作的代碼
3.1 首先我們抽象一個(gè)RMI的Interface















簡(jiǎn)單的接口,一個(gè)是獲得時(shí)間的,一個(gè)是獲取隨便什么消息的接口
3.2實(shí)現(xiàn)RMI的Server端






































?





































3.3我們可以先寫個(gè)RMI的Client測(cè)試一下








































??????由于在本機(jī)上,省略了ip什么的,如果對(duì)這段代碼不是很懂,建議看后面的參考資料
??????測(cè)試方法,先運(yùn)行Server,再運(yùn)行Client,不出以外,你能看到2008年5月10號(hào)。
3.4我們開始實(shí)現(xiàn)我們的WebService Server端
??????Java6.0實(shí)現(xiàn)WebService也很簡(jiǎn)單,我直接貼代碼了。Server端如下,如果不太懂,還是建議看后面的參考資料









































































3.6實(shí)現(xiàn)WebService的客戶端
??????首先cd到src目錄,然后敲wsimport -keep http://localhost:8435/MyTimeServer?wsdl這個(gè)會(huì)自動(dòng)生成一堆代碼,基本上可以理解為stub一類的東西
??????然后我們就可以直接調(diào)用啦




























到此為止,這個(gè)WebService和RMI的協(xié)作完成了,代碼盡量精簡(jiǎn)了
參考資料:
??????JAVA RMI 實(shí)例-damies -JavaEye技術(shù)社區(qū),? RMI的入門資料,很容易看懂
??????交口稱贊?blog中 關(guān)于java 6.0?WebService的部分,也是很好的新手學(xué)習(xí)資料
??????