在以后的日子里,將由Jackliu向大家陸續(xù)提供一系列EJB教程,有學習EJB的朋友請同步參考EJB相關(guān)書籍,實戰(zhàn)系列將以例程的方式幫助你理解這些基本的概念,其中將包括:
![]()
點擊查看大圖 所有章節(jié)完畢后將制作成pdf電子文檔,供大家下載。
在前面的幾篇文章里我介紹了如何開發(fā)會話Bean,下面將向大家介紹如何開發(fā)Entity Bean,首先充實一些關(guān)于Entity Bean的基本知識。
實體(entity) bean用來代表底層的對象,最常用的是用Entity Bean映射關(guān)系數(shù)據(jù)庫中的記錄。在一個Entity Bean中,關(guān)系型數(shù)據(jù)庫的字段可以被一對一的映射到一個Entity
Bean中,而表與表之間的關(guān)系就可以看成是Entity Bean之間的關(guān)系。一個Entity Bean的實例可能會對應表中一個特定的行記錄描述或者對于一個查詢結(jié)果。比如我們在數(shù)據(jù)庫中設計了一個BOOK表,一個相對于BOOK表的Entity
Bean就可以封裝表中的部分或全部字段,當客戶端獲取一個Book Bean的實例引用時,就如同我們使用一個SELECT語句從數(shù)據(jù)庫中檢索了一條特定的關(guān)于一本圖書的記錄,并可以通過對象方法的方式去訪問記錄的值,當然你也可以使用remove方法去刪除這條記錄,用setXXX去改變某個字段的值,新的EJB
2.0查詢語言(EJB QL,EJB 2.0 query language)使你可以通過SELECT的方式直接從組件池中查詢Bean。
由于這種Bean對應于數(shù)據(jù)庫中的記錄,所以數(shù)據(jù)庫記錄的任何改變也應該被同步到我們的組件池中相關(guān)的Bean中,這個過程被成為持久性(persistencd),這是Entity
Bean最重要的一個特征。根據(jù)持久性的治理者的不同分為:容器治理持久性(CMP,Container-Managed Persistence)和Bean治理持久性(BMP,Bean-Managed
Persistence)。何謂容器治理者,就是在Bean與基礎數(shù)據(jù)庫表記錄值之間負責同步工作的操作者。
CMP Bean的持久性由EJB容器負責持,Bean開發(fā)者不需要參與操作數(shù)據(jù)庫的代碼部分,與數(shù)據(jù)庫的操作在部署EJB時由EJB部署者描述,由容器實現(xiàn)SQL操作和同步工作。BMP
Bean的持久性由Bean負責,也就是由Bean開發(fā)者負責與數(shù)據(jù)庫交互的代碼部分。
Entity Bean支持EJB的1.1和2.0規(guī)范,并且不能同時支持兩者,我們將按照規(guī)范1.1和2.0分別介紹BMP和CMP的特性,本節(jié)將主要介紹CMP
在EJB 1.1規(guī)范定義下的應用。當然上面的這些知識不足使你全部了解Entity Bean,你應該從相關(guān)的書籍或文章閱讀有關(guān)的介紹。
在本節(jié)中你將了解到:
首先介紹一下容器持久性治理(CMP),然后介紹規(guī)范1.1中規(guī)定的CMP。
EJB結(jié)構(gòu)的一個重要優(yōu)點是EJB容器可以自動的為Entity Bean提供各種有用的功能,容器持久治理(CMP)可以使Bean開發(fā)者不用編寫一行對數(shù)據(jù)庫操作的代碼就可以完成對數(shù)據(jù)庫的基本操作,這樣可以簡化Bean的開發(fā),使我們集中于純業(yè)務邏輯部分,這也是EJB的一個目標。以為使用CMP方式編寫的Bean對于數(shù)據(jù)庫的操作是在部署時由部署者映射到實際的數(shù)據(jù)庫字段的,所以這樣就增強程序的移植性,CMP
Bean的不會為某種特定的數(shù)據(jù)庫去設計。假如你還對CMP不甚了解,下面可以幫助你迅速解答你一部分疑問:
假如你是一個Bean的開發(fā)者,打消這個念頭吧,因為你已經(jīng)不許要考慮這些問題了!這些工作將在在部署B(yǎng)ean時由部署者為CMP Bean指定一個數(shù)據(jù)庫連接池的JNDI命名。java應用服務器提供數(shù)據(jù)庫連接池治理,并可以通過JNDI命名來獲得一個引用。當我們要改變數(shù)據(jù)庫類型或改變數(shù)據(jù)庫的連接地址時,只需從新配置這個數(shù)據(jù)庫資源即可。
這是一個值得考慮的問題,因為這是你在設計一個具體應用是考慮使用CMP還是使用BMP的依據(jù)之一。在設計一個CMP Bean時,Bean被固定映射一個實體表,表中的每個指定字段被映射成bean的一個public型類變量,在實際開發(fā)中,只需要在Bean的實現(xiàn)類中聲明這些類變量,映射操作和SQL處理被交于部署者和容器自動完成。當然你可以迅速的開發(fā)出一個CMP
Bean,但可能會因為復雜的數(shù)據(jù)邏輯處理而放棄使用CMP Bean而采用BMP Bean,至少在規(guī)范1.1版本,對CMP Bean規(guī)范的定義帶來束縛還是比較大。
只有Entity Bean有主鍵,session調(diào)用主鍵方法將拋出一個異常。Entity Bean是數(shù)據(jù)面向數(shù)據(jù)對象的表示,每個Bean的實例代表一行記錄,所以就必須有一個主鍵來標識這個對象,以能夠?qū)ζ溥M行持久性操作。
新聞熱點
疑難解答