容器管理持续化示例
Select方法 一个select方法与一个finder方法具有以下几个共同点: 1、一个select方法查询一个数据库并返回一个对象。 2、部署描述为一个select方法指定了一个EJB QL查询。 3、entity bean类不实现select方法。 但是,一个select方法与finder方法还存在以下不同点: 1、一个select方法可以返回持续化字段或相关entity bean的home接口。而一个finder方法只能返回定义它的home接口(或结果集)。 2、因为一个select方法不存在于任何local或remote接口中,所以它不能被客户端调用。它仅仅只能被entity bean类中实现的方法调用。一个select方法通常是被一个商业方法调用。 3、一个select方法在entity bean类中定义。对于bean管理持续化,一个finder方法被定义在entity bean类中,但是在容器管理持续化不存在这样的方法。 PlayerBean类定义了这些select方法:
一个select方法必须遵守这些规则: 1、方法名的前缀必须为ejbSelect。 2、访问控制修饰必须为public。 3、方法必须申明为abstract。 4、throws子句必须包含javax.ejb.FinderException。 商业方法 因为客户端不能调用select方法,PlayerBean类将其包装在getLeagues和getSports商业方法中:
Entity Bean方法 因为容器会处理持续化,所以在PlayerBean类中几乎没有生命周期方法。 ejbCreate方法通过将输入参数赋予持续化字段以对bean的实例进行初始化。在ejbCreate方法完成后,容器会向数据库中插入一行。下面是ejbCreate方法的源代码:
除了一个调试语句以外,PlayerBean类的ejbRemove方法没有其它内容。在删除数据库行之前,容器会调用正确的ejbRemove方法。 ejbPostCreate方法必须与ejbCreate方法具有相同的输入参数和返回类型。如果你想要设置一个关联字段以初始化bean的实例,你应该在ejbPostCreate方法中完成这些工作。你不可以在ejbCreate方法中设置一个关联字段。 容器自动执行entity bean状态和数据库的同步。在容器从数据库中导入bean的状态后,它会调用ejbLoad方法。同样地,在将状态存储到数据库之前,容器会调用ejbStore方法。 Local Home接口 local home接口定义了可以由本地客户端调用和create方法、finder方法和home方法。 一个create方法的语法规则如下: 1、命名以create开始。 2、它和entity bean类中匹配的ejbCreate方法有相同的数目和类型的参数。 3、它返回entity bean的local接口。 4、throws子句包含相应的ejbCreate方法中的throws子句中指定的例外。 5、throws子句包含javax.ejb.CreateException。 这些规则适用于一个finder方法: 1、命名以find开始。 2、返回类型是entity bean的local接口类型或是这些类型的结果集。 3、throws子句包含javax.ejb.FinderException。 4、必须定义findByPrimaryKey方法。 下面是LocalPlayerHome接口的片断。
Local接口 这个接口定义了一个本地客户端可以调用的商业方法和访问方法。PlayerBean类实现了两个商业方法:getLeagues和getSports。它还定义了几个针对持续和关联字段的get和set访问方法。set方法对于bean的客户端是不可见的,因为它们没有定义在LocalPlayer接口中。但是,get方法是客户端可以通过接口访问的:
|