SOA與Web Service的關系,這是經常被混淆的兩個概念。
SOA(Service-oriented architecture,面向服務的架構)。
将 企業應用系統中細粒度的功能打包成粗粒度的服務,通過中間方式(語言),
實作異構系統(作業系統、開發語言)之間的通訊、調用。
Web Services是一種面向服務的架構的技術,
(SOA并不是一種技術,而是一種軟體設計理念.Web service != SOA,但Web service 是目前實作SOA的最好方式。)
向外界暴露出一個能夠遠端進行調用的程式,主要目的是實作不同平台的應用服務可以互操作。
為了實作這一目标,Web Service 完全基于XML(可擴充标記語言)獨立于平台、獨立于開發語言的标準.
是建立可互操作的、分布式應用程式的新平台。
Web Services平台的技術。
Soap:(Simple Object Access Protocol)簡單對象通路協定。是XML Web Service 的通信協定。
WSDL:(Web Services Description Language) WSDL 檔案是一個 XML 文檔,它對web Services的接口進行了定義 .
UDDI是一種查找相應服務的機制,用于web Services的釋出、浏覽以及查找注冊資訊.
架構(如何工作的)
服務提供者到注冊中心(uddi)注冊自己的服務。服務請求者(用戶端)到注冊中心(uddi)找到需要的web服務,
并獲得服務定義(wsdl),根據wsdl定義就可以調用相應的服務(通過soap協定)。
Web Service的主要目标是跨平台的可互操作性。
優點: 因為Soap協定,是以可以跨防火牆的進行通信 、
應用程式內建 (實作了異構系統) 、
因為不同平台的應用服務可以互相操作,是以實作了軟體和資料重用
完全基于xml可擴充标記語言,是以跨語言 跨平台
缺點:通過http協定進行遠端調用, 通路速度慢、穩定性問題。
Web Service也有架構:如axis1,axis2、xfire、cxf。
Apache Axis2 是Axis的後續版本,是新一代的SOAP引擎。
Axis2的主要特點有:
(1) 采用名為 AXIOM(AXIs Object Model)的新核心 XML 處理模型,利用新的XML解析器提供的靈活性按需構造對象模型。
(2) 支援不同的消息交換模式。目前Axis2支援三種模式:In-Only、Robust-In和In-Out。In-Only消息交換模式隻有SOAP請求,而不需要應答;
Robust-In消息交換模式發送SOAP請求,隻有在出錯的情況下才傳回應答;In-Out消息交換模式總是存在SOAP請求和應答。
(3) 提供阻塞和非阻塞用戶端 API。
(4)* 支援内置的 Web服務尋址 (WS-Addressing) 。
(5) 靈活的資料綁定,可以選擇直接使用 AXIOM,使用與原來的 Axis 相似的簡單資料綁定方法,
或使用 XMLBeans、JiBX 或 JAXB 2.0 等專用資料綁定架構。
(6) 新的部署模型,支援熱部署。
(7)* 支援HTTP,SMTP,JMS,TCP傳輸協定。
(8) 支援REST (Representational State Transfer)。
axis2是一個web service架構,以下是使用中的一些總結:
1、要傳遞的對象首先必須實作serializable接口
2、axis2不支援方法重載。
在對外釋出的接口中不能使用方法重載,
如果你寫了多個重名的方法,在該service中隻會注冊一個。
解決方法:更改成不同的方法名
3、axis2不支援事務。
資料庫增删改查一般都需要事務處理的,但是在對外釋出的接口中是不能配置事務的。
解決方法:或者寫一個代理類或者直接在dao中進行事務管理。
4、AXIS2 1.4.1不支援java.util.Date type
Time portion of java.util.Date is missing from SOAP response in Axis2 1.5
瞧瞧axis2 的這些個bug,使用起來太不友善了。
雖然Apache的官方網站的bug頁上有解決方案,但是我把DateService.aar檔案考下來後仍然報相同的錯誤:
Axis2 1.5隻能傳回日期部分,時間部分丢失了!
解決方法:把Date類型都改成String類型的,這樣是最安全的,但可能跟要求不符,應該不能算是一個好的解決方案吧。
5、axis2在java中不支援二進制對象的傳遞如inputSream,。
解決方法:将二進制流轉換為隻能傳遞byte[]。
6、axis2不能傳遞list、Map 類型的資料集合。
解決方法:将list轉換成數組類型。
項目中如何使用:
在我們的項目中,首先是将項目分布成幾個小子產品,對這些小的子產品進行編碼.
編碼完成以後在通過webService連接配接起來,進行測試,這樣做的好處就是