1. 程式人生 > >WebService 和 EJB 的區別

WebService 和 EJB 的區別

1.

WebService可以說是跨平臺的,因為它採用的是XML技術,說穿了就是把你的請求按照該WebServece的標準將引數傳過去,然後伺服器返回結果,當然了最重要的是引數的傳遞和結果的返回都是採用XML格式,但需要按照規範的,現在有SOAP和ebXML,說到XML自然有DTD或是Schema了,它用WSDL和UDDI來管理這些規範。   
    
  EJB也可以說成是遠端呼叫,但採用的協議是RIM/IIOP,客戶端將方法請求按照協議封裝,然後傳送到伺服器,伺服器把結果返回給客戶端。由於採用了協議,所以傳輸的資料我們可以看成二進位制資料和WebService(傳輸xml文字資料)不一樣。   


WebService提供一個跨平臺的異構方法呼叫,一般用來實現某種商務邏輯過程。   
EJB提供一個更精確的方法呼叫,一般又多個EJB來實現一定的商務邏輯。    

一般你可以用WebService來提供使用者呼叫,具體怎麼實現用EJB來做。

2.

EJB的分散式:一個業務邏輯可能會呼叫分佈在多臺伺服器上的 EJB 元件,但是這麼多的元件呼叫必須納入一個事務範圍之中。也就是說如果需要呼叫三個 EJB 元件,第一個呼叫成功,第二個呼叫成功,但第三個呼叫失敗了,因此在第一和第二次呼叫成功時進行的事務操作(這裡的事務操作不單單指資料庫的,還有可能包括訊息佇列服務的事務)都必須進行回滾。


但是,如果是呼叫三個 WebService 的話,那呼叫成功的那兩個基本上是不可能進行回滾的,呼叫完了就是完了。


WebService 只是對外提供的呼叫介面,而 EJB 是個業務元件。一個對外的 WebService 在服務端中也是需要實現業務邏輯的,在 J2EE 中,這些業務邏輯基本上都是由 EJB 元件來實現,對外發布 WebService 介面(當然了,使用符合 JAX-WS 規範的開源框架不用 EJB 也能做到)。

相對於 EJB 這種服務端來說,Servlet 只能算是一個 Web 層面呼叫的客戶端。一個 EJB 元件不僅僅是隻能用於 B/S 結構的應用,也能用於 C/S 結構的應用。這也能澄清很多人的誤區,認為 Java Web 就是 J2EE 了,其實 J2EE 是一系列的規範集,而 Java

 Web 只是 J2EE 諸多規範中的一小部分。J2EE 中其他大部分規範定義的都是服務端的東西,作為具體的客戶端呼叫,可以是 B/S 的,也可以是 C/S 的。

3.

Webservice主要關注於解決異構系統、不同語言系統通訊,其關注的是分散式服務開發、著手點要高、站的角度高,而ejb可以看做是分散式程式設計平臺,通過容器和元件,簡化了程式開發、除錯和部署等它關注的是分散式元件開發,粒度小。

 Web service可以看做是異構系統、異構語言系統間通訊的一個標準,而ejb只屬於J2EE規範的一部分。

ejb是Java EE 中的一個規範,該規範描述了分散式應用程式需要解決的問題,例如事務處理、安全、日誌、分散式等,而同時呢,sun公司也實現了自己定義的這一個標準,相當於自己頒佈一個標準然後,又給出了實現供別人使用,實現以很多API的方式提供給用的人。

ejb是按照java伺服器介面定義的java類,可以理解為一個特殊的java類,放在容器裡容器可以幫助該類管理事務、分散式、安全等,一般小的程式不會用到,只有大型分散式系統才會用到ejb,既然ejb是一個java類或是一個元件,顆粒較小,這也是與Webservice的區別之一,下面會說到,它就可以被其它一個或多個模組呼叫。

包含了三種類型的Bean,可以通過註釋JPA一個規範來標記,其中有一種Bean,叫MDB訊息驅動bean,它的通訊機制涉及到了JMS協議。

ejb可以進行遠端呼叫,但是不能夠跨語言,ejb是同步呼叫,而平時我們說的的ejb非同步呼叫指的是ejb的MDB非同步通訊