|
|
翻译:Smiling_Sundoc:王锦全 前两章讲述了将持久性管理工作代理给EJB容器的实体Bean(CMP Bean——译注)。本章将讨论如何创建包含所有自己管理持久性的代码的实体Bean以及如何与之交互,这就是bean管理持久性(bean-managed persistent ,BMP)的Bean。CMP 实体beans 和 BMP 实体beans的开发有许多相似之处;本章则主要关注于其不同之处。 Sun Java System Studio IDE提供向导便于你创建BMP实体Bean所有需要的类:一个bean类、远程(remote)或本地(local)接口或二者兼有、以及可能的一个主键类(primary-key class)。为便于你开始,EJB构建器(EJB Builder)向导会自动执行创建一个BMP实体bean基本结构的任务。 在编写整个实体bean时,你还拥有许多其他未在本章中说明的选项。虽然Sun ONE Studio IDE被设计用来帮你做许多编码工作,但该IDE还灵活地支持那些选项并把决定权留给你。要获得更多信息,参见列在开始之前的相关资源,或者可以参考编写企业bean方面的众多优秀教材中的一本。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public customer findByPrimaryKey(String aKey)
throws RemoteException, FinderException;
|
因为这是一个BMP实体bean,向导会给该bean类添加该方法的对应部分ejbFindByPrimaryKey:
public String ejbFindByPrimaryKey(String aKey) {
return aKey;
}
|
该向导会给你的BMP实体bean添加缺省的生命期方法,如代码示例6-1所示。
|
代码示例 6-1 一个BMP实体Bean的缺省生命期方法 |
public void setEntityContext(javax.ejb.EntityContext aContext) {
context=aContext;
}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbRemove() {
}
public void unsetEntityContext() {
context=null;
}
public void ejbLoad() {
}
public void ejbStore() {
}
|
表6-1说明了一个BMP实体bean中这些方法的目的(作为比较,参看一个CMP实体bean类缺省生命期方法的目的)
|
表6-1 一个 BMP 实体bean类缺省生命期方法的目的 |
|
|
方法 |
目的 |
|
setEntityContext |
这一方法让你在一个域(field)中保存EntityContext的引用并构造非持久性域。你可以利用它来分配独立于该EJB对象并在整个该实体bean生命期中都会保持的资源,比如一个数据库连接工厂。缺省地,EJB构建器向导会生成代码来把EntityContext赋给一个叫做context的域。 |
|
ejbActivate |
这一方法初始化该bean、为使用它作准备并获得该实例需要的资源。 |
|
ejbPassivate |
在该bean实例返回到通用实例池(generic instance pool)中前,该方法释放该bean用到的资源。 |
|
ejbRemove |
在一个BMP中,该方法执行SQL Delete语句并从后台的数据存储中删除数据。或者,你可以调用其他对象如一个DAO来删除数据。 |
|
unsetEntityContext |
这一方法让你在容器销毁该实体bean实例前重置资源并释放该实例用到的内存。 |
|
ejbLoad |
在一个BMP中, 该方法执行SQL Select语句并从后台的数据源中加载数据到该bean实例中。这在该bean被激活或者当该实体在一个新的交易上下文中被引用时发生。或者,你可以调用另一个对象如一个数据访问对象(DAO)来加载数据。 |
|
ejbStore |
在一个BMP中,这一方法执行SQL Update语句并把bean的状态(持久域中的当前值)保存到后台的数据存储中。这是在该bean 钝化(passivated)时或交易提交时发生的。或者你可以调用另一个对象如一个DAO来保存数据。 |
要完成你的BMP实体bean,执行以下步骤:
附录A 探讨了修改你的企业bean的最佳方式,以及当你采用其他方式时可能会遇到的错误和异常。作为一条总的原则,你应该通过逻辑结点而不是单独的类结点来工作,利用bean的属性页(property sheets)或定制对话框(Customizer dialog box)来编辑方法,以及使用IDE的源码编辑器(Source Editor)来完成或编辑所有通过这些对话框访问不到的bean代码。
要使你的BMP实体bean能与实体数据存储交互,你必须编写代码来访问这些数据,操作持久性域,并在你的bean实例变量和数据存储间传输数据。利用源码编辑器编写你的代码。利用资源引用(resource references)(如第8章讨论的那样)来指明你的bean将要用到的数据源。
如果存在下述情况,利用源码编辑器添加一个主键类。
请确保你的主键类满足下列要求:
更多信息请参见添加或替换一个主键类中的讨论。
要开始定义一个新方法,打开对象管理器,右键单击逻辑bean结点使用从上下文关联菜单中可以获得的GUI工具。利用其对话框来命名一个方法并定义它的签名。该IDE会自动把你的方法分派给正确的类。然后利用源码编辑器完成对你的方法的编码。
你的BMP实体bean的home接口可能有一个创建方法,而如果确实有的话,其bean类就必须有相应的 ejbCreate 和 ejbPostCreate方法。如果你采用上述推荐的过程,该IDE就会保证生成这些方法并将其正确的分派下去。
一个BMP实体bean中的ejbCreate方法典型地做如下工作:
1.检查客户端提供参数的有效性
2.初始化其实例变量
3.执行SQL Insert语句(或者你可以调用其他类如一个DAO来给后台数据存储插入数据)
4.返回一个主键
在一个BMP实体bean中,你必须提供生成和执行必须的SQL Insert语句的代码。
IDE自动添加的ejbPostCreate方法为程序员提供了一个把关于其EJB对象(如home或远程接口)的信息传给其他需要引用它的企业bean的机会。该方法可以通过EntityContext访问其远程接口,而EntityContext是它从容器那里获得的一个参数。这一方法通常是用来创建一个独立的bean。例如,Order bean的ejbCreateLineItem方法可以在ejbPostCreate方法中创建给定的line items。
你的实体bean可以有多个创建方法。按如下步骤定义一个新的创建方法:
1.选择逻辑结点,单击右键并选择“Add Create Method”。
“Add New Create Method”对话框显示出来。
2. 通过在“create”后面加任意扩展来命名你的创建方法。
现在你需要为你的方法加入参数。
3.在对话框中单击“Add”。
4. 在“Enter Method Parameter”对话框中指明其参数名称和类型。
不论在一个BMP实体bean类中的方法签名还是该方法体中都返回其主键类型。
5.单击“OK” 关闭“ Enter Method Parameter”对话框。
6. 在“Add New Create Method”对话框中指明任何其他的异常。
7. 单击“OK”关闭“Add New Create Method”对话框。
你添加的方法现在在该bean类的代码里显示为ejbCreate而在home接口中显示为create。ejbPostCreate也显示在bean类里了。
8..利用源码编辑器给你的新创建方法添加返回语句和其他需要的代码。
EJB构建器已经为你生成了一个缺省的查找方法。在一个BMP实体bean中,该方法显示在home接口(findByPrimaryKey)和bean类(ejbFindByPrimaryKey)中。但是,如果你想让你的实体bean执行其他的查询,你必须定义其他的查找方法。
如果按照下述步骤,你的新查找方法会自动分派给你的home接口和bean类:
1.选择逻辑结点,单击右键并选择“Add Finder Method”。
2. 键入一个以find开始的方法名并指明参数、异常、以及返回值类型。完成后单击“OK”。
用源码编辑器完成你一个或多个查找方法的编码。要从数据源中获得主键,你必须编写JDBC代码或使用其他数据库访问方式。
要添加一个业务方法给你的BMP实体bean,执行以下步骤:
在逻辑结点下面选择“Business Methods”,单击右键并选择“Add Business Method”。
“Add New Business Method”对话框显示出来。这时候你可以在该对话框中完成编写方法参数和异常的工作,或者你可以简单地为你的business方法键入一个名字并单击“OK”,然后用源码编辑器来完成代码。
一个业务方法通常会访问并修改持久性域的值,但它不会直接访问数据库。EJB容器会根据交易语义的需要来调用ejbLoad和ejbStore方法。
或者你可以添加一个home方法来执行一个独立于该实体bean的任何实例的操作。请参看关于home方法的讨论。
除需要其他几步工作为该bean用于其最终环境作准备外,你的BMP实体bean现在已经完成了。最后这几步在第8章会讨论。
附录A提供了使用已完成的企业bean的建议。
企业bean可以是你的应用系统中一个非常强大和灵活的部分。创建一个企业bean的基本部分可以很简单,尤其通过利用像Sun Java System Studio IDE这样的工具。但是,完成能满足你应用需求的bean的工作可能会非常复杂。要获得详细信息,请参见企业级JavaBean规范,版本2.0,其位于:
http://java.sun.com/products/ejb/docs.html
|
创建EJB组件 |
816-7864-10 |
|
|||||||||||
|
|||||||||||
|
|||||||||||
|
|||||||||||