基于java平臺的企業應用可以通過Java隧道技術實現應用在因特網上部署。Java隧道技術用現有的Web Server和Servlet容器就可以建立Java消息隧道和遠程方法調用。由于基于Http協議,所以Java隧道是防火墻透明的隧道。Java隧道技術對于基于Java平臺的因特網企業應用是一個不錯的選擇。
在以因特網為基礎的企業應用中,穿越防火墻是企業應用系統必須面對的問題。而Http協議是唯一一個可以在因特網中自由來往的協議,防火墻只有對Http訪問是透明的,其它協議都會被擋在防火墻之外。Web Service正是基于這個原因,采用Http完成異構企業應用在因特網上的整合。本文提出一個方案,可以使基于Java平臺的企業應用不必等待Web Service的漸漸成熟,而利用Java隧道技術實現在因特網上的企業應用部署。
Java隧道技術不是一個新的技術,它是Java對象序列化和Web技術的結合。2001年筆者就曾經做過基于Java隧道的試驗。關于Java Servlet的書籍也有對Java隧道技術的相關論述(參考文獻[2])。本文首先回顧一下Java隧道技術的基本原理,再通過一個實例來實現它。以此為后面的Java隧道回調技術和基于Java隧道技術的因特網通訊打下基礎。
本文的內容可以用于Java Web Start客戶端在因特網上的部署,可以用于利用因特網互連的Java應用服務。
Web Service技術中的SOAP協議(Simple Object application PRotocol),簡單的說是把對象用xml來序列化和反序列化的協議。XML表述的好處就是平臺的獨立性,不管對象在不同的平臺中表現的形式是什么樣的,最終都可以用XML來實現對象的互換。并且,基于Http協議的Web Service可以穿越防火墻。 Web Service技術整合因特網上的應用是它的強項。Web Service技術是一個很好的創意,包括IBM,Microsoft,Sun等公司都極力推出自己的相關產品。我們可以說,在未來的異構平臺的集成,B2B應用中,Web Service將發揮重要的作用。
然而,對于Java平臺的企業應用,你可以用Web Service相同的原理,利用Java平臺的對象序列化,再借助Web技術,完成因特網上的應用部署。這樣的技術就是Java的隧道技術。因為這個技術都是利用現有的基礎技術來實現的,所以可以非常輕易的完成系統的構架。當然Java隧道與Web Service的定位是完全不同的,他們應該用在不同的場合。Web Service更加強大,更加通用化,是一套新興的互相訪問的標準。也正是由于Web Service的強大,所以它也更復雜?;卮鹣旅娴膯栴},來看看你需要哪種技術來構架你的應用:
假如第一個問題的答案是"否",其它問題回答"是",那么你別無選擇,必須用Web Server技術;假如以上的問題的回答都是"是"的話,你可以用Web Service來構架系統,當然,你也可以用更便捷,簡單,高效的Java隧道技術。
Java隧道技術的基本構架如下圖。Java隧道系統的通訊構架,由Web Server提供Http服務,Servlet容器處理Java序列化對象。對于這樣的一個框架,我們可以用常見的Tomcat,Jetty等軟件作為Java隧道技術的運行基礎環境。
Java隧道技術的基本工作原理是這樣的:首先,Java客戶端把對象序列化,用Http協議包裝序列化對象的字節流在Internet上傳播,透過防火墻,提交到Web Server上。Servlet容器把Http協議剝離開,取出序列化的對象,再反序列化這個java對象,傳遞給后臺的應用。
整個工作過程,就是把Java序列化對象,通過Http協議的包裝完成在Internet上的通訊。由于Java序列化技術是Java 1.1版本后內置的功能,只要實現java.io.Serializable接口就可以實現。而集成Web Server的Servlet容器更是有好多實現,這里也不乏開源的優秀產品,如Tomcat,Jetty等。這些都體現了Java隧道技術構架的簡便性。
下面我們通過一根例子來看看Java隧道技術是如何具體實現的。
這里我們選擇Jetty(Jetty 4.2.21)作為Web Server和Java Servlet的運行容器。編寫普通的Java應用程序TunnelClient作為java隧道的客戶端。編寫Servlet程序TunnelServer作為java隧道的服務端。如下圖,運行java隧道客戶端程序,在程序內部調用隧道服務http://127.0.0.1:8080/servlets/servlet/TunnelServer。從服務器返回對象,對象內容打印在控制臺上。
新聞熱點
疑難解答