分享
 
 
 

学习EJB CMP/CMR 的心得体会

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

本人学习EJB也有一年多的时间了,前段时间公司接到一个大的项目才真正的用到,客户使用的Weblogic 7.0,数据库用的是SQL Server 2000,所以我只能正对Weblogic+SQL Server 2000的环境来做说明。

首先,在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

<weblogic-rdbms-bean>

<ejb-name>LocalUser</ejb-name>

<data-source-name>WL-TX-SqlServer-DataSource</data-source-name>

<table-map>

<table-name>localuser</table-name>

<field-map>

<cmp-field>email</cmp-field>

<dbms-column>EMAIL</dbms-column>

</field-map>

<field-map>

<cmp-field>pw</cmp-field>

<dbms-column>PW</dbms-column>

</field-map>

</table-map>

</weblogic-rdbms-bean>

<weblogic-rdbms-bean>

<ejb-name>UserInfo</ejb-name> <data-source-name>WL-TX-SqlServer-DataSource</data-source-name>

<table-map>

<table-name>userinfo</table-name>

<field-map>

<cmp-field>email</cmp-field>

<dbms-column>EMAIL</dbms-column>

</field-map>

<field-map>

<cmp-field>dept</cmp-field>

<dbms-column>DEPT</dbms-column>

</field-map>

<field-map>

<cmp-field>name</cmp-field>

<dbms-column>uname</dbms-column>

</field-map>

</table-map>

</weblogic-rdbms-bean>

<weblogic-rdbms-relation>

<relation-name>userInfo-localUser</relation-name>

<weblogic-relationship-role>

<relationship-role-name>LocalUserRelationshipRole</relationship-role-name>

<relationship-role-map>

<foreign-key-table>localuser</foreign-key-table>

<primary-key-table>userinfo</primary-key-table>

<column-map>

<foreign-key-column>EMAIL</foreign-key-column>

<key-column>EMAIL</key-column>

</column-map>

</relationship-role-map>

</weblogic-relationship-role>

</weblogic-rdbms-relation>

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

<weblogic-rdbms-bean>

<ejb-name>Roletab</ejb-name>

<data-source-name>WL-TX-SqlServer-DataSource</data-source-name>

<table-map>

<table-name>roletab</table-name>

<field-map>

<cmp-field>rolename</cmp-field>

<dbms-column>ROLENAME</dbms-column>

</field-map>

<field-map>

<cmp-field>description</cmp-field>

<dbms-column>DESCRIPTION</dbms-column>

</field-map>

</table-map>

</weblogic-rdbms-bean>

<weblogic-rdbms-relation>

<relation-name>localUser-roletab</relation-name>

<table-name>middletab</table-name>

<weblogic-relationship-role>

<relationship-role-name>LocalUserRelationshipRole</relationship-role-name>

<relationship-role-map>

<foreign-key-table>middletab</foreign-key-table>

<primary-key-table>localuser</primary-key-table>

<column-map>

<foreign-key-column>localuserid</foreign-key-column>

<key-column>EMAIL</key-column>

</column-map>

</relationship-role-map>

</weblogic-relationship-role>

<weblogic-relationship-role>

<relationship-role-name>RoletabRelationshipRole</relationship-role-name>

<relationship-role-map>

<foreign-key-table>middletab</foreign-key-table>

<primary-key-table>roletab</primary-key-table>

<column-map>

<foreign-key-column>roleid</foreign-key-column>

<key-column>ROLENAME</key-column>

</column-map>

</relationship-role-map>

</weblogic-relationship-role>

</weblogic-rdbms-relation>

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

<weblogic-rdbms-bean>

<ejb-name>LocalGroup</ejb-name>

<data-source-name>WL-TX-SqlServer-DataSource</data-source-name>

<table-map>

<table-name>localgroup</table-name>

<field-map>

<cmp-field>name</cmp-field>

<dbms-column>name</dbms-column>

</field-map>

<field-map>

<cmp-field>description</cmp-field>

<dbms-column>description</dbms-column>

</field-map>

</table-map>

</weblogic-rdbms-bean>

<weblogic-rdbms-relation>

<relation-name>localUser-localGroup</relation-name>

<weblogic-relationship-role>

<relationship-role-name>LocalUserRelationshipRole</relationship-role-name>

<relationship-role-map>

<foreign-key-table>localuser</foreign-key-table>

<primary-key-table>localgroup</primary-key-table>

<column-map>

<foreign-key-column>LOCAL_GROUP</foreign-key-column>

<key-column>name</key-column>

</column-map>

</relationship-role-map>

</weblogic-relationship-role>

</weblogic-rdbms-relation>

总结:首先要对EJB CMP/CMR的实现原理充分了解,其次要了解数据库原理中关系是如何定义的,这样对于你实现关系的映射非常有好处,第三,就是要看别人的代码和例子,多看相关的介绍文章,多做例子。

由于本人的知识和水平有限,还请大家不吝指教和批评。

我的联系方式:zceast@hotmail.com(msn)

希望能和大家共同探讨和学习

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有