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

容器管理持续化示例

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

  在Edit Relationship对话框,选择One to Many。这个选择表示一个联盟有多个运动队。

  对于LeagueEJB,关联字段是teams,而对于TeamEJB则是league。因为对于LeagueEJB,有多个与之关联TeamEJB,所以teams字段是一个Collection。相反,对于TeamEJB,只有一个与之关联的LeagueEJB,league字段是一个单值对象,一个LocalLeague。TeamBean.java代码通过这些访问方法定义了关联的联盟:


public abstract LocalLeague getLeague(); 
public abstract void setLeague(LocalLeague players);

  对于TeamEJB(Enterprise Bean B),必须选择Delete When Bean A Is Deleted。因为作了这个选择,当一个LeagueEJB实例被删除时,与之关联的TeamEJB实例也自动删除。这种删除的类型,一个删除触发另一个删除,被称之为cascade delete。对于LeagueEJB,不能作出相应的选择:如果你删除一个运动队,你不想自动删除联盟,因为在一个联盟中可能有多个运动队。一般地说,如果多个同一类型的bean与另一个bean具有关联关系,另一个bean不能自动删除。

  PlayerEJB

  展开TeamJAR节点并选择PlayerEJB entity bean。

  General标签(PlayerEJB)

  这个标签显示了enterprise bean类和接口。因为PlayerEJB这个entity bean使用容器管理持续化,所以它具有local接口。它不具有remote接口,因为它不允许远程访问。

  Entity标签(PlayerEJB)

  在顶端的按钮定义了bean的持续化类型(图6-5)。对于PlayerEJB,这个类型是container-managed persistence, version 2.0。(因为版本1.0不支持关联关系,它不推荐使用。这些版本号确定了Enterprise JavaBeans规范的具体版本,而不是J2EE SDK软件的版本。)

  图 6-5 PlayerEJB的Entity标签

  Fields To Be Persisted列出了由PlayerBean.java代码中的访问方法定义的持续化及关联字段。对于持续化字段检验栏必须选中,而对于关联字段则不必选中。PlayerEJB这个entity bean有一个关联字段:teams。

  抽象模式名为Player,这个命名反映了PlayerEJB这个entity bean中的关联字段及持续化字段。这个抽象命名将在PlayerEJB的Enterprise JavaBeans查询语言(EJB QL)查询中引用。有关EJB QL的更多信息,请参看第八章。

  Finder/Select Methods对话框(PlayerEJB)

  要打开这个对话框,单击Entity标签中的Finder/Select Methods。这个对话框(图6-6)可以显示和编辑一个bean的finder方法和select方法的EJB QL查询。例如,要列出LocalPlayerHome接口中的finder方法,选择Local Finders按钮。当你选中finder方法时,它的EJB QL查询会显示在一个可编辑的文本区域。

  图6-6 PlayerEJB的Finder/Select Methods对话框

  Entity Deployment Settings对话框(PlayerEJB)

  要显示这个对话框,单击Entity标签的Deployment Settings。在这个对话框,你可以定义一个容器管理持续化的entity bean的运行设置。这些运行设置对J2EE SDK有效;对于J2EE平台的其它执行可能要采取不同的方法。

  在J2EE SDK中,bean的持续化字段存储在一个关系型数据库的表中。在Database Table的检验栏中,你必须指定服务器是否自动创建或删除这个表。如果你想要在部署之间将数据存储在表中,你必须确保Delete Table检验栏不被选中。否则,在你每次取消bean的部署时,这个表会被删除。

  J2EE服务器通过SQL调用访问数据库。在一个使用容器管理持续化的entity bean中,你不需要为这些调用作出相应的编码。deploytool会在你单击Generate Default SQL按钮时自动创建SQL调用。例如,要显示一个finder方法的SQL语句,选择Local Finder按钮然后在方法列表中选择一个记录。你可以通过编辑SQL Query区域的文本来编辑SQL语句。

  对于finder方法和select方法,相应的EJB QL查询也会被显示。当你单击Generate Default SQL时,deploytool会将EJB QL查询转换成SQL调用。如果你改变了一个EJB QL查询,你需要再次单击Generate Default SQL按钮。

  例如,要显示SQL CREATE TABLE语句,单击Container Methods然后在方法列表中选择createTable entry。CREATE TABLE语句定义了bean的持续化字段的列名并对应于bean的主键字段指定了playerId主键约束。

  当EJB容器创建一个新的PlayerEJB实例时,它会执行一个SQL INSERT语句。要检查这个语句,从方法列表中选择createRow。在INSERT语句中,values子句中的参数对应于LocalPlayerHome接口中定义的create方法中的参数:


public LocalPlayer create (String id, String name, 
String position, double salary) throws CreateException;

  Database Deployment Settings对话框(PlayerEJB)

  要访问这个对话框,单击Entity标签的Deployment Settings。在显示的Deployment Settings对话框中,单击Database Settings。将会显示带有Database Settings标签的Deployment Settings对话框。

  为数据库设置JNDI命名是非常重要的。(如果没有设置,bean将无法连接数据库。)对于这个示例,数据库JNDI命名为jdbc/Cloudscape。用户名和口令都为空,因为对于Cloudscape不需要这些。

  RosterApp中的方法调用

  为了说明不同的组件是如何协同工作的,这一部分将说明在实现具体的功能时方法调用的次序。在j2eetutorial/examples/src/ejb/cmproster目录下有组件的源代码。

  创建一个队员

  1、RosterClient

  RosterClient调用了RosterEJB这个session bean中的名为createPlayer的商业方法。在下面的代码中,myRoster对象的类型是Roster,这是RosterEJB的remote接口。createPlayer方法的参数是一个PlayerDetails对象,其中保存了一个具体的队员的信息。

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



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

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