




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Entity Bean 13.2 BMP Entity Bean13.2 BMP Entity Bean13.1 13.1 實體實體BeanBean編程基礎編程基礎13.3 CMP Entity Bean13.3 CMP Entity Bean13.4 13.4 EJB QLEJB QL語言語言13.1 實體實體Bean編程基礎編程基礎 1. 什么是Entity Bean2. Entity Bean所包含的文件 3. Entity Bean的一些特點 1. 什么是什么是Entity Bean Entity Bean是表示數(shù)據(jù)的組件。 Entity Bean用成員變量來存放來自數(shù)據(jù)庫中的數(shù)據(jù),數(shù)
2、據(jù)庫中的每一例都對應與Entity Bean對象的一個成員變量,數(shù)據(jù)庫中的一條記錄則對應一個Entity Bean對象實例,Entity Bean還提供一些與變量相關的操作方法。 2. Entity Bean所包含的文件 Entity Bean類 一個Entity Bean類的定義對應于數(shù)據(jù)庫的一張表或視圖,而一個Entity Bean類的實例則對應于表或視圖的一條記錄。在這個類中,可以定義一些處理數(shù)據(jù)的方法,也需要一些供 EJB 容器調(diào)用的方法,EJB 容器通過這些方法來管理EntityBean。2. Entity Bean所包含的文件Entity Bean的Remote接口 實現(xiàn)Remot
3、e接口的對象是EJB對象。客戶端通過調(diào)用EJB對象來間接訪問Entity Bean的實例。Entity Bean的Home接口 客戶端利用這個接口來創(chuàng)建、查找、刪除Entity Bean的EJB對象,在這個接口里面除了要定義一些創(chuàng)建EJB對象的方法和刪除EJB對象的方法,還要定義一些查找EJB對象的方法。實現(xiàn)接口的對象叫Home對象。2. Entity Bean所包含的文件Entity Bean的local 接口和local Home接口 在很多時候Entity Bean的客戶端是一些運行在同一個EJB容器中的其他Session Bean或Entity Bean,local接口和local H
4、ome接口就是Entity Bean的本地接口。 Entity Bean的主鍵類 主鍵類包含了能唯一標識數(shù)據(jù)庫中一條記錄的字段,這些字段都對應于主鍵類中的一個成員變量。主鍵類必須是實現(xiàn)了序列化接口的可序列化Java對象。2. Entity Bean所包含的文件 Entity Bean的部署描述文件 這個文件包含了一些在部署時EJB容器要用到的屬性列表。 3. Entity Bean的一些特點的一些特點 Entity Bean的壽命很長 3. Entity Bean的一些特點的一些特點 Entity Bean是數(shù)據(jù)庫的視圖 EjbStore() 和ejbLoad()方法完成內(nèi)存中的數(shù)據(jù)和數(shù)據(jù)庫中
5、的數(shù)據(jù)同步。ejbLoad()方法負責從數(shù)據(jù)庫中把數(shù)據(jù)讀入到Bean實例的相對應的成員變量中,而EjbStore()方法則把成員變量中的數(shù)據(jù)保存到相應的數(shù)據(jù)庫字段中去。由EJB容器決定在什么時候調(diào)用這兩個方法。 3. Entity Bean的一些特點的一些特點 多個Entity Bean可能同時代表同一個數(shù)據(jù)記錄 在EJB中session bean、entity bean 和message_driven bean的實例都是單線程的。因為這一限制使得一個Bean實例在同一時刻只能服務于一個客戶端,所以EJB容器允許在需要的時候初始化多個相同的Bean實例,而每一個Bean實例的數(shù)據(jù)源都是一樣的。
6、數(shù)據(jù)的同步也是有EJB容器自動完成的。 3. Entity Bean的一些特點的一些特點 Entity Bean池 通常EJB容器會根據(jù)設置預先初始化幾個Bean實例,并把它們放到一個Bean池中,當需要使用它們時,才把相關的數(shù)據(jù)讀入其中,客戶端調(diào)用完后,并不馬上銷毀它們,而是繼續(xù)讓它們留在Bean池中,當新的請求到達時,再把實例和相關的EJB對象關聯(lián)起來,并把數(shù)據(jù)讀入其中。3. Entity Bean的一些特點的一些特點 Entity Bean池 Entity Bean在進出Bean池時也有激活(Activated)和鈍化(Passivated)。Entity Bean的激活(Activat
7、ed)和鈍化(Passivated)還需要調(diào)用ejbStore() 和ejbLoad()方法來保存Bean的狀態(tài)。 3. Entity Bean的一些特點的一些特點 有兩種方法處理Entity Bean的數(shù)據(jù)存儲方式 BMP(Bean-managed Persistence)是Bean自己管理的存儲方式。 CMP (Container- managed Persistence)是由容器來管理的存儲方式。 3. Entity Bean的一些特點的一些特點 Entity Bean的創(chuàng)建和刪除和Session Bean是不同的 ejbCreare() 方法中要執(zhí)行數(shù)據(jù)庫的插入操作,而在ejbremo
8、ve()方法中則執(zhí)行數(shù)據(jù)庫的刪除操作,Home對象的creare()方法必須把相應的字段值傳給ejbCreare()方法。creare()方法返回的是remote接口,也就是EJB對象。 3. Entity Bean的一些特點的一些特點 Entity Bean的查找 Entity Bean提供了許多ejbFinder方法,同時在Home接口中也對應著有一系列的Finder方法,客戶端獲取了對Home對象的引用后,就直接調(diào)用Home對象的Finder方法,F(xiàn)inder方法從數(shù)據(jù)庫中找到對應的數(shù)據(jù)后,就返回一個相對應的EJB對象。 3. Entity Bean的一些特點的一些特點 Entity B
9、ean上下文對象 對于Entity Bean,context對象實現(xiàn)的接口是javax.ejb.EntityContext,它是從 javax.ejb.EJBContext 繼承來的。 13.2 BMP Entity Bean BMP(Bean-managed Persistent Entity Bean)需要Bean自己完成數(shù)據(jù)的存取操作,也就是說需要編程來實現(xiàn)從Entity Bean到數(shù)據(jù)庫的映射,通常需要使用數(shù)據(jù)庫API(JDBC或SQL/J)進行編程。 13.2 BMP Entity Bean 1. Entity Bean 基礎 2. Entity Bean的finder方法 3. B
10、MP實例Account Bean 4. BMP Entity Bean的生命周期 1. Entity Bean 基礎基礎 一 個 E n t i t y B e a n 類 必 須 實 現(xiàn)javax.ejb.EntityBean接口,這個接口定義了很多Bean類必須實現(xiàn)的方法,EJB容器需要使用這些方法來對Entity Bean進行管理。1. Entity Bean基礎基礎 javax.ejb.EntityBean:public interface javax.ejb.EntityBean implements javax.ejb.EnterpriseBean public void setE
11、ntityContext(javax.ejb.EntityContext); public void unsetEntityContext(); public void ejbRemove(); public void ejbActivate(); public void ejbPassivate(); public void ejbLoad(); public void ejbStore();1. Entity Bean基礎基礎 除了這些方法,還需要實現(xiàn)一些創(chuàng)建Entity Bean和查找Entity Bean的方法。無論是BMP還是CMP,都需要實現(xiàn)這些方法。 1. Entity Bean
12、基礎基礎 SetEntityContext() EJB容器初始化一個新的Entity Bean實例時,EJB容器會調(diào)用這個方法。這個方法把新建的Bean實例和一個Context對象聯(lián)系起來。EJB容器調(diào)用這個方法的時候,這個Bean實例還只存在于Bean池中,實例中還沒有任何數(shù)據(jù),它也沒有與具體的EJB對象相關聯(lián)。 1. Entity Bean基礎基礎 EjbFind() 可以使用這個方法找到一個或多個已經(jīng)存在的Entity Bean數(shù)據(jù)實例。用戶至少需要實現(xiàn)一個finder方法,那就是ejbFindByPrimaryKey(),這個方法把數(shù)據(jù)實例的主鍵或主鍵類返回給EJB容器,EJB容器會根
13、據(jù)具體情況初始化一個或多個Bean實例,然后創(chuàng)建EJB對象,并與Bean實例相關聯(lián),最后把EJB對象的引用返回給客戶端。在容器完成對這個方法的調(diào)用以后,Bean實例就不在Bean池中了,它們被綁定到相應的EJB對象上。 1. Entity Bean基礎基礎 EjbHome() 有時候需要對多個Entity Bean的數(shù)據(jù)實例進行操作。Home方法是Bean實例的特殊方法,用戶可以調(diào)用存在于池中的任何一個實例來完成操作。 1. Entity Bean基礎基礎 EjbCreate() 如果客戶端調(diào)用home 對象的create方法,相應地會在數(shù)據(jù)庫中插入一條新的記錄,然后EJB容器會新建一個EJB
14、對象,并把這個對象和某個Bean實例相關聯(lián),在這個Bean實例中保存著新插入的數(shù)據(jù)。在容器完成對這個方法的調(diào)用的時候,Bean實例就不在Bean池中了,它已經(jīng)包含了新建的數(shù)據(jù),并與某個EJB對象相關聯(lián)。這個方法同時把EJB對象的引用返回個客戶端。 1. Entity Bean基礎基礎 EjbPostCreate() 對應于每一個EjbCreate方法,都需要定義響應的ejbPostCreate方法,EJB容器在完成ejbCreate方法的調(diào)用后馬上調(diào)用ejbPostCreate方法??梢岳眠@個方法做一些針對EJB對象的初始化工作,還可以使用這個方法重新設定一些與事務處理相關的參數(shù)。 1. E
15、ntity Bean基礎基礎 EjbActivate() 在這個方法中需要建立Bean需要的資源連接。注意:不能在這個方法中從數(shù)據(jù)庫讀數(shù)據(jù),這個任務是有ejbLoad()完成的,此外ejbActivate方法在一個事務處理的過程中是不可能會調(diào)用的。 1. Entity Bean基礎基礎 EjbLoad() EJB容器通過這個方法把數(shù)據(jù)庫中的數(shù)據(jù)讀入到Bean實例中。調(diào)用Entity Bean的context對象的getPrimaryKey方法可以告訴EJB容器應該讀取哪條數(shù)據(jù)。 1. Entity Bean基礎基礎 EjbPassivate() 當EJB容器要讓Bean實例返回到Bean池中去
16、時,會調(diào)用這個方法,這叫做Bean實例的鈍化,在這個方法中需要釋放所有在ejbActivate中獲取的資源。同樣也不需要在這個方法中進行數(shù)據(jù)的保存工作,這個工作是有ejbStore()完成的。這個方法在一個事務處理的過程中也不會被調(diào)用。 1. Entity Bean基礎基礎 EjbRemove() 調(diào)用這個方法將刪除數(shù)據(jù)庫中相應的數(shù)據(jù)記錄,但是Bean實例卻不會被刪除。用戶需要調(diào)用EntityContext對象的getPrimaryKey方法告訴EJB容器應該刪除哪條數(shù)據(jù)記錄。 1. Entity Bean基礎基礎 unsetEntityContext() 這個方法的調(diào)用意味著Bean實例即將
17、被刪除,這個實例不再和某個context對象相關聯(lián),在這個方法里需要釋放所有Bean實例用到的資源,然后這個Bean實例就等著進回收站了。 2. Entity Bean的的finder方法方法 編寫finder方法必須遵循的規(guī)則: 所有的finder方法是以”ejbFind”開頭的。 至少應該有一個ejbFindByPrimaryKey方法。 可以定義很多finder方法,不同的finder方法的參數(shù)和名稱各不相同。 一個finder方法要么返回一個主鍵或主鍵類,要么返回主鍵或主鍵類的集合。 2. Entity Bean的的finder方法方法 客戶端并不會直接調(diào)用Bean實例的這些finde
18、r方法,而是通過home對象來間接調(diào)用,也就是說對應每一個ejbFind方法,在home接口中都需要定義相應的finder方法,參數(shù)必須與Bean類中定義的一樣,home接口中的finder方法返回對EJB對象的引用。home接口中的finder方法名以”Find”開頭,少了“ejb”三個字母。3. BMP實例實例Account Bean 略略4. BMP Entity Bean的生命周期的生命周期 1) 首先并沒有任何Bean存在,EJB容器根據(jù)需要,通過newInstance()方法調(diào)用Bean的構造函數(shù),初始化一個新的Bean實例,然后容器調(diào)用setEntityContext()方法把這
19、個Bean實例和一個Context對象關聯(lián)起來,這個Context對象包含有Bean運行所需要的環(huán)境信息。4. BMP Entity Bean的生命周期的生命周期 2) 這個時候Bean實例已經(jīng)位于Bean池中,但是還沒有讀入任何數(shù)據(jù),也沒有獲得Bean所需要的資源,當然也沒有任何EJB對象和它關聯(lián)??蛻舳嗽谶@個時候可以調(diào)用Bean的創(chuàng)建和查找方法,還可以調(diào)用Bean的ejbHome方法,這些方法都是獨立于具體的數(shù)據(jù)實例的。4. BMP Entity Bean的生命周期的生命周期 2) 如果容器需要對Bean池進行調(diào)整,它可以在這個時候刪除這個Bean實例,容器通過調(diào)用unsetEntityC
20、ontext()方法告訴Bean實例它將被刪除,然后容器會釋放所有對該實例的引用,最后 B e a n 實 例 被 徹 底 刪 除 。 所 以 在unsetEntityContext()方法中要執(zhí)行和setEntityContext()方法相反的操作,為刪除做準備。4. BMP Entity Bean的生命周期的生命周期 3) 客戶端如果調(diào)用home對象的create()方法,容器首先從Bean池中取出一個實例,然后調(diào)用Bean實例的ejbCreate()方法,這個方法新建了一個數(shù)據(jù)實例,并向數(shù)據(jù)庫中插入一條新記錄,最后容器新建一個EJB對象,并把對EJB對象的引用返回給客戶端。從這個時候開始
21、Bean實例處于“ready”狀態(tài)。4. BMP Entity Bean的生命周期的生命周期 4) Bean實例在處于“ready”狀態(tài)的時候,它被綁定到一個數(shù)據(jù)實例和EJB對象上。如果同時還有其他 Bean 實例對應同一個數(shù)據(jù)實例,容器會負責在適當?shù)臅r候調(diào)用ejbLoad()和ejbStore()方法來保持數(shù)據(jù)的同步。 4. BMP Entity Bean的生命周期的生命周期 5) 如果客戶端調(diào)用home對象的remove()方法,容器會調(diào)用Bean實例的ejbRemove()方法,這個方法將刪除數(shù)據(jù)庫中對應的記錄,至此,Bean實例不再和任何EJB對象相關聯(lián),并退回到Bean池中,注意這里
22、并沒有把Bean實例刪除,而是刪掉了數(shù)據(jù)實例。 4. BMP Entity Bean的生命周期的生命周期 6) 如果EJB容器發(fā)現(xiàn)分配給某個客戶端的時間已經(jīng)用完,或者容器需要使用這個Bean實例服務于其他客戶端,或者容器已經(jīng)耗盡了資源,那么當前Bean實例將會被鈍化(Passivate),在調(diào)用鈍化方法之前,EJB容器首先調(diào)用ejbStore()以保證數(shù)據(jù)庫中的數(shù)據(jù)是最新的,鈍化之后,Bean實例就回到了Bean池中。 4. BMP Entity Bean的生命周期的生命周期 7) 如果容器又決定把這個到Bean實例分配給其他客戶端,也就是讓它和一個新的EJB對象相關聯(lián),那么容器首先需要激活B
23、ean實例。容器在調(diào)用ejbActivate()之后會調(diào)用ejbLoad()方法把數(shù)據(jù)讀入到Bean實例中。13.3 CMP Entity Bean CMP(Container-managed Persistent Entity Bean)不需要直接進行數(shù)據(jù)庫API編碼,它的數(shù)據(jù)庫存取是由容器來完成的。13.3 CMP Entity Bean 1. CMP Entity Bean的特點 2. 編寫CMP Entity Bean的基本規(guī)則4. CMP實例User5. CMP Entity Bean的生命周期 3. JBOSS4.0配置1. CMP Entity Bean的特點 1)數(shù)據(jù)處理邏輯和
24、數(shù)據(jù)存取邏輯的分離 首先你需要編寫一個不包含任何存取邏輯(JDBC代碼)的Entity Bean,然后容器自動從你定義的這個Bean類繼承,并生成一個子類,容器在這個子類中嵌入了由容器自動生成的JDBC代碼,這就是CMP,由容器來完成數(shù)據(jù)存取邏輯,而數(shù)據(jù)處理邏輯則由你定義的父類完成。所以CMP Entity Bean實際上包含兩個Bean類,一個是用戶定義的父類,另一個則是由容器生成的子類,在子類中封裝有數(shù)據(jù)的存取邏輯。1. CMP Entity Bean的特點 2)與數(shù)據(jù)庫字段相對應的成員變量在子類中定義 CMP Entity Bean類是在它的子類中定義這些成員變量的。因為不同的EJB容器
25、對數(shù)據(jù)的表達方式不一樣,另外數(shù)據(jù)的表達也應該和數(shù)據(jù)的存取邏輯放在一塊,這樣進一步體現(xiàn)數(shù)據(jù)的處理邏輯和數(shù)據(jù)的存取邏輯的分離。 1. CMP Entity Bean的特點 3)get/set方法也在子類中定義 和代表數(shù)據(jù)的成員變量一樣,這些變量的get/set方法也是在子類中定義的。為了能夠在父類中調(diào)用子類中的方法,必須要在父類中把相關的方法定義為abstract。 1. CMP Entity Bean的特點 4)部署描述文件在CMP中的作用 在CMP中,EJB容器通過部署描述文件獲取相關的信息來產(chǎn)生數(shù)據(jù)成員變量、get/set方法和JDBC編碼。 1. CMP Entity Bean的特點 5)
26、EJB查詢語言 EJB查詢語言(EJB-QL)是一種面向?qū)ο蟮牟樵冋Z言,它的基本語法和SQL很相似。在部署文件中定義EJB-QL語言,EJB容器通過這些語言來生成相應的JDBC代碼。 1. CMP Entity Bean的特點 6)ejbSelect()方法 CMP Entity Bean有一個專門的ejbSelect()方法,這個方法并不向客戶端開放,它是一個內(nèi)部方法,這個方法在處理Bean之間的關系是非常有用。 2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則1)SetEntityContext() 和BMP一樣,EJB容器初始化一個新的Entity Bean實例時,EJB容
27、器會調(diào)用這個方法。這個方法把新建的Bean實例和一個Context對象聯(lián)系起來。EJB容器調(diào)用這個方法的時候,這個Bean實例還只存在于Bean池中,實例中還沒有任何數(shù)據(jù),它也沒有與具體的EJB對象相關聯(lián)。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則2)ejbFind() 對于CMP,用戶不需要實現(xiàn)這些方法,當客戶端調(diào)用home對象的finder方法時,EJB通過EJB-QL和其他一些工具來告訴容器如何完成查找工作。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則3) ejbSelect() 客戶端不用調(diào)用這些方法, 這些方法是輔助Bean進行內(nèi)部查詢用的,通常
28、需要定義為abstract型。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則4)EjbHome() 這些操作對象并不是哪個單獨的數(shù)據(jù)實例,而是很多數(shù)據(jù)實例,客戶端調(diào)用這些方法的時候,Bean實例可能還位于Bean池中。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則5)EjbCreate() 當客戶端調(diào)用這些方法的時候,會新生成一個數(shù)據(jù)實例,也就是說會在數(shù)據(jù)庫中插入一條新記錄。對于CMP,用戶不需要像BMP那樣進行JDBC數(shù)據(jù)插入操作,而是簡單的檢查一下傳入的參數(shù)是否正確,然后把值傳給相應的成員變量。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則6
29、)EjbPostCreate() 對 應 于 每 一 個 E j b C r e a t e 方 法 , 都 有 一 個EjbPostCreate方法,容器在調(diào)用完EjbCreate方法后,馬上就調(diào)用EjbPostCreate方法,這個時候Bean實例已經(jīng)和一個EJB對象關聯(lián)起來了,用戶就馬上可以在這個方法中做一些跟EJB對象相關的初始化工作。 2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則7)EjbActivate() 如果客戶端調(diào)用某個EJB對象的方法,但是這個EJB對象卻還沒有和Bean實例相關聯(lián),容器就會從Bean池中取出一個來,這叫做Bean的激活,在這個方法中需要獲
30、取Bean要用到的一些資源。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則8)EjbLoad() 用戶不需要像BMP那樣在這個方法進行數(shù)據(jù)庫的讀操作,EJB容器在調(diào)用這個方法之前自動從數(shù)據(jù)庫中讀入相關字段的值。當然這并不意味著這個方法就沒有什么用了,你可以在這個方法中對讀入的數(shù)據(jù)做一些加工。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則9)EjbPassivate() 如果容器調(diào)用這個方法,Bean實例就返回到Bean池中去了,這叫做Bean實例的鈍化,在這個方法中需要釋放所有在ejbActivate中獲取的資源。 2.編寫編寫CMP Entity Bean的基
31、本規(guī)則的基本規(guī)則10)EjbRemove() 如果客戶端調(diào)用這個方法,容器會刪除相應的數(shù)據(jù)實例,也就是刪除數(shù)據(jù)庫中的當前記錄,但不會刪除Bean實例,Bean實例可以返回到Bean池中供其他客戶端使用。和BMP不同,在這個方法中用戶不需要編碼進行數(shù)據(jù)庫的刪除操作,而只需要做一些刪除數(shù)據(jù)之前的準備工作,容器在調(diào)用完這個方法后馬上自動完成刪除操作。2.編寫編寫CMP Entity Bean的基本規(guī)則的基本規(guī)則11)unsetEntityContext() 調(diào)用這個方法意味著Bean實例要被刪除了,這個時候Bean實例不再和context對象相關聯(lián),在這個方法中需要釋放所有在setEntityCon
32、text方法中獲取的資源。 3. JBOSS4.0JBOSS4.0配置配置(1)(1)創(chuàng)建創(chuàng)建jboss_homeserverdefaultdeploymysql-ds.xmljboss_homeserverdefaultdeploymysql-ds.xml。(2) mysql-connector-java-5.0.8-bin.jar(2) mysql-connector-java-5.0.8-bin.jar復制到復制到 jboss_homeserverdefaultlib jboss_homeserverdefaultlib文件夾下。文件夾下。3. JBOSS4.0JBOSS4.0配置配置(
33、3) 編輯編輯JBoss安裝目錄安裝目錄/server/default/deploy/conf/login-config.xml: login-module code = flag = required guest guest guest guest guest guest module-option name = jboss.jca:service=TxCM,name=JmsXAjboss.jca:service=TxCM,name=JmsXAdule-option 3. JBOSS4.0JBOSS4.0配置配置 login-module code = flag = required tes
34、ttest rootroot zm661068zm661068/module-option module-option name = jboss.jca:service=LocalTxCM,name=managedConnectionFactoryNamejboss.jca:service=LocalTxCM,name=MySqlDSMySqlDS 3. JBOSS4.0JBOSS4.0配置配置(4) 編輯編輯JBoss安裝目錄安裝目錄/server/default/deploy/conf/standardjaws.xml: java:/DefaultDS java:/DefaultDS Hy
35、personic SQL Hypersonic SQL false false 3. JBOSS4.0JBOSS4.0配置配置 java:/ java:/MySqlDSMySqlDS mySQLmySQL false false3. JBOSS4.0JBOSS4.0配置配置(5) 編輯編輯JBoss安裝目錄安裝目錄/server/default/deploy/conf/standardjbosscmp-jdbc.xml: java:/DefaultDS java:/DefaultDS 3. JBOSS4.0JBOSS4.0配置配置 java:/ java:/MySqlDSMySqlDS4. C
36、MP實例實例User Bean 1. User.java2. UserHome.java3. UserBean.java4. CMP實例實例User Bean 新建一個 Lomboz J2EE Project: 項目名:CMP_Sample EJB Modules:cmpEJB Targeted Server: JBoss 4.0.44. CMP實例實例User Bean 繼續(xù)在繼續(xù)在 CMP_Sample CMP_Sample 項目中,右擊項目中,右擊“srcsrc” - -新新建建 -其它其它 - Lomboz EJB Creation Wizard :- Lomboz EJB Creat
37、ion Wizard : 包(包(K K) :ejb.cmpejb.cmp 名稱(名稱(M M):): UserUser EJB Type EJB Type:選擇選擇ContainerContainerManaged EntityManaged EntityEJBEJB 點擊下一步。點擊下一步。4. CMP實例實例User Bean 4. CMP實例實例User Bean 同樣,再增加一個密碼欄:同樣,再增加一個密碼欄: Field: password, Field: password, Field Type: java.lang.String, Field Type: java.lang.S
38、tring, Database Column: Database Column: 密碼密碼, , SQL Type: varchar SQL Type: varchar 這個不要使它成為主鍵。這個不要使它成為主鍵。 最后點擊完成。最后點擊完成。4. CMP實例實例User Bean 修改生成的修改生成的 UserBean.java UserBean.java 文件,先添加自動創(chuàng)建表的語句文件,先添加自動創(chuàng)建表的語句 4. CMP實例實例User Bean 4. CMP實例實例User Bean 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostC
39、reate 方法:方法:4. CMP實例實例User Bean 在上面的在上面的 ejb.bean ejb.bean 中添加中添加 view-type = view-type = locallocal 4. CMP實例實例User Bean 試驗各種配置: 先將 UserBean.java 添加到 cmpEJB 模塊中,然后 lomboz -Generate EJB Classes Generate EJB Classes 生成其它ejb類文件。 運行 MySQl 服務,再通過 Lomboz 啟動 JBoss 服務器。 通過 Deploy ModuleDeploy Module 部署 cmpE
40、JB 模塊,再打開MySql的客戶端,會發(fā)現(xiàn)在 cmp_sample 數(shù)據(jù)庫中已經(jīng)自動生成了一個 usertable 的數(shù)據(jù)表。 4. CMP實例實例UserManagementBean 右擊右擊 javamxj.ejb.cmp包包-新建新建-其它其它-還是選擇還是選擇Lomboz EJB Creation Wizard : 包(K) :javamxj.ejb.cmp 名稱(M): UserManagement EJB Type: 選擇 Stateless 然 后 , 點 擊 “ 完 成 ” , 這 時 會 生 成 一 個 UserManagementBean.java 的文件。4. CMP實
41、例實例UserManagementBean 首先,增加一個 UserLocalHome 的變量 userHome, private UserLocalHome userHome = null; 然后右擊 UserManagementBean -J2EE -Add Create Method(這是 JBossv-IDE 附帶的):4. CMP實例實例UserManagementBean4. CMP實例實例UserManagementBean4. CMP實例實例UserManagementBean在生成的代碼框中添加語句:在生成的代碼框中添加語句:userHome = UserUtil.getLo
42、calHome();userHome = UserUtil.getLocalHome(); 如下圖:需要手工輸入的語句已經(jīng)標出來了:如下圖:需要手工輸入的語句已經(jīng)標出來了:4. CMP實例實例UserManagementBean添加業(yè)務方法:添加業(yè)務方法: 增 加增 加 a d d U s e r 方 法 , 向 上 面 操 作 一 樣 , 右 擊方 法 , 向 上 面 操 作 一 樣 , 右 擊UserManagementBean-J2EE-AddBusinessMethod: 4. CMP實例實例UserManagementBean在生成的代碼框中添加語句:在生成的代碼框中添加語句:Use
43、rLocal user = userHome.create(email, password);UserLocal user = userHome.create(email, password); 增加增加 removeUser removeUser 方法方法 4. CMP實例實例UserManagementBean在生成的代碼框中添加語句:在生成的代碼框中添加語句:userHome.remove(email);userHome.remove(email); 增加增加verifyPassword verifyPassword 方法方法 4. CMP實例實例UserManagementBean在生
44、成的代碼框中添加語句:在生成的代碼框中添加語句:UserLocal user = userHome.findByPrimaryKey(email);UserLocal user = userHome.findByPrimaryKey(email);return user.getPassword().equals(password);return user.getPassword().equals(password); 為了將為了將 UserBean UserBean 與與 UserManagementBean UserManagementBean 聯(lián)系起來,在上面聯(lián)系起來,在上面注釋中添加:注
45、釋中添加:* * view-type = remoteview-type = remote * * ejb.ejb-ref ejb.ejb-ref * * ejb-name = Userejb-name = User“* * view-type = local view-type = local“* * ref-name = ejb/UserLocal ref-name = ejb/UserLocal* * jboss.ejb-local-ref jboss.ejb-local-ref * * ref-name = UserLocalref-name = UserLocal * * jndi-
46、name = UserLocal jndi-name = UserLocal 4. CMP實例實例UserManagementBean 4. CMP實例實例UserManagementBean 將 UserManagementBean 加入到 cmpEJB 模塊中, 然后 lomboz -Generate EJB Classes 運行 MySQl 服務,再通過 Lomboz 啟動 JBoss 服務器。 然后通過 Deploy Module 部署 cmpEJB 模塊 4. CMP實例實例CMPClient1 右擊右擊 srcsrc文件夾文件夾 -新建新建 -其它其它- Lomboz EJB -
47、Lomboz EJB Test ClientTest Client Wizard: Wizard: 4. CMP實例實例CMPClient1 修改生成的修改生成的 CMPClient1.javaCMPClient1.java4. CMP實例實例CMPClient1 運行客戶端程序,則客戶端控制臺會輸出:運行客戶端程序,則客戶端控制臺會輸出:Login=true 同 時 , 用同 時 , 用 M y S Q L 客 戶 端 軟 件 查 看客 戶 端 軟 件 查 看cmp_sample表。表。5. CMP Entity Bean的生命周期的生命周期 CMP Entity Bean的生命周期和BMP
48、 Entity Bean的生命周期基本一樣,唯一的不同就是CMP實體Bean的ejbSelect()方法能夠從池化狀態(tài)或就緒狀態(tài)被調(diào)用。13.4 EJB QL語言語言 EJB 查詢語言 (EJB QL: Enterprise JavaBean Query Language) 規(guī)定了持久性管理器應該如何實現(xiàn)在本地接口中定義的各種查找方法。 EJB QL 以 SQL-92 為基礎,可由持久性管理器自動編譯,這使得實體 bean 具有更高的可移植性,并且更容易部署。 13.4 EJB QL語言語言EJBQL語法語法Finder方法方法Select方法方法FROM子句子句WHERE子句子句6.SELE
49、CT子句子句7.EJBQL和查找方法和查找方法8.EJBQL和選擇方法和選擇方法1. EJB QL 語法語法 EJB QL定義了使用抽象模式名稱和關聯(lián)進行導航的查詢。 EJB QL = select子句 from子句 where子句 其中from子句為引導模式,聲明了抽象模式名字的識別變量。通過這些識別變量, select子句定義了查詢的返回類型, where子句定義了查詢條件。 2. Finder 方法方法 finder方法從持久化存儲的關系數(shù)據(jù)庫內(nèi)獲取一個實體Bean個體和集合。這些方法定義在實體Bean的home接口中。因此,它們對客戶端是可見的。 3. Select 方法方法 sele
50、ct方法是實體Bean中的特殊的查詢方法。它們沒有在home接口內(nèi)聲明,因此,它們對客戶端是不可見的。Select方法通常有兩種形式:ejbSelectejbSelectInEntity 3. Select 方法方法 Select方法通常有兩種形式: ejbSelect ejbSelectInEntityejbSelect方法不跟特定的實體Bean實例發(fā)生聯(lián)系。ejbSelect InEntity方法是跟特定于實體Bean的執(zhí)行實例的。 4. FROM 子句子句 from子句通過聲明識別變量定義了查詢域。識別變量 不能在SELECT子句和WHERE子句內(nèi)聲明。 SELECT子句和WHERE子句
51、只能使用這些定義在FROM子 句內(nèi)的識別變量。 FROM子句可以定義多個識別變量。識 別變量的名稱不應該跟抽象模式的名稱或EJB的名稱相同 。識別變量也不允許是保留字。識別變量聲明由范圍變 量聲明和集合成員聲明。4. FROM 子句子句 4. FROM 子句子句 例:找出所有的軟盤驅(qū)動器產(chǎn)品的訂單: SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE duct_type=“fFloppy Drive” FROM子句聲明了標識符“o”為一個范圍變量,“l(fā)i” 為一個集合成員變量。5. WHERE 子句子句 WHE
52、RE子句定義了SELECT表達式的條件。在EJB QL中, WHERE子句所有識別變量必須在FROM子句內(nèi)聲明。也可以為finder和select方法傳遞輸入?yún)?shù)。如:SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE li.quantity=?1SELECT OBJECT(o) FROM Order o,IN(o.lineItems)li WHERE duct_type= ?1 AND duct.price=?26. SELECT 子句子句 SELECT子句指示了查詢的執(zhí)行結果。 SELECT子句決定查詢返回值的類型。如:SELECT OBJECT(o) FROM Order o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 把握時機2025年證券從業(yè)考試試題及答案
- 影視設備行業(yè)信息技術支持服務批發(fā)考核試卷
- 常州新風管安裝施工方案
- 纖維素纖維的抗菌性與保健功能考核試卷
- 財務預算編制基礎知識試題及答案
- 2025年會計錯誤更正試題及答案
- 租賃設備的行業(yè)應用案例解析考核試卷
- 干部休養(yǎng)所人際關系和諧考核試卷
- 2024年項目管理目標管理試題及答案
- 銀行從業(yè)資格考試應試基礎知識復習試題及答案
- 高++中語文++高考復習+語言文字運用之錯別字
- 個人用電協(xié)議合同范例
- 2025年江蘇南京地鐵運營有限責任公司招聘筆試參考題庫含答案解析
- SZDB∕Z 317-2018 大中型商場、超市安全防范規(guī)范
- 《圓柱和圓錐》單元整體設計(教學設計)-2023-2024學年六年級下冊數(shù)學北京版
- 《蓋碗茶介紹》課件
- 基于專利視角下人工智能在合成生物學中的應用
- 印刷行業(yè)安全培訓
- 產(chǎn)品經(jīng)理實習報告
- 2025贍養(yǎng)老人個稅扣除分攤協(xié)議書模板
- 《陸上風電場工程變形測量技術規(guī)程》
評論
0/150
提交評論