轉(zhuǎn)自:http://blog.csdn.net/gaga704/article/details/45561211
1.
WebService可以說是跨平臺的,因?yàn)樗捎玫氖荴ML技術(shù),說穿了就是把你的請求按照該WebServece的標(biāo)準(zhǔn)將參數(shù)傳過去,然后服務(wù)器返回結(jié)果,當(dāng)然了最重要的是參數(shù)的傳遞和結(jié)果的返回都是采用XML格式,但需要按照規(guī)范的,現(xiàn)在有SOAP和ebXML,說到XML自然有DTD或是Schema了,它用WSDL和UDDI來管理這些規(guī)范。
EJB也可以說成是遠(yuǎn)程調(diào)用,但采用的協(xié)議是RIM/IIOP,客戶端將方法請求按照協(xié)議封裝,然后發(fā)送到服務(wù)器,服務(wù)器把結(jié)果返回給客戶端。由于采用了協(xié)議,所以傳輸?shù)臄?shù)據(jù)我們可以看成二進(jìn)制數(shù)據(jù)和WebService(傳輸xml文本數(shù)據(jù))不一樣。
WebService提供一個跨平臺的異構(gòu)方法調(diào)用,一般用來實(shí)現(xiàn)某種商務(wù)邏輯過程。
EJB提供一個更精確的方法調(diào)用,一般又多個EJB來實(shí)現(xiàn)一定的商務(wù)邏輯。
一般你可以用WebService來提供用戶調(diào)用,具體怎么實(shí)現(xiàn)用EJB來做。
2.
EJB的分布式:一個業(yè)務(wù)邏輯可能會調(diào)用分布在多臺服務(wù)器上的 EJB 組件,但是這么多的組件調(diào)用必須納入一個事務(wù)范圍之中。也就是說如果需要調(diào)用三個 EJB 組件,第一個調(diào)用成功,第二個調(diào)用成功,但第三個調(diào)用失敗了,因此在第一和第二次調(diào)用成功時進(jìn)行的事務(wù)操作(這里的事務(wù)操作不單單指數(shù)據(jù)庫的,還有可能包括消息隊(duì)列服務(wù)的事務(wù))都必須進(jìn)行回滾。
相對于 EJB 這種服務(wù)端來說,Servlet 只能算是一個 Web 層面調(diào)用的客戶端。一個 EJB 組件不僅僅是只能用于 B/S 結(jié)構(gòu)的應(yīng)用,也能用于 C/S 結(jié)構(gòu)的應(yīng)用。這也能澄清很多人的誤區(qū),認(rèn)為 Java Web 就是 J2EE 了,其實(shí) J2EE 是一系列的規(guī)范集,而 Java Web 只是 J2EE 諸多規(guī)范中的一小部分。J2EE 中其他大部分規(guī)范定義的都是服務(wù)端的東西,作為具體的客戶端調(diào)用,可以是 B/S 的,也可以是 C/S 的。
3.
Webservice主要關(guān)注于解決異構(gòu)系統(tǒng)、不同語言系統(tǒng)通信,其關(guān)注的是分布式服務(wù)開發(fā)、著手點(diǎn)要高、站的角度高,而ejb可以看做是分布式編程平臺,通過容器和組件,簡化了程序開發(fā)、調(diào)試和部署等它關(guān)注的是分布式組件開發(fā),粒度小。
Web service可以看做是異構(gòu)系統(tǒng)、異構(gòu)語言系統(tǒng)間通信的一個標(biāo)準(zhǔn),而ejb只屬于J2EE規(guī)范的一部分。
ejb是Java EE 中的一個規(guī)范,該規(guī)范描述了分布式應(yīng)用程序需要解決的問題,例如事務(wù)處理、安全、日志、分布式等,而同時呢,sun公司也實(shí)現(xiàn)了自己定義的這一個標(biāo)準(zhǔn),相當(dāng)于自己頒布一個標(biāo)準(zhǔn)然后,又給出了實(shí)現(xiàn)供別人使用,實(shí)現(xiàn)以很多API的方式提供給用的人。
ejb是按照java服務(wù)器接口定義的java類,可以理解為一個特殊的java類,放在容器里容器可以幫助該類管理事務(wù)、分布式、安全等,一般小的程序不會用到,只有大型分布式系統(tǒng)才會用到ejb,既然ejb是一個java類或是一個組件,顆粒較小,這也是與Webservice的區(qū)別之一,下面會說到,它就可以被其它一個或多個模塊調(diào)用。
包含了三種類型的Bean,可以通過注釋JPA一個規(guī)范來標(biāo)記,其中有一種Bean,叫MDB消息驅(qū)動bean,它的通信機(jī)制涉及到了JMS協(xié)議。
ejb可以進(jìn)行遠(yuǎn)程調(diào)用,但是不能夠跨語言,ejb是同步調(diào)用,而平時我們說的的ejb異步調(diào)用指的是ejb的MDB異步通信