一年前我做的項目中遇到了要給其他的幾個系統(tǒng)提供接口實現(xiàn)遠程調(diào)用,數(shù)據(jù)是二進制數(shù)據(jù)。那么用哪個好呢?
xfire?cxf?hessain?
XFire是codeHaus組織提供的一個開源框架,它構(gòu)建了POJO和SOA之間的橋梁,主要特性就是支持將POJO通過非常簡
單的方式發(fā)布成Web服務(wù),這種處理方式不僅充分發(fā)揮了POJO的作用,簡化了Java應(yīng)用轉(zhuǎn)化為Web服務(wù)的步驟和過程,
也直接降低了SOA的實現(xiàn)難度,為企業(yè)轉(zhuǎn)向SOA架構(gòu)提供了一種簡單可行的方式。
CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,并且提供了多種 Binding 、
DataBinding、Transport 以及各種 Format 的支持,并且可以根據(jù)實際項目的需要,采用代碼優(yōu)先(Code First)或
者 WSDL 優(yōu)先(WSDL First)來輕松地實現(xiàn) Web Services 的發(fā)布和使用。Apache CXF已經(jīng)是一個正式的Apache
頂級項目。
Hessian是一個使用二進制Web服務(wù)協(xié)議的框架,它的好處在于免除了一大堆附加的API包,方便,簡單,快速等特點。
例如XML的處理之類的jar包,這也就是為什么說它是一個輕量級的Web服務(wù)實現(xiàn)框架的原因,這個原因還在于手機上的應(yīng)
用程序可以通過Hessian提供的API很方便的訪問Hessian的Web服務(wù)。
我的項目中需要傳輸二進制數(shù)據(jù),所以我選擇了hessian。
個人總結(jié)了下hessian的使用:
兩種方式:1、接口的實現(xiàn)類繼承HessianServlet,web.xml中將接口的實現(xiàn)類做成servlet。
2、接口的實現(xiàn)類無需繼承HessianServlet,web.xml文件中直接引入HessianServlet,傳入init-param指明傳入的接口及實現(xiàn)類即可。
方法1是繼承hessianservlet在程序里寫死誰為服務(wù)接口和實現(xiàn)類,比較呆板,降低了可重用性不夠靈活。
方法2是配置文件中指明哪個為接口哪個是需要傳入的實現(xiàn)類,比較靈活。
具體的例子如下:
客戶端的接口:
客戶端調(diào)用服務(wù)端:
服務(wù)端接口:
服務(wù)端的實現(xiàn)類:
配置文件web.xml
以上是我提到的第二種方式。為了方便大家所以我選擇了網(wǎng)上流行的例子,便于大家瀏覽。
第二種方式:
服務(wù)端接口:
服務(wù)端實現(xiàn)類:
服務(wù)端model:
客戶端接口如下:
客戶端model:
客戶端調(diào)用服務(wù)端:
注意以上url為
String url = ("http://" + request.getServerName() + ":"+ request.getServerPort() +
request.getContextPath() + "/hello"); 相信大家肯定知道的。
Hessian與Spring整合
Hessian通過Servlet提供遠程服務(wù)。需要將匹配某個模式的請求映射到Hessian服務(wù)。Spring的DispatcherServlet可
以完成該功能,DispatcherServlet可將匹配模式的請求轉(zhuǎn)發(fā)到Hessian服務(wù),web.xml只是定義了“請求轉(zhuǎn)發(fā)器”,該
轉(zhuǎn)發(fā)器將匹配/remoting/*的請求截獲,轉(zhuǎn)發(fā)給context的bean處理。而HessianServiceExporter提供bean服務(wù)。
所以Hessian與Spring整合主要就是一下兩個工作:
1:通過DispatcherServlet來攔截URL請求。
2:HessianServiceExporter提供bean服務(wù),Spring使用HessianServiceExporter,將一個常規(guī)bean導(dǎo)出成Hessian服務(wù)。
下面我就把我在做實例的一些相關(guān)步驟描述如下:
web.xml的詳細配置
配置remoting-servlet.xml文件
客戶端定義一個remoting-client.xml文件
客戶端調(diào)用。
以上是本人粗淺的介紹,希望大家多多指正,共同進步,這里謝過了!??!
(###)