EJB與JavaBean的區別

什麼是EJB:
EJB是sun的服務器端組件模型,最大的用處是部署分佈式應用程序當然,還有許多方式可以實現分佈式應用,類似微軟的.net技術。憑藉java跨平臺的優勢,用EJB技術部署的分佈式系統可以不限於特定的平臺。EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個用於開發基於組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。 在J2EE裏,Enterprise Java Beans(EJB)稱爲Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。
什麼是java Bean:
最初,JavaBean的目的是爲了將可以重複使用的軟件代碼打包標準。特別是用於幫助廠家開發在綜合開發環境(IDE)下使用的java軟件部件。這些包括如Grid控件,用戶可以將該部件拖放到開發環境中。從此,JavaBean就可以擴展爲一個java web 應用的標準部件,並且JavaBean部件框架已經擴展爲企業版的 Bean(EJB)。
JavaBean 和 Server Bean(通常稱爲 Enterprise JavaBean (EJB))有一些基本相同之處。它們都是用一組特性創建,以執行其特定任務的對象或組件。它們還有從當前所駐留服務器上的容器獲得其它特性的能力。這使得 bean 的行爲根據特定任務和所在環境的不同而有所不同。
兩者之間的區別:
百度百科:
JavaBean 是使用 java.beans 包開發的,它是 Java 2 標準版的一部分。JavaBean 是一臺機器上同一個地址空間中運行的組件。JavaBean 是進程內組件。Enterprise Bean 是使用 javax.ejb 包開發的,它是標準 JDK 的擴展,是 Java 2 Enterprise Edition 的一部分。Enterprise Bean 是在多臺機器上跨幾個地址空間運行的組件。因此 Enterprise Bean 是進程間組件。JavaBean 通常用作 GUI 窗口小部件,而 Enterprise Bean 則用作分佈式商業對象。
JavaBean 是一種JAVA語言寫成的可重用組件。爲寫成JavaBean,類必須是具體的和公共的,並且具有無參數的構造器。JavaBeans 通過提供符合一致性設計模式的公共方法將內部域暴露成爲屬性。衆所周知,屬性名稱符合這種模式,其他Java 類可以通過自省機制發現和操作這些JavaBean 屬性。
用戶可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,並且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用戶可以認爲JavaBean提供了一種隨時隨地的複製和粘貼的功能,而不用關心任何改變。
JavaBean是Sun微系統的一個面向對象編程接口,它可以讓你建可重用應用程序或能在網絡中任何主流操作系統平臺上配置的程序塊,稱作組件。像Java applet一樣,JavaBeans組件(或“Beans”)能夠給予萬維網頁面交互的能力,例如:計算感興趣的比率或是根據用戶或瀏覽器的特性改變頁面內容。
從用戶的觀點來看,一個組件可以是一個與你交互的按鈕或是一個當你按下按鈕它便開始的小計算程序。從一個開發者的觀點來看,那個按鈕組件和計算器組件是分別被創建的,並且它們可以一起使用或是在不同的應用程序或情況下和不同的組件產生不同的組合來使用。
當組件或Beans在使用過程中,Bean的性質(比如,一個窗口的背景色)對於其他Bean來說是可見的,並且,之前沒“碰到”過的Bean也可以動態地獲悉彼此的特性並從而進行交互。 
Bean是隨Sun的Bean開發包(BDK)開發出來的,並且能在任何主流操作系統平臺的許多應用程序環境(人們所說的“容器”,container)中運行,包括瀏覽器文字處理軟件、以及一些其他應用。 
要想用JavaBean建一個組件,你必須用Sun的Java編程語言來寫程序,並且在程序中包括描述組件特性的JavaBean語句,這些組件特性例如:用戶接口的特性,以及觸發一個bean和在同一個容器中或網絡其他地方的其他的bean交流的事件。
JavaBean給Java應用程序提供了OpenDoc和ActiveX接口已提供的這種複合文檔的能力。
網友一:

EJB的英文全稱是企業級的JavaBean

兩者是完全不同的

JavaBean是一個組件,而EJB就是一個組建框架

JavaBean面向的是業務邏輯和表示層的顯示,通過編寫一個JavaBean,可以將業務邏輯的事件和事務都放在其中,然後通過它的變量屬性將所需要的內容在表示層傳遞顯示。

EJB是部署在服務器上的可執行組建或商業對象。EJB有一個部署描述符,通過這個部署描述符可以對EJB的屬性進行描述。EJB不和表示層交互。

通常,對於簡單的服務器端應用來說,使用JavaBean是很不錯的選擇。雖然對於複雜的服務器端應用來說,使用JavaBean同樣可以達到相同的效果,但這麼做,所有底層的實現都必須手工來重新編寫。而EJB不必用戶關心它的底層操作,而只要關心它的外部實現即可。

的確,利用JavaBean來與EJB共同完成實現,是十分常見的。

從概念層上理解就是:

首先,EJB是指運行在EJB容器中的JavaBean。Tomcat是Web容器的參考實現。一個完整的JavaEE服務器應該包括Web容器和EJB容器。

其次,Web容器中無法運行EJB,同時所有的JavaBean都是在服務器端運行的。如果有在客戶端的話,就變成C/S結構了。

目前來說除非需要分佈式處理,不然基本上不需要考慮EJB。Spring能幫你處理好除分佈計算之外的一切。

用JavaScript來進行服務器調用的話,屬於Ajax的範圍了。

至於購物車。一般來說有幾種方法,一種是EJB中的有狀態SessionBean。一種是使用HttpSession保存。還有就是自己建設一個對象池來處理。

JavaBean是領域模型的具體化類,保存了信息和業務。只有set、get方法的JavaBean是失血模型。現在來說一般多少不太歡迎這種東西。把本屬於領域對象的業務邏輯都丟掉了。

實際上現在的JavaEE系統分這麼幾個層。

表現層(Struts、JSF等)+應用層(處理業務,可以是JavaBean也可以是EJB)+持久層(JDBC、Hibernate)。

不要在Struts的Action類中寫業務代碼,那是反模式。不然日後需要修改的時候很麻煩的。Action中只有流程指向和對應用層的調用。

從服務其方面考慮就是:

JavaBean 和 Server Bean(通常稱爲 Enterprise JavaBean (EJB))有一些基本相同之處。它們都是用一組特性創建,以執行其特定任務的對象或組件。它們還有從當前所駐留服務器上的容器獲得其它特性的能力。這使得 bean 的行爲根據特定任務和所在環境的不同而有所不同。

這開闢了巨大商機。因爲 JavaBean 是與平臺無關的,所以對於將來的解決方案,供應商可以輕易向不同用戶推出其客戶機方的 JavaBean,而不必創建或維護不同的版本。

這些 JavaBean 可以與執行商業功能(例如訂購、信用卡處理、電子匯款、存貨分配、運輸等)的 EJB 配合使用。這裏有巨大潛力,而這正是組件代理(WebSphereApplication Server 企業版)設計提供的那種潛力。

JavaBean 是一種組件,它在內部有接口或有與其相關的屬性,以便不同人在不同時間開發的 bean 可以詢問和集成。可以構建一個 bean,而在以後構造時將其與其它 bean 綁定。

這種過程提供了先構建,然後重複使用的方法,這就是組件的概念。可以將這種單一應用程序部署成獨立程序、ActiveX組件或在瀏覽器中。

JavaBean 因其外部接口(即屬性接口)而與純對象不同。這種接口允許工具讀取組件要執行的功能,將其與其它 bean 掛鉤,以及將其插入其它環境。

JavaBean 設計成對單一進程而言是本地的,它們在運行時通常可視。這種可視組件可能是按鈕、列表框、圖形或圖表 - 但這不是必需的。

可執行組件

Server Bean 或 EJB 是部署在服務器上的可執行組件或商業對象。有一個協議允許對其進行遠程訪問或在特定服務器上安裝或部署它們。有一系列機制允許它們將服務安全性、事務行爲、併發性(由多個客戶機同時訪問的能力)和持久性(其狀態可以保存多久)的主要方面授權給 EJB 服務器上其所在的容器。

當安裝在容器中時,它們獲得各自的行爲,該行爲提供不同質量的服務,因此,選擇正確的 EJB 服務器至關重要。這正是 IBM WebSphere 企業版的優勢所在

出自:http://luckytjx.blog.163.com/blog/static/140809827201231791254745/

網友二:

EJB不是一般的JavaBean,EJB是企業級JavaBean,EJB一共分爲3種,實體Bean,消息Bean,會話Bean,書寫EJB是需要遵循一定的規範的,具體規範你可以參考相關的資料.另外,要運行EJB,你需要相應的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安裝Tomcat就可以了
   1.EJB用於服務端應用開發, 而JavaBeans用於客戶端應用開發。也可以使用JavaBeans進行服務端應用開發,但JavaBeans模型沒有提供服務框架,當應用需要使用系統級服務(如事務管理,安全性,生命週期管理等)時,不適合。

  2.EJB構件是可部署的,EJB構件可以作爲獨立的單元被部署到EJB應用服務器上,是應用構件(application components),而JavaBeans構件是不可部署的, JavaBeans構件是開發構件,不能被部署爲獨立的單元。

  3.EJB構件是部署可定製的,使用部署描述符可以在部署EJB時對其運行時配置進行定製,而JavaBeans構件在部署時不能進行定製,JavaBeans構件的定製僅發生在開發階段,只能利用開發工具創建並組裝JavaBeans構件,部署時不能定製

  4.EJB構件是分佈式對象,可以被客戶應用或者其它EJB構件進行遠程訪問,而JavaBeans構件不是分佈式對象,JavaBeans構件只能在其構成的應用中使用,不能提供遠程訪問能力

  5.EJB構件對終端用戶不可見,運行在服務端,沒有人機交互界面,而部分JavaBeans構件對終端用戶可見,如GUI應用中使用的按鈕構件

出自:http://hesihua.iteye.com/blog/1158703

網友三:

首先,EJB是指運行在EJB容器中的JavaBean。Tomcat是Web容器的參考實現。一個完整的JavaEE服務器應該包括Web容器和EJB容器。
其次,Web容器中無法運行EJB,同時所有的JavaBean都是在服務器端運行的。如果有在客戶端的話,就變成C/S結構了。
目前來說除非需要分佈式處理,不然基本上不需要考慮EJB。Spring能幫你處理好除分佈計算之外的一切。
用JavaScript來進行服務器調用的話,屬於Ajax的範圍了。
至於購物車。一般來說有幾種方法,一種是EJB中的有狀態SessionBean。一種是使用HttpSession保存。還有就是自己建設一個對象池來處理。

JavaBean是領域模型的具體化類,保存了信息和業務。只有set、get方法的JavaBean是失血模型。現在來說一般多少不太歡迎這種東西。把本屬於領域對象的業務邏輯都丟掉了。
實際上現在的JavaEE系統分這麼幾個層。
表現層(Struts、JSF等)+應用層(處理業務,可以是JavaBean也可以是EJB)+持久層(JDBC、Hibernate)。
不要在Struts的Action類中寫業務代碼,那是反模式。不然日後需要修改的時候很麻煩的。Action中只有流程指向和對應用層的調用。

領域模型分實體、值對象和服務三部分。一般實體裏寫業務代碼、值對象顯示、服務提供相對獨立的業務。失血模型指一個對象中除了get和set方法外沒有任何方法的類。現在不太推薦。addobject(objece **),delete(object **)...之類的方法就是業務。這些業務封進去後,失血模型就變成了缺血模型。充血模型把持久化服務等也包了,所以也不是很號。缺血比較推薦。
登錄等流程其實是服務。推薦你去看看DDD設計的書也就是《領域驅動設計》。
出自:http://zhidao.baidu.com/question/34646569.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章