什麼是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:
百度百科:
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/
網友二:
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