容器管理持续化示例 |
RosterApp设置向导
这一部分将指导你如何设定容器管理持续化及关联的entity bean的部署描述。
要开始这一工作,首先运行deploytool并打开j2eetutorial/examples/ears目录下的RosterApp.ear文件。
RosterApp
选择RosterApp以显示应用程序的部署设置。
General标签(RosterApp)
Contents区域将显示RosterApp.ear文件中包含的内容,包括两个EJB JAR文件(team-ejb.jar、roster-ejb.jar)和J2EE应用程序客户端JAR文件(roster-ac.jar)。参见图6-2。
图6-2 RosterApp的General标签
JNDI Names标签(RosterApp)
Application表中列出了RosterApp应用程序中的enterprise bean的JNDI命名。
索引表有两条记录。EJB Ref记录将RosterClient中的代码名(ejb/SimpleRoster)映射为RosterEJB这个session bean的JNDI命名。Resource记录指定了包含在TeamJAR模块中的entity bean所访问的数据库的JNDI命名。
RosterClient
要察看这个客户端,通过单击邻近的图标展开RosterApp节点。然后,选择RosterClient。
JAR File标签(RosterClient)
Contents区域显示了roster-ac.jar文件中包含的文件:两个XML文件(部署描述)以及一个类文件(RosterClient.class)。
EJB Refs标签(RosterClient)
RosterClient访问RosterEJB这个session bean。因为这个访问是通过远程进行的,所以Interfaces列的值是Remote,而Local/Remote Interface列的值是bean的remote接口(roster.Roster)。
RosterJAR
选择RosterJAR。这个JAR文件包含了RosterEJB这个session bean。
General标签(RosterJAR)
Contents区域列出了类文件中的三个软件包。roster软件包包含了RosterEJB所需要的类文件--session bean类、remote接口和home接口。team软件包包含了由RosterEJB这个session bean所访问的entity bean的local接口。util软件包包含了这个应用程序的功能类。
RosterEJB
展开RosterJAR节点并选择RosterEJB。
General标签(RosterEJB)
这个标签显示了RosterEJB是一个可以远程访问的stateful session bean。因为它不允许本地访问,Local Interface区域为空。
EJB Refs标签(RosterEJB)
RosterEJB这个session bean访问三个entity beans:PlayerEJB、TeamEJB和LeagueEJB。因为这个访问是本地的,在Interfaces列中的记录被定义为Local。Home Interface列列出了entity bean的local home接口。Local/Remote Interfaces列显示了entity bean的local接口。
要显示运行部署设置,选择表中的一行。例如,当你选择代码名为ejb/SimpleLeague的一行时,在Enterprise Bean Name区域会显示LeagueEJB。如果一个组件指向一个本地的entity bean,那么你必须在Enterprise Bean Name区域输入所指向的bean的命名。
TeamJAR
选择TeamJAR节点。这个JAR文件包含三个相关的entity bean:LeagueEJB、TeamEJB和PlayerEJB。
General标签(TeamJAR)
Contents区域显示了类文件的两个软件包:team和util。team软件包包含所有三个entity bean的entity bean类、local接口和local home接口。util软件包包含了功能类。
Relationships标签(TeamJAR)
在这个标签下(图6-3)你可以定义两个使用容器管理持续化的entity bean的关联关系。
图6-3 TeamJAR的Relationships标签
Container Managed Relationships标签概括了两个关联关系:TeamEJB-PlayerEJB和LeagueEJB-TeamEJB。在TeamEJB-PlayerEJB关联关系中,TeamEJB被标志为EJB A,而PlayerEJB被标志为EJB B。(这种标志你可以任意决定--你也可以将PlayerEJB标志为EJB A,而将TeamEJB标志为EJB B。)
Edit Relationship对话框(TeamJAR)
要显示Edit Relationship对话框(图6-4),在Relationships标签选择一行并单击Edit。例如,要显示TeamEJB-PlayerEJB关联关系,选择EJB A值为Team的一行并单击Edit。
图6-4 TeamJAR的Edit Relationship对话框
TeamEJB-PlayerEJB关联关系
多重组合框提供了四个选择。对于这个关联关系,需要选择Many To Many,这是因为一个运动队有多个队员,而一个队员可以属于多个运动队。
在Enterprise Bean A中的信息定义了TeamEJB端的关联关系。Referencing Bean B中显示了TeamEJB中的关联字段(players)。这对应于TeamBean.java源代码中关联关系访问方法:
|
Field Type组合框选择为java.util.Collection,它匹配访问方法的players类型。players类型是一个多值对象(Collection),因为在TeamEJB端的关联关系是具有多重性。
TeamEJB-PlayerEJB关联关系是双向的--每一个bean都有一个关联字段指向另一个与之关联的bean。如果这个关联关系是单向的,bean中的其中一个就没有指向另一个bean的关联字段。对于没有关联字段的bean,Field Referencing的值为<none>。
LeagueEJB-TeamEJB关联字段