學習EJB CMP/CMR 的心得體會 (轉)

worldblog發表於2008-01-29
學習EJB CMP/CMR 的心得體會 (轉)[@more@]

  本人學習也有一年多的時間了,前段時間公司接到一個大的專案才真正的用到,客戶使用的LOGIC 7.0,用的是 SERVER 2000,所以我只能正對Weblogic+ 2000的環境來做說明。:namespace prefix = o ns = "urn:schemas--com::office" />

  首先,在Weglogic中資料來源,在Weblogic中有Sql Server 2000的JC,所以就可以直接使用,注意,在EJB中一定要使用Tx-Data,另外,還要對Sql Server 2000資料庫打一個J他的,這樣才能更好的支援分散式事務的處理。

  下面,我就對我們中的一個子系統做一個簡單的介紹,(參考:http://www-900.ibm.com/developerWorks/cn/cnedu.n/-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 setE(java.lang.String );

  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--jar.xml

 

  LocalUser

  WL-TX-SqlServer-DataSource

 

  localuser

 

  email

  EMAIL

 

 

  pw

  PW

 

 

 

UserInfo  WL-TX-SqlServer-DataSource

 

  userinfo

 

  email

  EMAIL

 

 

  dept

  DEPT

 

 

  name

  uname

 

 

 

 

 

  userInfo-localUser

 

  LocalUserRelationshipRole

 

  localuser

  userinfo

 

  EMAIL

  EMAIL

   

 

 

 

LocalUserBean中的方法:

ejbCreate(String email,String pw,UserInfoValue 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

 

  Roletab

  WL-TX-SqlServer-DataSource

 

  roletab

 

  rolename

  ROLENAME

 

 

  description

  DESCRIPTION

 

 

 

 

  localUser-roletab

  middletab

 

  LocalUserRelationshipRole

 

  middletab

  localuser

 

  localuserid

   EMAIL

 

 

 

 

  RoletabRelationshipRole

 

  middletab

  roletab

 

  roleid

  ROLENAME

 

 

 

 

 

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

 

  LocalGroup

  WL-TX-SqlServer-DataSource

 

  localgroup

 

  name

  name

 

 

  description

  description

 

 

 

 

  localUser-localGroup

 

  LocalUserRelationshipRole

 

  localuser

  localgroup

 

  LOCAL_GROUP

  name

 

 

 

 

 

總結:首先要對EJB CMP/CMR的實現原理充分了解,其次要了解資料庫原理中關係是如何定義的,這樣對於你實現關係的對映非常有好處,第三,就是要看別人的程式碼和例子,多看相關的介紹文章,多做例子。

由於本人的知識和水平有限,還請大家不吝指教和批評。

我的聯絡方式:.com">zceast@hotmail.com()

希望能和大家共同探討和學習


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章