相關閱讀:
2. Java WebService異構系統通信的原理及特點:SOAP與WSDL
3.Java EJB、CORBA、Webservices分布式通信基本原理及特點
假設有兩個服務器,本地的服務器采用的是Java開發的,遠程的是一個采用C#開發的天氣預報的服務器,二者可以通過以下幾種方式通信
1、如果二者不采用某些技術來通信的話,也是可以的
比如遠程服務器開放數據庫表,然后本地服務器使用JDBC訪問這個開放的數據庫表,也能夠實現分布式通信
只不過開放數據庫表的做法,不太好。會暴露表結構、安全性也不是特別好、並且也是不標准的
另外有些數據,並不是單純的一張表就能體現出來的,可能要通過一定的算法計算出來結果的
2、如果二者采用WebServices通信的話,那么就是使用SOAP協議來交互數據,該數據就是采用HTTP協議傳送XML文件
但此時雙方進行通信的過程中,由於采用的是SOAP協議,所以雙方交換的數據是大文本(通常是XML文件)文件
這時就有一個問題:假設需要請求10000條數據,那么所交換的這個大文本文件的體積,將會是非常大的,傳送的過程就會很耗時
有一個解決辦法是:可以讓Java通過它的ZIP API壓縮該XML文件,然后上傳到FTPServer上,服務端再下載這個壓縮后的XML文件
接着服務端再解壓縮這個XML文件,然后讀取,再進行相應的處理,這也是解決SOAP協議傳遞大文本文件的速度特別慢的辦法之一
3、可以令遠程服務器把天氣預報的數據,定時的上報到某一個FTPServer,然后客戶端的Java程序也定時的到FTPServer上取數據
4、第三種方式的缺點是不實時。我們也可以讓客戶端發送消息給遠程的服務端,服務端會偵聽,然后再發送消息返回給客戶端
5、二者采用純粹的IIOP(屬於CORBA技術架構)協議來通信
6、如果遠程服務器是采用EJB開發的,那么二者可以通過RMI-IIOP協議通信。而RMI-IIOP協議采用的是二進制傳輸,效率會更快
由於EJB也應用了CORBA的IIOP協議,所以在異構系統整合的時候,CORBA的互通性會比較好
步驟大致是服務器端先把EJB注射到JNDI樹上,然后客戶端的Java程序lookup這個JNDI樹上對應的名字,這樣EJB就傳過來了
也就是說此時Stub就動態的傳到客戶端的Java程序中了,然后客戶端就調用Stub,接下來就是Stub和Skeleton打交道了
另外EJB只能使用Java來寫,但是可以使用CORBA技術來調用EJB
在EJB1.X的時候,對於分布式通信的服務的支持還很差
比如寫一個EJB的話,則至少要寫三個類,然后編譯,編譯成Stub和Skeleton,這時大約會編譯出來5、6個類
后來有所改善,最先改的就是JBOSS。開發JBOSS的EJB容器的這個人,在Java技術上是非常厲害的一個人,傳說中的大牛吧
他引入了JDK的動態代理來完成Stub的自動生成,所以EJB的開發就簡單了一些,只寫三個類就可以了,存根會在運行時生成
也就是在把EJB注射到JNDI上之后,我們就可以在另一個JVM里面lookup這個JNDI的名字,這樣便得到了EJB
然后它就會序列化的把EJB傳送到客戶端,它傳的就是Stub,而它在JVM內存里面是看不見的
當我們在客戶端調用相應方法的時候,其實在內存里面調用的就是Stub,然后Stub再與遠端打交道