container-managed persistence examples一个container-managed的实体bean带给开发人员很多好处。
首先,ejb容器管理所有数据库的存储与同步指令;其次容器管理实体bean之间的关系。
由于这些服务的存在,你不用去编写数据库逻辑,你所要做的只是在配置描述里面描述这些信息,
这样不仅可以节约时间而且使得bean可以在多种数据库服务器使用。
这章我们的实例是一个container-managed的实体bean。这个应用的名字叫rosterapp。
rosterapp总揽:
这个rosterapp应用程序维持在一些体育运动联盟的球员的名单以及球队的名单。这个应用程序有5个组件。rosterappclient组件是一个客户端组件,
他通过rosterejb会话bean的romote接口访问rosterejb。
rosterejb访问3个实体bean-playerejb, teamejb, and leagueejb,这些访问是通过3个实体bean的local接口。
这些实体bean采用cmp方式,teamejb和playerejb的关系是多对多的双向的,
leagueejb和teamejb的关系也是双向的,但是是一对多的关系。
编写playerejb
这个实体bean代表一个存储在数据库的球员,像所有的cmp实体bean,playejb需要如下的代码:
1 entity bean class (playerbean)
2 local home interface (localplayerhome)
3 local interface (localplayer)
entity bean class
为了实现cmp,这个实体bean的类必须是public和abstract的。同时也必须实现以下的条件:
1 entitybean interface
2 0个或者多个ejbcreate和ejbpostcreate方法
3 get和set抽象方法。
4 一些抽象的select方法
5 home方法
6 商业方法
这个bean不能实现的方法:
1 finder方法
2 finalize方法
access方法
一个cmp实体bean有persistent和relationship,这些是虚拟的,所以你不用把他们定义为实例变量。
你所作的只是在配置时描述他。但是你需要定义get和set方法。容器自动管理数据库的存储和同步,
配置中这些persistent需要被容器维持:
1 playerid (primary key)
2 name
3 position
4 salary
我们需要这些方法访问这些:
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开头,后面跟着persistent的名字。
这和jeanbean是一样的。
同时我们需要access方法访问relationship在这个应用程序中,因为一个球员可以在多个球队效力,
所以一个playerejb对象可以和很多teamejb相关。我们定义这个relationship名字为teams,
接下来我们需要定义这些access方法。
public abstract collection getteams();
public abstract void setteams(collection teams);
select方法
一个select方法和一个finder方法类似:
1 一个select可以放回一个local或者remote接口(或者一个集合)
2 一个select需要一个query连接数据库
3 需要自己在配置中定义一个ejb ql
4 bean类不需要实现这个方法
但是2者也有不同的地方:
1 一个select方法可以返回相关联的bean一个persistent(或者集合),一个finder只能返回local或者remote接口。
2 由于select方法不在local或者remote接口,一个select方法不能直接被客户调用,只能被这个bean的内部方法调用。
通常被一个商业方法调用。这个程序中定义了如下的select方法:
public abstract collection ejbselectleagues(localplayer player)
throws finderexception;
public abstract collection ejbselectsports(localplayer player)
throws finderexception;
select方法名必须满足:
1 前缀必须是ejbselect
2 access控制访问是public的
3 abstract
4 抛出的exception必须包含javax.ejb.finderexception
商业方法由于select方法不能被客户直接调通,所以将他们包含在商业方法中:
public collection getleagues() throws finderexception {
localplayer player = (team.localplayer)context.getejblocalobject();
return ejbselectleagues(player);
}
public collection getsports() throws finderexception {
localplayer player = (team.localplayer)context.getejblocalobject();
return ejbselectsports(player);
}
实体bean方法
由于是cmp,所以bean的生命周期方法基本不用实现
ejbcreate方法:
public string ejbcreate (string id, string name, string position, double salary) throws createexception {
setplayerid(id);
setname(name);
setposition(position);
setsalary(salary);
return null;
}
译者注:注意return null除非debug的需要,ejbremove方法一般都是空的。当容器调用这个方法后,容器删除数据库中的纪录。
ejbpostcreate方法和ejbcreate方法的参数和返回类型一样,如果你想建立一个关系,你应该把代码写在ejbpostcreate方法中。
容器会自动管理同步,存储等数据库操作,这些通过ejbload和ejbstore方法完成。
local home interface:
这里定义了creat,finder和其他一些home方法。
package team;
import java.util.*;
import javax.ejb.*;
public interface localplayerhome extends ejblocalhome {
public localplayer create (string id, string name, string position, double salary)
throws createexception;
public localplayer findbyprimarykey (string id)
throws finderexception;
public collection findbyposition(string position)
throws finderexception;
...
public collection findbyleague(localleague league)
throws finderexception;
...
}
loca interface:
这里定义了一些商业方法,这些方法有bean实现,同时也定义了get和set方法,set方法不应该被暴露出来。
package team;
import java.util.*;
import javax.ejb.*;
public interface localplayer extends ejblocalobject {
public string getplayerid();
public string getname();
public string getposition();
public double getsalary();
public collection getteams();
public collection getleagues() throws finderexception;
public collection getsports() throws finderexception;
}
出处 cn-java翻译: somy
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器