軟件中間件技術(shù)UNIT14_第1頁(yè)
軟件中間件技術(shù)UNIT14_第2頁(yè)
軟件中間件技術(shù)UNIT14_第3頁(yè)
軟件中間件技術(shù)UNIT14_第4頁(yè)
軟件中間件技術(shù)UNIT14_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、14.1 數(shù)據(jù)庫(kù)表關(guān)系數(shù)據(jù)庫(kù)表關(guān)系 1. 關(guān)系基數(shù) 2. CMP和BMP的不同點(diǎn) 3. 用BMP實(shí)現(xiàn)一對(duì)一關(guān)系 4.用BMP實(shí)現(xiàn)一對(duì)多關(guān)系 5. 用BMP實(shí)現(xiàn)多對(duì)多關(guān)系 6.用CMP實(shí)現(xiàn)例子 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 8.用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 9. 用CMP實(shí)現(xiàn)多對(duì)多關(guān)系1. 關(guān)系基數(shù) 關(guān)系基數(shù)有三種形式: 1:1關(guān)系 1:N關(guān)系 M:N關(guān)系CMP(Container-Managed Persistence)和CMR(Container-Managed Relationships) 2. CMP和BMP的不同點(diǎn) BMP需要自己在Bean的編碼中明確實(shí)現(xiàn)關(guān)系。 CMP是通過(guò)在部署描述文件中

2、聲明Bean之間的關(guān)系,容器根據(jù)“聲明”,自動(dòng)在子類中生成處理關(guān)系的代碼。3. 用BMP實(shí)現(xiàn)一對(duì)一關(guān)系 OrderPKOrderNameShipment12345Software Order10101ShipmentPKCityZipCode10101Austin78727Order:Shipment:3. 用BMP實(shí)現(xiàn)一對(duì)一關(guān)系 public class OrderBean implements EntityBean private String orderPK;private String orderName;private Shipment shipment;public Shipmen

3、t getShipment() return shipment;public void setShipment(Shipment s) this.shipment=s;3. 用BMP實(shí)現(xiàn)一對(duì)一關(guān)系 public void ejbLoad() /1:SQL SELECT Order/取出Order表中的Shipment/2.使用JNDI API查找ShipmentHome對(duì)象/3.調(diào)用ShipmentHome.findByPrimaryKey();/傳入的參數(shù)是Order表中的Shipment,從而得到Shipment的EJB對(duì)象3. 用BMP實(shí)現(xiàn)一對(duì)一關(guān)系 public void ejbSto

4、re() /1.調(diào)用Shipment.getPrimaryKey(),/取出當(dāng)前Shipment對(duì)象的主鍵類/2:SQL UPDATE Order4. 用BMP實(shí)現(xiàn)一對(duì)多關(guān)系 CompanyPKName12345The Middleware CompanyEmployeePKNameSexCompany20202EdM1234520203FloydM12345Company:Employee:4. 用BMP實(shí)現(xiàn)一對(duì)多關(guān)系 public class CompanyBean implements EntityBean private String companyPK;private String

5、companyName;private Vector employees;public Collection getEmployees() return employees;public void setEmployees(Collection e) this.employees=e;4. 用BMP實(shí)現(xiàn)一對(duì)多關(guān)系 public void ejbLoad() /1:SQL SELECT Company/2.使用JNDI API查找EmployeeHome對(duì)象/3.調(diào)用EmployeeHome.findByCompany(companyPK);public void ejbStore() /1:S

6、QL UPDATE Company5. 用BMP實(shí)現(xiàn)多對(duì)多關(guān)系 StudentPKNameCourse10101Joe Student2020210101Joe Student2020310102Smith Student2020210102Smith Student20203Student:5. 用BMP實(shí)現(xiàn)多對(duì)多關(guān)系 CoursePKNameStudent20202EJB for Architects1010120202EJB for Architects1010220203JSP and Servlets1010120203JSP and Servlets10102Course:5. 用

7、BMP實(shí)現(xiàn)多對(duì)多關(guān)系 public class StudentBean implements EntityBean private String studentPK;private String name;private Vector courses;public Collection getCourses() return courses;public void setCourses(Collection e) this.courses=e;.public void ejbLoad() /1:SQL SELECT Student/2.使用JNDI API查找CourseHome對(duì)象/3.調(diào)用

8、CourseHome.findByStudent(studentPK);public void ejbStore() /1:SQL UPDATE Student5. 用BMP實(shí)現(xiàn)多對(duì)多關(guān)系 public class CourseBean implements EntityBean private String coursePK;private String name;private Vector students;public Collection getStudents() return students;public void setStudents(Collection e) this.

9、students=e;.public void ejbLoad() /1:SQL SELECT Course/2.使用JNDI API查找StudentHome對(duì)象/3.調(diào)用StudentHome.findByCourse(coursePK);public void ejbStore() /1:SQL UPDATE Course6. 用CMP實(shí)現(xiàn)例子 基于在線內(nèi)容管理系統(tǒng)的假想認(rèn)證子系統(tǒng)的示例,它具有以下這些功能: 將用戶登錄到系統(tǒng) 認(rèn)證用戶處于某種角色 允許將用戶組織成組,從而允許進(jìn)行組操作 存儲(chǔ)諸如地址和聯(lián)系信息這樣的用戶信息 管理角色、用戶和組 6. 用CMP實(shí)現(xiàn)例子 圖圖 1 1:Us

10、erUser、GroupGroup、Role Role 和和 UserInfo UserInfo 實(shí)體實(shí)體6. 用CMP實(shí)現(xiàn)例子系統(tǒng)中的實(shí)體的概述表明有四個(gè)截然不同的實(shí)體:User、Group、Role 和 UserInfo。這些實(shí)體有下面這三種關(guān)系: User 與 Role 相關(guān)聯(lián)(多對(duì)多) 一個(gè) User 有一條 UserInfo(一對(duì)一) 一個(gè) Group 有多個(gè) User(一對(duì)多)6. 用CMP實(shí)現(xiàn)例子表名:User字段名類型說(shuō)明email(主鍵)VARCHAR(64)Email地址passwordVARCHAR(64)密碼6. 用CMP實(shí)現(xiàn)例子表名:UserInfo字段名類型說(shuō)明em

11、ail(主鍵)VARCHAREmail地址nameVARCHAR姓名deptVARCHAR組別workPhoneVARCHAR工作電話ageINTEGER年齡salaryINTEGER薪水6. 用CMP實(shí)現(xiàn)例子表名:Group字段名類型說(shuō)明name(主鍵)VARCHAR名稱description VARCHAR行業(yè)說(shuō)明6. 用CMP實(shí)現(xiàn)例子表名:Role字段名類型說(shuō)明name(主鍵)VARCHAR權(quán)限名稱description VARCHAR權(quán)限描述7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系一、設(shè)計(jì)實(shí)體一、設(shè)計(jì)實(shí)體Bean :UserInfoBean 1. 建立主體部分:建立主體部分: 在 CMP_Samp

12、le 項(xiàng)目中,右擊“src” -新建 -Lomboz EJB Creation Wizard : 包(K) :javamxj.ejb.cmp 名稱(M): UserInfo EJB Type: 選擇 Container Managed Entity EJB 點(diǎn)擊下一步。 Schema Name: UserInfoSchema Table Name: UserInfoTable 增加一個(gè) email 欄: Field: email Field Type: java.lang.String Database Column: 電子郵件 SQL Type: varchar 并且使它成為主鍵并且使它成為

13、主鍵。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 同樣,再增加一個(gè)同樣,再增加一個(gè) name 欄:欄: Field: name Field Type: java.lang.String Database Column: 姓名姓名 SQL Type: varchar 同樣,再增加一個(gè)同樣,再增加一個(gè) dept 欄:欄: Field: dept Field Type: java.lang.String Database Column: 組別組別 SQL Type: varchar 同樣,再增加一個(gè)同樣,再增加一個(gè) workPhone欄:欄: Field: workPhone Field Type: java.l

14、ang.String Database Column: 工作電話工作電話 SQL Type: varchar 同樣,再增加一個(gè)同樣,再增加一個(gè) age 欄:欄: Field: age Field Type: java.lang.Integer Database Column: 年齡年齡 SQL Type: Integer 同樣,再增加一個(gè)同樣,再增加一個(gè) salary 欄:欄: Field: salary Field Type: java.lang.Integer Database Column: 薪水薪水 SQL Type: Integer 。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 效果如下,最后點(diǎn)擊

15、完成。效果如下,最后點(diǎn)擊完成。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 2. 2. 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostCreate 方法:方法: 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 3. 3. 在類標(biāo)記中加入以下標(biāo)記。在類標(biāo)記中加入以下標(biāo)記。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 4. ejb.select 4. ejb.select 方法方法 右擊右擊 UserInfoBean -J2EE UserInfoBean -J2EE -Add Select Method-Add Select Method 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系

16、 由于ejb.Home 方法需要通過(guò) Home Home 接口才能間接使用,所以: 右擊 UserInfoBean -J2EE -Add HomeHome Method 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系如圖,點(diǎn)擊“完成”后生成的代碼,需要手動(dòng)添加一條返回語(yǔ)句。 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系5.5. 將將 UserInfoBean UserInfoBean 加入到加入到 cmpEJB cmpEJB 模塊模塊中,然后中,然后 lomboz lomboz Generate EJB Generate EJB Classes Classes 如下圖,如下圖,會(huì)生成會(huì)生成6 6個(gè)文件,其中個(gè)文件,其中 Use

17、rInfoValue.java UserInfoValue.java 是是 “ejb.value-ejb.value-objectobject”標(biāo)記生成的值標(biāo)記生成的值對(duì)象。對(duì)象。 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系6 6. 添加一個(gè)抽象方法來(lái)調(diào)用值對(duì)象。 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7 . 7 . 重 點(diǎn) : 建 立重 點(diǎn) : 建 立 UserInfoBean 與與 UserBean 的一對(duì)的一對(duì)一 的 雙 向 關(guān)一 的 雙 向 關(guān)系 :系 : 右 擊右 擊 UserInfoBean - J 2 E E - A d d CMR Relationship : 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系點(diǎn)擊點(diǎn)擊 完

18、成完成 后,生成如下代碼(紅框中的語(yǔ)句需要后,生成如下代碼(紅框中的語(yǔ)句需要手工添加):手工添加): 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系切換到切換到 UserBean.javaUserBean.java: 右擊右擊 UserBean UserBean -J2EE -Add -J2EE -Add CMR CMR Relationship : Relationship : 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系點(diǎn)擊點(diǎn)擊 完成完成 后,生成如下代碼(紅框中的語(yǔ)句需要后,生成如下代碼(紅框中的語(yǔ)句需要手工添加):手工添加): 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系點(diǎn)擊點(diǎn)擊“完成完成”后,生成如下代碼(紅框中的語(yǔ)句需要手后,生成

19、如下代碼(紅框中的語(yǔ)句需要手工添加):工添加):OkOk,再次,再次 Generate EJB ClassesGenerate EJB Classes。 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 二、在二、在UserManagementBeanUserManagementBean中添加業(yè)務(wù)方法中添加業(yè)務(wù)方法1. 1. 增加一個(gè)增加一個(gè) UserInfoLocalHome UserInfoLocalHome 的變量的變量 userHomeuserHome,并將,并將它放入它放入 ejbCreate ejbCreate 和和 ejbPassivate ejbPassivate 方法中。方法中。 7. 用CMP

20、實(shí)現(xiàn)一對(duì)一關(guān)系2. 2. 依次增加以下幾個(gè)業(yè)務(wù)方法。依次增加以下幾個(gè)業(yè)務(wù)方法。 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 保存,保存,Generate EJB ClassesGenerate EJB Classes,啟動(dòng),啟動(dòng)JBossJBoss服務(wù)器,服務(wù)器, Deploy ModuleDeploy Module。啟動(dòng)啟動(dòng)MySqlMySql,如果一切正常,則會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)建立兩個(gè),如果一切正常,則會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)建立兩個(gè)表:表:usertable usertable 和和 userinfo

21、tableuserinfotable 。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 三、創(chuàng)建客戶端三、創(chuàng)建客戶端1. 1. 右擊右擊 src src 文件夾文件夾 -新建新建 -Lomboz EJB Test Client -Lomboz EJB Test Client Wizard:Wizard: 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系2. 2. 修改生成的修改生成的 CMPClient2.javaCMPClient2.java,調(diào)用,調(diào)用UserManagementBeanUserManagementBean中的方法。先在中的方法。先在testBean()testBean()方法體外建立方法體外建立兩個(gè)兩個(gè)sta

22、ticstatic方法,簡(jiǎn)化代碼調(diào)用。方法,簡(jiǎn)化代碼調(diào)用。7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 / 創(chuàng)建用戶創(chuàng)建用戶 public static void createUsers(UserManagement userMgmt) throws RemoteException, CreateException System.out.println(向向UserInfo表中添加數(shù)據(jù)表中添加數(shù)據(jù)); userMgmt.addUser(, 密碼密碼1, 王一王一, Engineering, 111-1212, 22, 2000); userMgmt.addUser(, 密碼密碼2, 王二王二, Marketi

23、ng, 222-1213,40, 4000); userMgmt.addUser(zhangsanbbb.ccc, 密碼密碼3, 張三張三, IT, 1688888, 32, 2800); userMgmt.addUser(lisibbb.ccc, 密碼密碼4, 李四李四, Sales, 1288888, 28, 2700); userMgmt.addUser(zhubbb.eee, 密碼密碼5, 朱王五朱王五, Sales, 1588888, 38, 4500); userMgmt.addUser(, 分享分享Java快樂(lè)快樂(lè), MXJ, IT, 1788888, 26, 2900); 7.

24、 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 / / 輸出輸出ArrayListArrayList private static void printList(ArrayList list) private static void printList(ArrayList list) Iterator i = list.iterator(); Iterator i = list.iterator(); while (i.hasNext() while (i.hasNext() Object details = (Object) i.next(); Object details = (Object) i.next()

25、; System.out.println(details.toString(); System.out.println(details.toString(); System.out.println(); System.out.println(); 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系 3. 3. 然后,將然后,將testBean()testBean()方法體內(nèi)的方法體內(nèi)的 myBean myBean 改成改成 userMgmtuserMgmt,再向表中添加數(shù)據(jù)及顯示數(shù)據(jù)。再向表中添加數(shù)據(jù)及顯示數(shù)據(jù)。public void testBean() public void testBean() try tr

26、y javamxj.ejb.cmp.UserManagement userMgmt = javamxj.ejb.cmp.UserManagement userMgmt = getHome().create(); getHome().create(); createUsers(userMgmt); createUsers(userMgmt); System.out.println( System.out.println(顯示所有用戶顯示所有用戶);); printList(userMgmt.getUsers(); printList(userMgmt.getUsers(); 7. 用CMP實(shí)現(xiàn)一

27、對(duì)一關(guān)系運(yùn)行程序,則控制臺(tái)輸出如下:運(yùn)行程序,則控制臺(tái)輸出如下: 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系4. 將將“createUsers(userMgmt);”語(yǔ)句注釋掉,調(diào)用密碼驗(yàn)證及語(yǔ)句注釋掉,調(diào)用密碼驗(yàn)證及改變用戶姓名的方法。改變用戶姓名的方法。 /createUsers(userMgmt); System.out.println(顯示所有用戶顯示所有用戶); printList(userMgmt.getUsers(); boolean login = false; login = userMgmt.verifyPassword(, 分享分享Java快樂(lè)快樂(lè)); System.out.print

28、ln(密碼驗(yàn)證:密碼驗(yàn)證: + login); System.out.println(改變用戶改變用戶的名字的名字); userMgmt.changeName(,Hello); 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系運(yùn)行程序,則會(huì)發(fā)現(xiàn)運(yùn)行程序,則會(huì)發(fā)現(xiàn) javamxj javamxj 的姓名已被更改為的姓名已被更改為 HelloHello: 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系5. 5. 繼續(xù)調(diào)用按年齡查詢用戶的方法:繼續(xù)調(diào)用按年齡查詢用戶的方法: System.out.println(System.out.println(采用采用 ejb.finder ejb.finder 輸出大于輸出大于3030的用戶的用

29、戶);); printList(userMgmt.getUserByAge1(30); printList(userMgmt.getUserByAge1(30); System.out.println( System.out.println(采用采用 ejb.select ejb.select 輸出年齡大輸出年齡大于于3030的用戶的用戶);); printList(userMgmt.getUserByAge2(30); printList(userMgmt.getUserByAge2(30);7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系輸出:輸出: 7. 用CMP實(shí)現(xiàn)一對(duì)一關(guān)系6.繼續(xù)調(diào)用通過(guò)繼續(xù)調(diào)用通過(guò)V

30、alueObject輸出用戶的方法:輸出用戶的方法: System.out.println(通過(guò)通過(guò) ValueObject 輸出用戶信息:輸出用戶信息:); UserInfoValue users = userMgmt.getUsersInfo(); for (int index = 0; index -新建新建 - -Lomboz EJB Creation Wizard :Lomboz EJB Creation Wizard : 包(包(K K) :javamxj.ejb.cmpjavamxj.ejb.cmp 名稱(名稱(M M):): GroupGroup EJB Type EJB Ty

31、pe: 選擇選擇 Container Managed Entity EJBContainer Managed Entity EJB 點(diǎn)擊下一步。點(diǎn)擊下一步。 Schema Name: GroupSchemaSchema Name: GroupSchema Table Name: GroupTable Table Name: GroupTable 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 增加一個(gè)增加一個(gè) name name 欄:欄: Field: name Field: name Field Type: java.lang.String Field Type: java.lang.String Datab

32、ase Column: Database Column: 名稱名稱 SQL Type: varchar SQL Type: varchar 并且使它成為主鍵。并且使它成為主鍵。 同樣,再增加一個(gè)同樣,再增加一個(gè) description description 欄:欄: Field: description Field: description Field Type: java.lang.String Field Type: java.lang.String Database Column: Database Column: 行業(yè)說(shuō)明行業(yè)說(shuō)明 SQL Type: varchar SQL Type

33、: varchar 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系效果如下,最后效果如下,最后點(diǎn)擊完成。點(diǎn)擊完成。8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系2. 2. 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostCreate 方法:方法: 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系3. 3. 在類標(biāo)記中加入以下標(biāo)記:在類標(biāo)記中加入以下標(biāo)記: 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系4. 4. 增加一個(gè)增加一個(gè)Select methodSelect method和和Home methodHome method/ /* * * * Select method Select method* * ejb.

34、select ejb.select* * query = SELECT user.email FROM GroupSchema AS g, query = SELECT user.email FROM GroupSchema AS g, IN (g.users) AS user WHERE = ?1 IN (g.users) AS user WHERE = ?1 * * * */ /p u b l i c a b s t r a c t j a v a . u t i l . C o l l e c t i o n p u b l i c a b s t r a c

35、 t j a v a . u t i l . C o l l e c t i o n ejbSelectUserIDs(String groupName)ejbSelectUserIDs(String groupName) throws javax.ejb.FinderException; throws javax.ejb.FinderException; 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系4. 4. 增加一個(gè)增加一個(gè)Select methodSelect method和和Home methodHome method/ /* * * * Home method Home method* * thro

36、ws FinderException throws FinderException* * ejb.home-method view-type = local ejb.home-method view-type = local* */ /public java.util.ArrayList ejbHomeGetUserIDs(String public java.util.ArrayList ejbHomeGetUserIDs(String groupName)groupName) throws javax.ejb.FinderException throws javax.ejb.FinderE

37、xception r e t u r n ( j a v a . u t i l . A r r a y L i s t ) r e t u r n ( j a v a . u t i l . A r r a y L i s t ) ejbSelectUserIDs(groupName);ejbSelectUserIDs(groupName); 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系5. 5. 將將 GroupBean GroupBean 加入到加入到 cmpEJB cmpEJB 模塊中,然后模塊中,然后 lomboz -Generate EJB Classes lomboz -Generate EJB

38、 Classes 6. 6. 重點(diǎn):建立重點(diǎn):建立 GroupBean GroupBean 與與 UserBean UserBean 的一對(duì)多的雙的一對(duì)多的雙向聯(lián)系:向聯(lián)系: 右擊右擊 GroupBean -J2EE -Add CMR GroupBean -J2EE -Add CMR Relationship :Relationship : 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 切換到切換到 UserInfoBean.javaUserInfoBean.java: 右擊右擊 UserInfoBean -J2EE -UserInfoBean -J2EE - Add CMR Re

39、lationship : Add CMR Relationship :8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 在在 UserInfoBean.java 中生成的代碼(需要手工添加中生成的代碼(需要手工添加jboss.relation):):/* Getter for CMR Relationship* erface-method view-type=local* ejb.relation name = GroupsHaveUserInfos* role-name = UserInfosInGroup* target-multiple = yes* jboss.r

40、elation * fk-column = 組別組別 * related-pk-field = name*/public abstract javamxj.ejb.cmp.GroupLocal getGroup();/* Setter for CMR Relationship* erface-method view-type=local*/public abstract void setGroup(javamxj.ejb.cmp.GroupLocal value); -Ok,再次,再次 Generate EJB Classes 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 在在 UserInfo

41、Bean.java 中生成的代碼(需要手工添加中生成的代碼(需要手工添加jboss.relation):):/* Getter for CMR Relationship* erface-method view-type=local* ejb.relation name = GroupsHaveUserInfos* role-name = UserInfosInGroup* target-multiple = yes* jboss.relation * fk-column = 組別組別 * related-pk-field = name*/public abstract javam

42、xj.ejb.cmp.GroupLocal getGroup();/* Setter for CMR Relationship* erface-method view-type=local*/public abstract void setGroup(javamxj.ejb.cmp.GroupLocal value); -Ok,再次,再次 Generate EJB Classes 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系二、在二、在UserManagementBeanUserManagementBean中添加業(yè)務(wù)方法中添加業(yè)務(wù)方法增加一個(gè)增加一個(gè) GroupLocalHome GroupLo

43、calHome 的變量的變量 groupHomegroupHome,并將它放入并將它放入 ejbCreate ejbCreate 和和 ejbPassivate ejbPassivate 方法中。方法中。1.1. 依次增加以下幾個(gè)業(yè)務(wù)方法。依次增加以下幾個(gè)業(yè)務(wù)方法。 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 3.3.保存,保存,Generate EJB ClassesGenerate EJB Classes,啟動(dòng),啟動(dòng)MySqlMySql, 啟動(dòng)啟動(dòng)JBossJBoss服務(wù)器,服務(wù)器, Deploy Module Deploy Module 。 一切正常,則會(huì)在一切正常,則會(huì)在 cmp_sample cm

44、p_sample 庫(kù)中自動(dòng)建立一個(gè)表:庫(kù)中自動(dòng)建立一個(gè)表:grouptablegrouptable。 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 三、創(chuàng)建客戶端三、創(chuàng)建客戶端1. 1. 右擊右擊 src src 文件夾文件夾 -新建新建 -Lomboz EJB Test Client-Lomboz EJB Test Client Wizard: Wizard: 創(chuàng)建一個(gè)創(chuàng)建一個(gè) CMPClient4.java CMPClient4.java 文件文件 2. 2. 修改生成的修改生成的 CMPClient4.javaCMPClient4.java,調(diào)用,調(diào)用UserManagementBeanUserMana

45、gementBean中的方法。中的方法。8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 3. 3. 運(yùn)行客戶端運(yùn)行客戶端控制臺(tái)輸出:控制臺(tái)輸出: 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系 數(shù)據(jù)庫(kù)中相對(duì)應(yīng)的表的改變:數(shù)據(jù)庫(kù)中相對(duì)應(yīng)的表的改變: 8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系8. 用CMP實(shí)現(xiàn)一對(duì)多關(guān)系9. 用CMP實(shí)現(xiàn)多對(duì)多關(guān)系 public abstract class StudentBean implements EntityBean /成員變量在子類中實(shí)現(xiàn),定義為abstract型 public abstract Collection getCourses(); public abstract void setCours

46、es (Collection courses); public void ejbLoad() /不需要任何代碼 public void ejbStore() /不需要任何代碼9. 用CMP實(shí)現(xiàn)多對(duì)多關(guān)系 public abstract class CourseBean implements EntityBean /成員變量在子類中實(shí)現(xiàn),定義為abstract型 public abstract Collection getStudents(); public abstract void setStudents(Collection students); public void ejbLoad() /不需要任何代碼 public void ejbStore() /不需要任何代碼9. 用CMP實(shí)現(xiàn)多對(duì)多關(guān)系一、設(shè)計(jì)實(shí)體一、設(shè)計(jì)實(shí)體Bean Bean :RoleBeanRoleBean 1. 建立主體部分: 在 CMP_Sample 項(xiàng)目中,右擊“src” -新建 -Lomboz EJB Creation W

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論