本人学习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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。