談談EJB是如何發布Web Service的

來源:互聯網
上載者:User


定義
我們經常會聽到,xx項目中用到了Web Service。那麼,什麼是Web Service呢?
首先讓我們來瞭解一下Web Service。Web Service技術,就是能使得運行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換資料或整合。依據Web Service規範實施的應用之間,無論它們所使用的語言、平台或內部協議是什麼,都可以相互交換資料。Web Service是自描述、自包含的可用網路模組,可以執行具體的業務功能。
Web service是一個平台獨立的,低耦合的,自包含的、基於可程式化的web的應用程式,可使用開放的XML(標準通用標記語言 (SGML)下的一個子集)標準來描述、發布、發現、協調和配置這些應用程式,用於開發分布式的互操作的應用程式。

準備
將EJB發布成Web服務,在EJB容器中不是困難的事情,只要容器實現了JavaEE的JAX-WS標準就行了,開發人員要做的就是增加一點點有關WebService的註解,打包發布到應用程式容器即可。

步驟
建立Web Service

  • 建立一個POJO endpoint
服務端不用再強制規定WebService必須實現一個介面了,而一個普通的POJO+EJB註解的類就可以當做WebService伺服器類。
HelloWorld服務端代碼
package com.foshanshop.ws;import javax.jws.WebMethod;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;@WebService(name="HelloWorld",targetNamespace="http://com.foshanshop.ws",serviceName="HelloWorldService")@SOAPBinding(style=SOAPBinding.Style.RPC)public class HelloWorldService {@WebMethodpublic String sayHello(String name) {System.out.println("用戶端調用了伺服器端的代碼");return name + "說:這是一個簡單的Web測試服務!";}}

@WebService 這個注釋放置在 Java 類的前面,聲明這個類的部分方法可以被發布為 Web 服務。@WebService 的屬性用於設定 Web 服務被發布時的一些配置資訊,常用的屬性說明如下    1. nameWeb 服務的名字,WSDL中 wsdl:portType 元素的 name 屬性和它保持一致,預設是 Java 類或者介面的名字。    2. serviceNameWeb 服務的服務名,WSDL 中 wsdl:service 元素的 name 屬性和它保持一致,預設是Java 類的名字+”Service” 。
    3. targetNamespaceWSDL檔案所使用的 namespace,該 Web 服務中所產生的其他 XML文檔同樣採用這個作為 namespace 。@SOAPBinding()表示這個服務可以映射到一個 SOAP 訊息中。 Style 用於指定SOAP 訊息請求和回應的編碼方式。@WebMethod 這個注釋放在需要被發布成 Web 服務的方法前面。
  • 把endpoint定義成Servlet
Web.xml配置
<servlet>   <servlet-name>HelloWorldService</servlet-name>   <servlet-class>com.foshanshop.ws.HelloWorldService</servlet-class></servlet><servlet-mapping>   <servlet-name>HelloWorldService</servlet-name>   <url-pattern>/HelloWorldService/*</url-pattern></servlet-mapping>

  • 把endpoint打包成war包
定義好Servlet之後,將服務端的類打成war包,部署到JBoss容器中。
注意:POJO endpoint 檔案及 web.xml都是必須的。
經過上面的步驟,完成了一個Web Service 的開發,下面我們通過Jboss管理平台查看剛才發布的 Web Service,開啟連結 http://localhost:8080/jbossws,看到如下介面


點擊“View a list of deployed services”後,就可以看到已經發布的Web Services了,如



在中你可以點擊 ServiceEndpointAddress 下的路徑 http://127.0.0.1:8080/ws_01/HelloWorldService?wsdl 訪問他的 wsdl描述,wsdl描述檔案在應用發布時由容器自動產生,輸出如下


建立用戶端
首先建立一個名為ws_01_client 的 java 項目,然後建立一個Web Service Client,然後在WSDL URL中輸入:http://127.0.0.1:8080/ws_01/HelloWorldService?wsdl,一路下一步即可。
建立好用戶端之後,寫了一個測試類別,代碼如下
package com.foshanshop.ws;import ws.foshanshop.com.HelloWorld;import ws.foshanshop.com.HelloWorldService;public class TestHelloWorld {/** * @param args */public static void main(String[] args) {HelloWorldService helloWorldService = new HelloWorldService();HelloWorld helloWorld = helloWorldService.getHelloWorldPort();System.out.println(helloWorld.sayHello("小星星"));}}


輸出
  • 用戶端輸出
小星星說:這是一個簡單的Web測試服務!
  • 服務端輸出
16:46:26,474 INFO [STDOUT] 用戶端調用了伺服器端的代碼

小結
其實,EJB發布Web Service還是比較簡單的,我這裡只是列出了一個用java語言調用Web Service的方法,其他也都是很類似的。
實際上,WebService的主要目標是跨平台的可互通性。為了達到這一目標,WebService完全基於XML(可延伸標記語言 (XML))、XSD (XMLSchema)等獨立於平台、獨立於軟體供應商的標準,是建立可互操作的、分布式應用程式的新平台。由此可以看出,在以下三種情況下,使用 WebService會帶來極大的好處。
  • 跨防火牆的通訊
在一個使用者介面和中介層有較多互動的應用程式中,使用 WebService這種結構,可以節省花在使用者介面編程上20%的開發時間。另外,這樣一個由WebService組成的中介層,完全可以在應用程式集 成或其它場合下重用。最後,通過WebService把應用程式的邏輯和資料“暴露”出來,還可以讓其它平台上的客戶重用這些應用程式。
  • 應用程式整合
企業級的應用程式開發人員都知道,企業裡經常都要把用不同語言寫成的、在不同平台上啟動並執行各種程式整合起來,而這種整合將花費很大的開發力量。通過WebService,應用程式可以用標準的方法把功能和資料“暴露”出來,供其它應用程式使用。
  • B2B的整合
用WebService來實現B2B整合的最大好處在於可以輕易實現互操作 性。只要把商務邏輯“暴露”出來,成為WebService,就可以讓任何指定的夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運行,使用什麼 開發語言。這樣就大大減少了花在B2B整合上的時間和成本,讓許多原本無法承受EDI的中小企業也能實現B2B整合。
  • 軟體和資料重用
軟體重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是原始碼模組或者類一級的重用,另一種形式是二進位形式的組件重用。
WebService在允許重用代碼的同時,可以重用代碼背後的資料。使用WebService,再也不必像以前那樣,要先從第三方購買、安裝軟體組 件,再從應用程式中調用這些組件;只需要直接調用遠端的WebService就可以了。

從以上論述可以看出,WebService在通過Web進行互操作或遠程調用的時候是最有用的。不過,也有一些情況,WebService根本不能帶來任何好處。
  • 單機應用程式
目前,企業和個人還使用著很多傳統型應用程式。其中一些只需要與本機上的其它程式通訊。在這種情況下,最好就不要用WebService,只要用本地的 API就可以了。COM非常適合於在這種情況下工作,因為它既小又快。運行在同一台伺服器上的伺服器軟體也是這樣。最好直接用COM或其它本地的API來 進行應用程式間的調用。當然WebService也能用在這些場合,但那樣不僅消耗太大,而且不會帶來任何好處。
  • 區域網路的同構應用程式
在許多應用中,所有的程式都是用VB或VC開發的,都在Windows平台下使用COM,都運行在同一個區域網路上。例如,有兩個伺服器應用程式需要相互連信,或者有一個Win32或WinForm的客戶程式要串連區域網路上另一個伺服器的程式。在這些程式裡,使用DCOM會比SOAP/HTTP有效得多。與此相類似,如果一個.NET程式要串連到區域網路上的另一個.NET程式,應該使用.NETremoting。有趣的是,在.NETremoting 中,也可以指定使用SOAP/HTTP來進行WebService調用。不過最好還是直接通過TCP進行RPC調用,那樣會有效得多。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.