Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

容器管理持续化示例

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  原著:Dale Green

  译者前言

  有关本章中相应源代码的下载,请参看一个Session Bean的示例。

  正文

  使用一个容器管理持续化的entity bean可以为开发者提供很多方便。首先,EJB容器会处理所有的数据库的存储和检索。其次,容器会管理entity bean之间的关联关系。因为这些优势的存在,你不需要在entity bean中编写数据库访问调用。你只需要在bean的部署描述中进行设置。这样做的目的不仅仅是节约你的时间,它也使得bean可以很方便地适用于不同的数据库服务。

  在这一章,我们主要讨论一个名为RosterApp的示例的源代码和部署设置,这个示例具有容器管理持续化的entity bean的基本特征。如果你对这一章的术语和概念还不熟悉,请参考容器管理持续化。

  RosterApp应用程序概述

  RosterApp应用程序维护了体育联盟中各运动队的队员花名册。这个应用程序有五个组件。RosterAppClient组件是一个J2EE应用程序客户端,它通过RosterEJB这个session bean的remote接口对其进行访问。RosterEJB访问三个entity bean--PlayerEJB、TeamEJB和LeagueEJB--这个访问是通过三个entity bean的local接口实行的。

  entity bean使用容器管理持续化和关联关系。在TeamEJB和PlayerEJB这两个entity bean之间存在一个双向的,多对多的关系。在一个双向的关系中,每个bean都有一个值为它所关联的bean的实例的序别号的关联字段。TeamEJB-PlayerEJB关系是一个多对多的关系:队员可以参与多个属于不同队伍的运动队,而每个运动队都有多名队员。LeagueEJB与TeamEJB这两个entity bean之间也存在一个相向的关系,但是这是一个一对多的关系:一个联盟有很多运动队,但是一个运动队只能属于一个联盟。

  图6-1说明了RosterApp应用程序中的组件及其关联关系。虚线表示通过调用JNDI lookup方法获得的访问。实线表示容器管理的关联关系。

  图6-1 RosterApp J2EE应用程序

  PlayerEJB代码

  PlayerEJB这个entity bean描述了体育联盟中的一个队中的一个队员。和其它使用容器管理持续化的entity bean一样,PlayerEJB需要以下代码:

  1、Entity bean类(PlayerBean)

  2、Local home接口(LocalPlayerHome)

  3、Local接口(LocalPlayer)

  在j2eetutorial/examples/src/ejb/cmproster目录下有这个示例的源代码。要编译这个代码,到j2eetutorial/examples目录下,输ant cmproster。在j2eetutorial/examples/ears下有RosterApp.ear文件的示例。

  Entity Bean类

  在容器管理持续化的情况下,entity bean类的代码必须满足以下条件。首先,类必须定义为public和abstract。此外,这个类还必须实现以下内容:

  1、EntityBean接口

  2、零个或多个ejbCreate方法及ejbPostCreate方法

  3、对应于持续化及关联字段的定义为abstract的get方法及set方法

  4、所有的select方法都必须定义为abstract

  5、home方法

  6、business方法

  entity bean类不能实现以下方法:

  1、finder方法

  2、finalize方法

  容器管理持续化代码和Bean管理持续化代码的差别

  因为不包含对数据库访问的调用,一个使用容器管理持续化的entity bean的代码要比相同功能的bean管理持续化的短得多。例如,在这一章中讨论的PlayerBean.java的源文件就要比我们在第五章中讨论的SavingsAccountBean.java要短得多。表6-1对这两个类型的entity bean的代码作了比较。

  表6-1 两种持续化的代码差异

  差异:容器管理:Bean管理

  类定义:Abstract:非abstract

  数据库访问调用:由工具生成:由开发者编写

  持续化状态:由虚拟的持续化字段表现:作为一个实例变量编写

  持续化及关联字段的访问方法:需要:不需要

  findByPrimaryKey方法:由容器处理:由开发者编写

  自定义finder方法:由容器处理,但是开发者必须定义EJB QL查询:由开发者编写

  Select方法:由容器处理:没有

  ejbCreate的返回值:可以为null:必须是主键

  在这两个类型的持续化中,实现商业方法和home方法的规则是一样的。参见第五章中的商业方法和Home方法。

  访问方法

  一个使用容器管理持续化的entity bean具有持续化字段和关联字段。这些字段是虚拟的,因此你不需要在类中将其作为实例变量编写。你只需要在bean的部署文档中指定它们。要对这些字段进行访问,你需要在entity bean类中定义抽象的get方法和set方法。

  持续化字段的访问方法

  EJB容器自动执行bean的持续化字段的数据库存储和读取。PlayerEJB的部署描述指定了以下持续化字段:

  1、playerId(主键)

  2、name

  3、position

  4、salary

  PlayerBean类定义了对如下的对持续化字段的访问方法:


public abstract String getPlayerId(); 
public abstract void setPlayerId(String id); 
public abstract String getName(); 
public abstract void setName(String name); 
public abstract String getPosition(); 
public abstract void setPosition(String position); 
public abstract double getSalary(); 
public abstract void setSalary(double salary);

  一个访问方法的命名以get或set开始,后面是首字母大写的持续化及关联字段。例如,对salary字段的访问方法是getSalary和setSalary。这个命名习惯是和JavaBeans组件类似的。

  对关联字段的访问方法

  在RosterApp应用程序中,因为一个队员可以属于多个运动队,因此一个PlayerEJB实例可能与多个TeamEJB实例关联。为了指定这个关联关系,PlayerEJB的部署描述定义了一个名为teams的关联字段。在PlayerBean类中,teams关联字段的访问方法如下:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:在GoF模式以外(1)   下一篇:Bean管理持续化实例

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号