談談EJB是怎樣公布Web Service的

來源:互聯網
上載者:User

標籤:帶來   std   http   最好   map   獨立   com   相同   容器   


定義
我們常常會聽到。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註解的類就能夠當做WebServiceserver類。


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("client調用了server端的代碼");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描寫敘述檔案在應用公布時由容器自己主動產生,輸出例如以下


建立client
首先建立一個名為ws_01_client 的 java 項目,然後建立一個Web Service Client,然後在WSDL URL中輸入:http://127.0.0.1:8080/ws_01/HelloWorldService?wsdl。一路下一步就可以。


建立好client之後。寫了一個測試類,代碼例如以下
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("小星星"));}}


輸出
  • client輸出
小星星說:這是一個簡單的Web測試服務!

  • 服務端輸出
16:46:26,474 INFO [STDOUT] client調用了server端的代碼

小結
事實上,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非常適合於在這樣的情況下工作,由於它既小又快。執行在同一台server上的server軟體也是這樣。

最好直接用COM或其他本地的API來 進行應用程式間的調用。當然WebService也能用在這些場合,但那樣不僅消耗太大,並且不會帶來不論什麼優點。

  • 區域網路的同構應用程式
在很多應用中。全部的程式都是用VB或VC開發的,都在Windows平台下使用COM,都執行在同一個區域網路上。比如,有兩個server應用程式須要相互連信。或者有一個Win32或WinForm的客戶程式要串連區域網路上還有一個server的程式。

在這些程式裡,使用DCOM會比SOAP/HTTP有效得多。

與此相類似,假設一個.NET程式要串連到區域網路上的還有一個.NET程式,應該使用.NETremoting。有趣的是。在.NETremoting 中。也能夠指定使用SOAP/HTTP來進行WebService調用。只是不妨直接通過TCP進行RPC調用,那樣會有效得多。


談談EJB是怎樣公布Web Service的

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.