您好,登錄后才能下訂單哦!
本人學習EJB也有一年多的時間了,前段時間公司接到一個大的項目才真正的用到,客戶使用的webLOGIC 7.0,數據庫用的是sql SERVER 2000,所以我只能正對Weblogic+SQL SERVER 2000的環境來做說明。XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
首先,在Weglogic中配置數據源,在Weblogic中有Sql Server 2000的JdbC,所以就可以直接使用,注意,在EJB中一定要使用Tx-Datasource,另外,還要對Sql Server 2000數據庫打一個JTA的補丁,這樣才能更好的支持分布式事務的處理。
下面,我就對我們系統中的一個認證子系統做一個簡單的介紹,(參考:http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/Java-onlinecourse-bytitle/991A4E2DCA2D6CE148256BCE00135FAE?OpenDocument)我基本上是根據這個例子來做的。
在本子系統中,LocalUserBean(實體)用來驗證用戶身份,UserInfoBean(實體)用戶詳細信息,UserGroupBean(實體)用戶分組,LocalRoleBean(實體)用戶角色,UserManageBean(會話)該子系統的唯一遠程接口。
關系:LocalUserBean ----- UserInfoBean 是 one2one的單相關系,UserGroupBean----LocalUserBean是one2many的雙相關系,LocalUserBean----LocalRoleBean是many2many的雙相關系。
LocalUserBean----UserInfoBean:一對一的關系比較簡單
LocalUserBean的字段 (CMP)
public abstract void setEMail(java.lang.String email);
public abstract void setPw(java.lang.String pw);
public abstract java.lang.String getEmail();
public abstract java.lang.String getPw();
與UserInfo建立關系 (CMR)
public abstract void setUserInfo(usermanagesample.UserInfo userInfo);
public abstractUserInfo getUserInfo();
UserInfoBean的字段 (CMP)
public abstract void setEmail(java.lang.String email);
public abstract void setDept(java.lang.String dept);
public abstract void setName(java.lang.String Name);
……
public abstract java.lang.String getEmail();
public abstract java.lang.String getDept();
public abstract java.lang.String getName();
……
由于關系是單的,所以UserInfoBean沒有CMR字段。
Weblogic-cmp-rdbms-jar.xml
LocalUserBean中的方法:
ejbCreate(String email,String pw,UserInfoValueobject user){
setEmail(email);
setPw(pw)
}
ejbPostCreate(String email,String pw,UserInfoValueObject user){
Context ctx=new InitialContext();
LocalRoleHome home=(LocalRoleHome)ctx.lookup(“LocalRole”);
home.create(user.getEmail,…………);
}
通過ejbPostCreate的方法,調用LocalRoleBean的本地接口,同時創建用戶信息,UserInfoValueObject為自己定義的一個用戶信息類,記住,這個類一定要實現java.io. Serializable,因為EJB中要求對象都可以序列化。
UserManage中的方法
添家用戶。添加LocalUser的同時,也添加了UserInfo
public void addUser(String email, String pw, UserInfoValueObject user) {
try{
LocalUser user=userHome.create(email, pw,user);
}catch(CreateException ce){
throw new EJBException("創建用戶"+email+"錯誤!",ce);
}
}
刪除用戶。刪除LocalUser的同時,也刪除了UserInfo
public void removeUser(String email){
try{
userHome.remove(email);
}catch(CreateException ce){
throw new EJBException("刪除用戶"+email+"錯誤!",ce);
}
}
校驗用戶密碼
public boolean verifyUser(String email, String pw) {
try{
LocalUser user = userHome.findByPrimaryKey(email);
return user.getPw().equals(pw);
}catch(FinderException fe){
throw new EJBException("校驗用戶"+email+"錯誤!",fe);
}
}
LocalUser----LocalRole的關系為many2many的雙相關系。
在開始編寫EJB CMP的時候,由于我對many2many的關系映射總是失敗,所以在項目當中我都避免出現many2many的關系,后來發現EJB中的關系其實就是實現了數據庫中的關系,所以對數據庫的基礎要了解的話,實現起來也不復雜。
LocalRoleBean: (CMP)
public abstract void setRolename(java.lang.String rolename);
public abstract void setDescription(java.lang.String description);
public abstract java.lang.String getRolename();
public abstract java.lang.String getDescription();
(CMR)
public abstract java.util.Collection getLocalUser();
public abstract void setLocalUser(java.util.Collection localUser);
在LocalUserBean中加,因為是many2many的關系,所以是Collection接口;
public abstract void setRoletab(java.util.Collection roletab);
public abstract java.util.Collection getRoletab();
Weblogic-cmp-rdbms-jar.xml
UserManage中實現的方法(略);
UserGroup----LocalUser是one2many的雙相關系;
(CMP)
public abstract void setName(java.lang.String name);
public abstract void setDescription(java.lang.String description);
public abstract java.lang.String getName();
public abstract java.lang.String getDescription();
(CMR)
public abstract java.util.Collection getLocalUser();
public abstract void setLocalUser(java.util.Collection localUser);
Weblogic-cmp-rdbms-jar.xml
總結:首先要對EJB CMP/CMR的實現原理充分了解,其次要了解數據庫原理中關系是如何定義的,這樣對于你實現關系的映射非常有好處,第三,就是要看別人的代碼和例子,多看相關的介紹文章,多做例子。
由于本人的知識和水平有限,還請大家不吝指教和批評。
我的聯系方式:hotmail.com">zceast@hotmail.com(msn)
希望能和大家共同探討和學習
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。