1、EJB概述
EJB(EnterpriseJava Bean)--java企業Bean,是J2EE103種規范的1部份,為服務器端組件模型,設計目標與核心利用是部署散布式利用程序。EJB是java的核心代碼,包括3種Bean類型:會話Bean(Session Bean),實體Bean(EntityBean)和消息驅動Bean(MessageDriven Bean)。
通俗的說,EJB就是1個運行在獨立的服務器上,封裝了業務邏輯的組件。在1個商務軟件中,核心部份就是其業務邏輯,它抽象了全部商務進程的流程。J2EE對這個問題的處理方法是將業務邏輯從客戶端抽取出來,封裝在EJB組件中。它運行在1個獨立的服務器上,客戶端軟件通過網絡調用組件提供的服務以實現業務邏輯,而客戶端軟件的功能單純到只負責調用要求和顯示處理結果。
2、EJB在java3層中的角色
在J2EE經典3層的圖中,各個規范的位置關系以下:
從上圖來看,JSP,Servlet是表示層,EJB是業務邏輯層,負責處理業務邏輯。EJB可以從客戶端接收數據,對它進行處理,并將其發送到企業信息系統層以作存儲;同時也能夠從存儲器獲得數據,處理后將其發送到客戶端利用程序。
3、EJB中的Bean
EJB作為業務邏輯層,是如何與表示層和數據庫進行數據交換和保存呢?主要依托會話Bean,實體Bean和消息驅動Bean。
1、Session Bean:用于實現業務邏輯,它可以是有狀態的,也能夠是無狀態的。每當客戶端要求時,容器就會選擇1個SessionBean來為客戶端服務。SessionBean可以直接訪問數據庫,但更多時候,它會通過Entity Bean實現數據訪問。
2、Entity Bean:是域模型對象,用于實現O/R映照,負責將數據庫中的表記錄映照為內存中的Entity對象,事實上,創建1個EntityBean對象相當于新建1條記錄,刪除1個Entity Bean會同時從數據庫中刪除對應記錄,修改1個Entity Bean時,容器會自動將EntityBean的狀態和數據庫同步。
3、MessageDriven Bean:是EJB2.0中引入的新的企業Bean,它基于JMS消息,只能接收客戶端發送的JMS消息然后處理。MDB實際上是1個異步的無狀態SessionBean,客戶端調用MDB后無需等待,立刻返回,MDB將異步處理客戶要求。這合適于需要異步處理要求的場合,比如定單處理,這樣就可以避免客戶端長時間的等待1個方法調用直到返回結果。
4、什么時候使用EJB
1、散布式對象
當使用企業級的JavaBean,散布式對象用于建立企業級別的系統。這意味著你的系統可以部署于不同的物理機器,由此可產生許多彼此獨立的進程,以到達性能、可擴大性、可用性的系統目標。
2、對象持久化
對象持久化表示其狀態可以被保存,大多數情況下,持久化對象保存在關系型數據庫中,而對象和關系型數據庫相互差異太大。和JAVA相比,關系型數據庫具有有限的模型化能力,諸如對象繼承和封裝。另外,最主要的轉換問題是SQL數據類型和Java的數據類型其實不完全匹配。所有的這些問題在使用CMP實體Bean時都得到了解決。
3、事務管理
對數據的并發訪問是令開發者最頭痛的問題之1。所有相干需要斟酌的問題諸如數據庫鎖定,數據完全性丟失事件可以致使創建高度復雜的框架以管理數據庫級別的同享數據的訪問。EJB自動處理這些復雜的線程和并發的同享數據問題。正如前面提到的,EJB容器提供了所有必須的事務服務給企業Bean去管理后臺的數據。