天天看點

java遠端調用方法總結java遠端調用方法總結

java遠端調用方法總結

前言:項目中使用到RMI、webService等遠端調用方法,各方法demo輸出,予以小結。

  • Java RMI (Remote Method Invocation)
  • WebService,如jax-ws axis xfire cfx
  • Httpinvoker
  • Hessian
  • Burlap
  • EJB遠端接口調用

1、Java RMI (Remote Method Invocation)

       JavaRMI即遠端方法調用,是jdk中内嵌的一個最底層的解決方案,它應用起來最輕量級,也最簡單,它不需要任何的web伺服器,直接在代碼中綁定IP位址和相應的端口,适用于非常簡單的小微應用。

       優點:

  • Full object support:RMI可将完整的對象作為參數和傳回值進行傳遞,而不僅僅是預定義的資料類型。
  • Cross platform:與java語言綁定,RMI隻支援Java;
  • Robust communications : 傳輸可靠
  • Large objects:這個優點了解不深,粗略了解可傳遞大對象;
  • Security for client and servers:RMI使用Java内置的安全機制保證下載下傳執行程式時使用者系統的安全。RMI使用專門為保護系統免遭惡意小程式侵害而設計的安全管理程式。
  • Distribution/updates of codes:遠端接口實際上就是Java接口,面向接口程式設計可輕松實作功能代碼的更新;

缺點:

  • Java RMI only supports Java : Java語言的遠端調用,兩端的程式語言必須是Java實作;
  • Requires non-standard port : RMI對伺服器的IP位址和端口依賴很緊密,但是在開發的時候不知道将來的伺服器IP和端口如何,但是用戶端程式依賴這個IP和端口。這也是RMI的局限性之一。這個問題有兩種解決途徑:一是通過DNS來解決,二是通過封裝将IP暴露到程式代碼之外。
  • Proprietary protocol by single vendor :RMI依賴于Java遠端消息交換協定JRMP(Java Remote Messaging Protocol),該協定為java定制,要求服務端與用戶端都為java編寫;
  • Requires RMI-lookup : 需要注冊(不明白為什麼屬于缺陷) 。

       RMI_Demo見附件。

2、WebService,如jax-ws axis xfire cfx

       WebService是很常見的遠端調用方法,其最大的優勢就是跨平台語言,無論用戶端是Java還是.NET都能輕松的調用。它采用SOAP(Simple Object Access Protocol)協定來封裝序列化的消息,實際上是形成一個xml檔案,可以通過http進行網絡傳輸。WebService的用戶端調用其實是使用生成檔案的方式,隻要知道釋出接口的URL即可,而不需要額外傳遞jar包或者class檔案。常見的WebService實作有jax-ws2.0、axis、xfire以及cfx,其中jax-ws2.0是jdk中封裝好的,有一定的靈活性,但是這種把架構内嵌進入JVM其實對其可控性大大降低;axis有1.0和2.0兩個版本,這個不是太了解;xfire和cfx其實是一個源頭,xfire在07年停止開發,和另外一個架構合并形成了cfx,是一個比較受歡迎的WebService實作。

      WebService 的主要目标是跨平台的可互操作性。

       優點:

  • 跨防火牆的通信:一般要通路的Web伺服器以及要通路的Web Service的用戶端很可能位于防火牆後面,都預設關閉其它端口而開放HTTP端口,而Web service 正是基于HTTP的,是以它可以穿越防火牆;
  • 應用程式內建:可以實作不同應用程式和在不同系統平台上開發出來的應用程式之間通信。與RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作為基本通信協定進而避免了複雜的協定轉換;
  • B2B 的內建:跨公司的商務交易內建通常叫做B2B 內建。通過WebService ,公司可以把關鍵的商務應用“ 暴露” 給指定的供應商和客戶,隻要把商務邏輯“ 暴露” 出來,成為WebService ,就可以讓任何指定的合作夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運作,使用什麼 開發語言。這樣就大大減少了花在B2B 內建上的時間和成本,讓許多原本無法承受EDI 的中小企業也能實作B2B 內建。

        缺點:

  • 單機應用程式:單機應用程式隻要與本機上的其他程式通訊,這種情況下使用WebService消耗太大,而且不會帶來任何好處;
  • 區域網路的同構應用程式:簡言之,還是性能問題。隻要從應用程式結構的角度看,有别的方法比WebService更有效、更可行,那就不要用WebService。

3、Httpinvoker

        Spring HTTP invoker 是 spring 架構中的一個遠端調用模型,執行基于 HTTP 的遠端調用(意味着可以通過防火牆),并使用 Java 的序列化機制在網絡間傳遞對象。用戶端可以很輕松的像調用本地對象一樣調用遠端伺服器上的對象,這有點類似于 webservice ,但又不同于 webservice。

       這裡簡單與WebService作對比來介紹Httpinvoker:

webservice Http Invoker
跨平台,跨語言 隻支援 java 語言
支援 SOAP ,提供 wsdl 不支援
結構龐大,依賴特定的 webservice 實作,如 xfire等 結構簡單,隻依賴于 spring 架構本身

4、Hessian

hessian是一種高效簡潔的遠端調用架構,它采用的是二進制RPC協定(Binary),具有輕量、傳輸量小、平台無關的特點,特别适合于目前網絡帶寬比較小的手機網絡應用項目。類似于WebService,不過不使用SOAP協定,而是用Binary RPC協定,相比webservice而言更簡單、快捷。它把協定封包封裝到http封包中,通過HTTP信道傳輸。Hessian是通過servlet提供遠端服務,完全使用動态代理來實作的,推薦采用面向接口程式設計,是以,Hessian服務建議通過接口暴露。

       優點:

  • 簡單易用,面向接口,通過接口暴露服務,jar包隻有200、300k,不需要配置防火牆;
  • 效率高,複雜對象序列化速度僅次于RMI,簡單對象序列化優于RMI,二進制傳輸;
  • 多語言支援:wiki、Java、Flash/Flex、Python、C++、.NET C#、PHP、Ruby、Objective-C
  • 可與Spring內建,配置簡單,使用HessianServiceExporter提供bean服務。

        缺點:

  • 缺乏安全機制,傳輸沒有加密處理;
  • 異常機制不完善,總是報一些錯誤,錯誤原因也是千奇百怪,提示資訊不足;
  • 事務處理欠缺;
  • 版本問題,伺服器端和用戶端通常要保持一緻的版本,否則會出現莫名其妙的問題;
  • 其支援的資料類型是有限制的,不支援複雜的對象。

 5、Burlap

    Burlap是将網絡傳輸的對象轉換為XML文本格式通過Http進行傳遞,支援的對象與Hessian相比更少。XML一般比二進制流占 用空間大,在網絡上傳遞所需要的時間比二進制流長,XML的解析過程也會耗用更多的記憶體。Burlap可以穿透防火牆,而且由于傳輸的格式是XML文本, 可以與其他系統(比如.NET)內建,從某種程度來講,Burlap是一種不标準的WebService。

   好像不常用。

6、EJB遠端接口調用

       目前暫未接觸EJB,沒做過深入了解。

相關連結:

http://developer.51cto.com/art/200906/130417.htm

http://blog.sina.com.cn/s/blog_5f53615f01014xfd.html

繼續閱讀