CMP (Entity Bean)
(史帝芬, idealist@gcn.net.tw, 2003/04/10)
entity bean顧名思義就是用來代表資料庫中的資料記錄,使用entity bean而不直接存取資料庫系統的好處在於
使用entity bean可以將資料物件化,使得程式員不用直接下SQL而是透過method來存取資料庫,如此可以簡
化程式設計的複雜度,同時也提升程式碼重複使用的機會。
entity bean根據管理永續保存的方式的不同,可以分為CMP(container-mamaged persisttence)及
BMP(bean-managed persisttence)兩類。CMP將永續保存的管理交給container,因此程式設計較為簡單,
一般的應用也多使用CMP; BMP由程式員自行處理相關工作,僅在特殊場合下使用。這裡我將只先講解
CMP,BMP留待下個單元再講解。
在本單元中我將實作一個entity bean,以存取資料庫中的資料,步驟如下:
1. 新建資料庫
2. 新建一個J2EE企業應用程式專案
3. 新建一個伺服器及伺服器配置
4. 在Server1設定資料庫
5. 新建一個套件
6. 新建一個entity bean
7. 修改ejbCreate method
8. 修改EJB部署描述子
9. EJB到RDB對映
10. 產生部署和RMIC程式碼
11. 使用Universal Test Client測試
12. 新建JSP測試網頁
13. 修改Web部署描述子
14. 撰寫測試網頁
15. 測試
1. 新建資料庫
在DB2中新建一個資料庫叫Steven,再於Steven中新增一個Table叫User,User的欄位如下:
| Key | Field | Type | NULL |
| * | NAME | VARCHAR(20) | No |
| | PASSWORD | VARCHAR(20) | No |
| | EMAIL | VARCHAR(50) | No |
| | HOMEPAGE | VARCHAR(100) | Yes |
2. 新建一個J2EE企業應用程式專案
開啟WSAD,如圖2新建一個命名為myLib的J2EE 1.3企業應用程式專案。

圖1 新建J2EE 1.3企業應用程式專案
3. 新建一個伺服器及伺服器配置
如圖3-1,新建一個命名為Server1的伺服器及伺服器配置,以供測試程式之用。然後在伺服器配置Server1上按滑
鼠右鍵,選擇新增myLib,可得到如圖3-2。

圖3-1 新建伺服器及伺服器配置

圖3-2 將myLib加入Server1
4. 在Server1設定資料庫
a. 在伺服器配置的Server1上double click,可以開啟Server1的配置檔。
b. 選擇"安全"頁面,設定JAAS。在JAAS鑑別項目中按新增,如圖4-1,鍵入登入ID和密碼。
c. 選擇"資料來源"頁面,選擇"Default DB2 JDBC Provider",然後按第二欄的新增,如圖4-2,加入
"名稱"、"JNDI名稱"及"儲存器管理的鑑別別名",按下一步後,修改databaseName為STEVEN,圖4-3。
d. 在第三欄按新增,新增一個serverName,如圖4-4。(如果資料庫和Websphere在同一台電腦,這個步驟可省略)

圖4-1 新增JAAS鑑別項目

圖4-2 新增資料來源

圖4-3 修改databaseName

圖4-4 新增serverName
5. 新建一個套件
如圖5新建一個命名為tw.idv.idealist的套件。

圖5 新建一個套件
6. 新建一個entity bean
a. 在J2EE階層,於myLibEJB上按滑鼠右鍵,新增一個Enterprise Bean。
b. 如圖6-1新增一個命名為User的CMP 2.0 bean。
c. 如圖6-2,將"本端用戶端檢視畫面"和"遠端用戶端檢視畫面"都打勾,並且加入name、password、email、homepage四個屬性。

圖6-1 新增一個命名為User的CMP 2.0 bean

圖6-2 加入四個屬性
7. 修改ejbCreate method
在UserBean.java中找到ejbCreate method,為不可為Null的欄位設定初始值。

圖7 ejbCreate method
8. 修改EJB部署描述子
在Bean頁面,加入CMP Container Factory JNDI名稱為jdbc/mylib並選擇儲存器權限類型為Per_Connection_Factory(圖8),
如此,User Bean才能存取到資料庫。

圖8 EJB部署描述子的Bean頁面
9. EJB到RDB對映
a. 在J2EE階層頁面,於myLibEJB上按滑鼠右鍵,選擇"產生/EJB到RDB對映"。
b. 如圖9-1,打入資料庫名稱,使用者名稱、密碼,JDBC驅動程式選擇IBM.DB2.NET.DRIVER,主電
腦打入DB2所在電腦名稱或IP,如果DB2在本機,則JDBC驅動程式選擇IBM.DB2.APP.DRIVER。
c. 在圖9-2,我們要為Entity Bean和表格建立關聯,方法是用滑鼠從Entity Bean拖曳相關欄位到表格,如此可得到圖9-3的結果。

圖9-1 EJB到RDB對映

圖9-2 Entity Bean和表格建立關聯前

圖9-3 Entity Bean和表格建立關聯後
10. 產生部署和RMIC程式碼
在J2EE階層頁面,於myLibEJB上按滑鼠右鍵,選擇"產生/部署和RMIC程式碼"。
11. 使用Universal Test Client測試
在myLibEJB上按滑鼠右鍵,選擇"在伺服器中執行",如此就可啟動UTC。
12. 新建JSP測試網頁
新建兩個JSP測試網頁,分別命名為AddUser.jsp及FindUser.jsp。
13. 修改Web部署描述子
a. 在總覽頁面,於Web程式庫專案加入myLibEJB.jar。
b. 在Servlet頁面,新增AddUser.jsp及FindUser.jsp。
c. 在參照頁面,新增遠端和本端參照,分別命名為ejb/tw/idv/idealist/UserHomeRemote及ejb/tw/idv/idealist/UserHomeLocal,
新增這兩個參照後,網頁就可以透過這兩個參照存取到User Bean。
14. 撰寫測試網頁
在AddUser.jsp加入如圖14-1的程式碼,在FindUser.jsp加入如圖14-2的程式碼。

圖14-1 AddUser.jsp
圖14-2 FindUser.jsp
15. 測試
先在AddUser.jsp上按"在伺服器中執行",如此資料庫中就會加入一個user1的資料,
然後在FindUser.jsp上按"在伺服器中執行,可以取得剛剛加入的資料。