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 企業版的優勢所在