状态会话Bean发一封邮件确认网络订单。 .Bean需要从数据库获取一些客户端经常访问的只读数据。你可以用这样的Bean来访 问数据表中代表这个月已经卖出的产品的行 3,Entity Bean 一个EntityBean描述一个持久存储备的商业对象。商业对象的例子如:消费者,订单和产 品等。在J2ESDR中持久存储设备是一个关系型数据库。最典型的情况是 个EntityBean又 一个在地层数据库中有一个表相对应,而EntityBean的每一个实例对应表中的一行数据。在第 5和管6章有示例代码。 EntityBean和会话Bean的不同之处 EntityBean和会话Bean有很多不同之处。EntityBean是持久性的,允许共享访问,拥有 主键并且会参与和其他EntityBean的关联。 持久性 因为EntityBean的状态保存在存储设备中,所以它具有持久性。持久性是指EntityBean 的状态跨越应用程序和J2E服务器处理过程的生存期,就是说应用程序结束或者服务器终止 EntityBean的状态仍然保留。如果你是用数据库,你就是在使用持久性数据。数据库中的数频 是持久性的,应为就算你关闭数据库服务器或者相应的应用程序,他们仍然是存在的。 EntityBean有两种特久性管理机制:BP(bean-managed persistence Bean管理的持久性) 和CP(container--managed persistence容器管理的持久性)。对于BWP,必须在EntityBear 中手工编写访问数据库的代码。对于CP,容器会自动生成访问数据库的代码,为开发者节省 了为数据库访问编码。详细信息在下节容器管理的持久性中介绍。 共享访问 EntityBean可以被多客户端所共享。由于多个客户端可能同时去修改同一数据,所以在调 用过程中事务机制非常重要。典型情况下EJB容器都支持事务机制。在这种情况下,可以在Bam 的部署描述符中确定它的事务属性。开发者不必为事务界限编码 容器会自动划分事务界限。 14章将详细描述Bean的事务机制。 牛弹 每一个EntityBean实例都有一个唯一对象标识。例如一个特定的EntityBean实例可能用 个特定的数字来标识。这个唯一标识就是主键,可以让客户端找到对应的EntityBean实例。 更多信息请查看主键和Bean管理的持久性一节。 关系 象关系数据库中的一个表一样,EntityBean之间也会有关系。例如在 一个学校登记系统中, 表示学生的StudentEJB和表示课程的CourseEJB因为学生必须登记上课而产生关系。 EntityBean关系的实现方法对于BWP和CMP是不同的。BWMP需要编码来实现关系,而CMP 是由容器来处理关系的(开发者必须在部署描述符中定义关系)。因此,EntityBean的关系通 常是指采用CP的关系。 容器管理的特久性(CP) 容器管理的持久性(OP)是指EJB容器负责处理所有的数据库访问。EntityBean的代码 不包含任何数据库访问语句(SQL)。所以Ban的代码不会受到低层存储机制(数据库)的约束。 由于这样的灵活性,即使把EntityBean部署到使用不同数据库的不同的服务器上,也不需要修 改代码和重新编译。简而言之,CP大大提高了EntityBean的可移植性
状态会话 Bean 发一封邮件确认网络订单。 .Bean 需要从数据库获取一些客户端经常访问的只读数据。你可以用这样的 Bean 来访 对象。商业对象的例子如:消费者,订单和产 储设备是一个关系型数据库。最典型的情况是一个 EntityBean 又 访问,拥有 主键并且 持久 就是说应用程序结束或者服务器终止 EntityB 保留。如果你是用数据库,你就是在使用持久性数据。数据库中的数据 是持久性 在下节容器管理的持久性中介绍。 共享 发者不必为事务界限编码——容器会自动划分事务界限。 14 章将 到对应的 EntityBean 实例。 Bean 管理的持久性一节。 在一个学校登记系统中, P 需要编码来实现关系,而 CMP 部署描述符中定义关系)。因此,EntityBean 的关系通 容器 SQL)。所以 Bean 的代码不会受到低层存储机制(数据库)的约束。 据库的不同的服务器上,也不需要修 ,CMP 大大提高了 EntityBean 的可移植性。 问数据表中代表这个月已经卖出的产品的行。 3,EntityBean 一个 EntityBean 描述一个持久存储备的商业 品等。在 J2EE SDK 中持久存 一个在地层数据库中有一个表相对应,而 EntityBean 的每一个实例对应表中的一行数据。在第 5 和第 6 章有示例代码。 EntityBean 和会话 Bean 的不同之处 EntityBean 和会话 Bean 有很多不同之处。EntityBean 是持久性的,允许共享 会参与和其他 EntityBean 的关联。 性 因为 EntityBean 的状态保存在存储设备中,所以它具有持久性。持久性是指 EntityBean 的状态跨越应用程序和 J2EE 服务器处理过程的生存期, ean 的状态仍然 的,应为就算你关闭数据库服务器或者相应的应用程序,他们仍然是存在的。 EntityBean 有两种持久性管理机制:BMP(bean-managed persistence Bean 管理的持久性) 和 CMP(container-managed persistence 容器管理的持久性)。对于 BMP,必须在 EntityBean 中手工编写访问数据库的代码。对于 CMP,容器会自动生成访问数据库的代码,为开发者节省 了为数据库访问编码。详细信息 访问 EntityBean 可以被多客户端所共享。由于多个客户端可能同时去修改同一数据,所以在调 用过程中事务机制非常重要。典型情况下 EJB 容器都支持事务机制。在这种情况下,可以在 Bean 的部署描述符中确定它的事务属性。开 详细描述 Bean 的事务机制。 主键 每一个 EntityBean 实例都有一个唯一对象标识。例如一个特定的 EntityBean 实例可能用 一个特定的数字来标识。这个唯一标识就是主键,可以让客户端找 更多信息请查看主键和 关系 象关系数据库中的一个表一样,EntityBean 之间也会有关系。例如 表示学生的 StudentEJB 和表示课程的 CourseEJB 因为学生必须登记上课而产生关系。 EntityBean 关系的实现方法对于 BMP 和 CMP 是不同的。BM 是由容器来处理关系的(开发者必须在 常是指采用 CMP 的关系。 管理的持久性(CMP) 容器管理的持久性(CMP)是指 EJB 容器负责处理所有的数据库访问。EntityBean 的代码 不包含任何数据库访问语句( 由于这样的灵活性,即使把 EntityBean 部署到使用不同数 改代码和重新编译。简而言之
为了可以自动生成数据库访问代码,容器需要知道EntityBean所代表数据的抽象规则。 抽象数据模式(Abstract Schema) 作为EntityBean的部署描述符的一部分,抽象数据模式定义了EntityBean的持久性字段 和关系。抽象数据模式不同于底层数据库的物理表述。抽象是将它和底层的数据库物理模式区 分开来(这里指的是把数据库的表和字段直接映射倒EntityBean)。比如关系型数据库的物理 规划是指由表和列组成的结构 你需要在部署描述符中指定抽象数据模式的名称,这个名称会在用EBQL(Enterptise lavabean query language)写查询的时候被引用。对于CP,你需要为除了findbyPrimarykev 的所有查找方法定义一个对应的EJBQL查询。这个查询将在该查找方法被调用的时候有容器 行。第8章将详细介绍EIB QL。 在你想要编码之前了解一下抽象数据模式的梗概是很有帮助的。下图是一个描绘3个 EntityBean之间关系的简单规划。这些关系将在后续章节深入讨论。 OrderEJB One Many Many One LineltemEJB CustomerEJB Many One ProductEJB 图3 持久性字段(Persistent Fields) EntityBean的持久性字段都存储在地层的数据存储设各中。它们共同组成了Entity bean的 状态。在运行时,EB容器自动地在数据库和EntityBean之间同步这些状态 在部署的时候 典型情况容器会把EntityBean映射为数据库中的一张对应表而持久性字段映射为表的字段 (column列). 例如 -个EntityBean CustomerEJB可能有firstName,.lastName,.phone和emailAddress等持 久性字段。在CMP中它们都是虚拟的,它们都在抽象数据模式中以访问方法(getters和setters》
为了 规则。 抽 作为 性字段 和关系。 和底层的数据库物理模式区 分开来(这里指的是把数据库的表和字段直接映射倒 EntityBean)。比如关系型数据库的物理 规划是指 你需 描述符中指定抽象数据模式的名称,这个名称会在用 EJB QL(Enterptise JavaBean Query Language)写查询的时候被引用。对于 CMP,你需要为除了 findByPrimaryKey 的所有查 询将在该查找方法被调用的时候有容器执 行。第 8 章将详细介绍 EJB QL。 据模式的梗概是很有帮助的。下图是一个描绘 3 个 EntityBean 之间关系的简单规划。这些关系将在后续章节深入讨论。 可以自动生成数据库访问代码,容器需要知道 EntityBean 所代表数据的抽象 象数据模式(Abstract Schema) EntityBean 的部署描述符的一部分,抽象数据模式定义了 EntityBean 的持久 抽象数据模式不同于底层数据库的物理表述。抽象是将它 由表和列组成的结构。 要在部署 找方法定义一个对应的 EJB QL 查询。这个查 在你想要编码之前了解一下抽象数 图 3-1 s) 字段映射为表的字段 (column 列)。 例如:一个 EntityBean CustomerEJB 可能有 firstName,lastName,phone 和 emailAddress 等持 久性字段。在 CMP 中它们都是虚拟的,它们都在抽象数据模式中以访问方法(getters 和 setters) 持久性字段(Persistent Field EntityBean 的持久性字段都存储在地层的数据存储设备中。它们共同组成了 Entity Bean 的 状态。在运行时,EJB 容器自动地在数据库和 EntityBean 之间同步这些状态。在部署的时候, 典型情况容器会把 EntityBean 映射为数据库中的一张对应表而持久性
的形式声明,不需要像BMP一样在EntityBean中把它们声明为实例变量。 关系字段(Relationship Fields) 一个关系字段就像数据库的一个外键,它识别一个关联的Ba 。和持久性字段一样,关系 字段在CMP中也是虚拟的并以访问方法形式定义。但是关系字段并不表示Entity Bean的状态。 关系字段会在CMR的方向一节进一步讨论。 CMR(Container-ManagedRelationships)分类 CMR可以分为四类: 一对一:一个EntityBean的实例对应另一个EntityBean的单个实例。例如,对于一个存储 箱存放一个小部件的物资仓库模型,StorageBinEJB和WidgetEJB的关系就是一对一 对多: 个EntityBean实例对应另一个EntityBean的多个实例。例如, 一张订单可以有 很多的明细项目,在order应用中,OrderEJB和LineItemEJB的关系就是一对多。 多对一呵呵,把上面的例子再读一边就好了:) 多对多:两个EntityBean中任一EntityBean的单个实例都可能对应 一个的多个实例。 例如:在学校里,一门课有很多学生上,而每一个学生都不会只上一门课。因此在enrollment 应用中,CourseEJB和StudentEJB的关系就是多对多。 CMR的方向 只有两种可用的方向:单向或者双向(可呵:)。在双向的关系中,每一个EntityBean都 有对另一个EntityBean引用的关系字段。通过关系字段,EntityBean可以访问相关的EntityBean 对象。如果 一个EntityBean有关系字段,我们通常会说它“知道"它的关联对象。就像OrderEJ “知道”它的明细项LineltemEJB,如果同时LineltemEJB也“也知道"自己所属的订单OrderEJB, 那么它们的关系就是双向的。 在单向的关系中,只 一个EntityBean中有对另一个EntityBean引用的关系字段。像订 单明细LineltemEJB中有一个产品的关系字段引用ProductEJB,而ProductEJB中并没有对 LineltemEJB引用的关系字段。就是说LineltemEJB“知道”它要卖那个ProductEJB而ProductEJB 却还是SB一样被谁卖了都不晓得。 EBQL查询通常需要通过这些关系取得数据。关系的方向决定了查询可以从哪个EB 向另一个相关的EJB取得数据。例如一个查询可以通过LineItemEJB取得对应的ProductEJB代 表的产品数据,但却不能从ProductEJB查询到有哪些订单明细项出卖过它。而对于双向关系想 怎么玩就怎么玩吧,大家都是成年人嘛,只要不是太过分哦:) 何时需要EntityBean Bean代表一个商务实体而不是一个过程。例如表示信用卡的CreditCardEJB要做成 EntityBean,.而信用卡核实的VerifierEJB就只能做成会话Bean, ●Bean的状态是需要持久存储的。如果Bean的实力结束了或者J2EE服务器关闭,它的状态 依然存在,只是回到向数据库这样的存储设备睡觉去了。 4,Message-Driven Bean 注:因为Message--DrivenBean依于JMS(Java Message Serviec ,Tava消息服务)书 术,所以本节包含The Java Message Service torial的一些内容。如果要全面了解它们的工作原 理请参考上书,下在地址: http://java.sun.com/products/jms/tutorial/index.html
的形式声明,不需要像 BMP 一样在 En 关系字段(Relationship Fields) tityBean 中把它们声明为实例变量。 一个关系字段就像数据库的一个外键,它识别一个关联的 Bean。和持久性字段一样,关系 字段在 的状态。 关系字段会在 CMR 的方向一节进一步讨论。 CM CM 一对 个存储 箱存放一 一对 可以有 很多的明 实例。 例如:在 llment 应用中, B 的关系就是多对多。 CMR 的方向 an 都 有对另一 ,EntityBean 可以访问相关的 EntityBean 对象。如果一个 EntityBean 有关系字段,我们通常会说它“知道”它的关联对象。就像 OrderEJB “知道” LineItemEJB,如果同时 LineItemEJB 也“也知道”自己所属的订单 OrderEJB, 那么它们的关系就是双向的。 在单向的关系中,只有一个 EntityBean 中有对另一个 EntityBean 引用的关系字段。像订 单明细 没有对 LineItemEJB ctEJB 而 ProductEJB 却还是 EJB QL 过这些关系取 。关系的方向决定了查询可以从哪个 EJB 向另一个相关的 EJB 取得对应的 ProductEJB 代 表的产品数据,但却不能从 ProductEJB 有哪些订单明细项出卖过它。而对于双向关系想 怎么玩就 何时需要 z Be 要做成 En z Bea 的状态 依然 4,M 注:因为 Message-DrivenBean 依赖于 JMS(Java Message Serviece,Java 消息服务)技 术,所以本节包含 The Java Message Service Tutorial 的一些内容。如果要全面了解它们的工作原 理请参考上书,下在地址: http:/ un.com/products/jms/tutorial/index.html CMP 中也是虚拟的并以访问方法形式定义。但是关系字段并不表示 Entity Bean R(Container-ManagedRelationships)分类 R 可以分为四类: 一:一个 EntityBean 的实例对应另一个 EntityBean 的单个实例。例如,对于一 个小部件的物资仓库模型,StorageBinEJB 和 WidgetEJB 的关系就是一对一。 多:一个 EntityBean 实例对应另一个 EntityBean 的多个实例。例如,一张订单 细项目,在 order 应用中,OrderEJB 和 LineItemEJB 的关系就是一对多。 多对一:呵呵,把上面的例子再读一边就好了:) 多对多:两个 EntityBean 中任一 EntityBean 的单个实例都可能对应另一个的多个 学校里,一门课有很多学生上,而每一个学生都不会只上一门课。因此在 enro CourseEJB 和 StudentEJ 只有两种可用的方向:单向或者双向(呵呵:)。在双向的关系中,每一个 EntityBe 个 EntityBean 引用的关系字段。通过关系字段 它的明细项 LineItemEJB 中有一个产品的关系字段引用 ProductEJB,而 ProductEJB 中并 引用的关系字段。就是说 LineItemEJB“知道”它要卖哪个 Produ SB 一样被谁卖了都不晓得。 查询通常需要通 得数据 EJB 取得数据。例如一个查询可以通过 LineItem 查询到 怎么玩吧,大家都是成年人嘛,只要不是太过分哦:) EntityBean an 代表一个商务实体而不是一个过程。例如表示信用卡的 CreditCardEJB tityBean,而信用卡核实的 VerifierEJB 就只能做成会话 Bean。 n 的状态是需要持久存储的。如果 Bean 的实力结束了或者 J2EE 服务器关闭,它 存在,只是回到向数据库这样的存储设备睡觉去了。 essage-Driven Bean /java.s Message-DrivenBean 的构造
Message-DrivenBean是一种可以让应用程序一部处理消息的企业Bean。它以 S消息监听者的方式工作,很像一个事件监听者,只是用消息代替了事件。消 息的发送者可以是任意J2E构件 -应用程序客户端、别的企业Bean或者We 应用一 一或者一个S应用程序或者别的非J2EE系统。 Message--DrivenBean现在只能处理JS消息,不过将来一定可以处理任意类型 的消息。 第7章会详细讨论Message--DrivenBean。 与会话Bean、EntityBean的不同之处 Message--DrivenBean与另外两种企业Bean最明显的区别是客户端访问 Message--DrivenBean不需要通过接口(接口定义将在下一节介绍)。就是说它只需 ,个Bean类文件 Message--DrivenBean在有些方面和无状态会话Bean相似: ·它的实例不保持数据或者与特定客户端的会话状态 个Message-DrivenBean的所有实例都是等价的,容器可以把消息分给 任何一个实例处理。容器可以通过实例池实现同时处理多个消息流。 ●单个Message-DrivenBean可以处理多个客户端发送的消息 Message-DrivenBean并不是任何状态都保持,在处理客户端发送的消息期间它也 通过实例变量保持一些状态,例如:JMS连接,数据库连接或者对企业Bean的引用等。 当一个消息发送到J2EE服务器端,容器调用Message--Driv nBean的onMessage方 法来处理该消息。该方法通常把收到的消息造型为五种JS消息之一然后根据该应用的 商业逻辑处理收到的消息。该方法也可以调用别的辅助方法或者调用一个会话Bea或 者EntityBean的方法来处理消息中的信息或把消息存储到数据库。 消总也许和事务上下文一起发送给Message-DrivenBean,这样onMessage万法中 的所有操作都会被当作同一个事务或其中的一部分来处理。如果处理过程被回滚,消息 就必须重发。详见第7章 何时要Message-DrivenBean 用会话Bean和EntityBean也可以发送和接收JMS消息,但它们是同步的。而很多时候同 步并不是必要的,这时候同步反而会强占很多服务器资源,这样我们可以采用异步方式来处理 以减少资源消耗。需要异步消息处理就是用Message-DrivenBean
Message-DrivenBean 是一种可以让应用程序一部处理消息的企业 Bean。它以 JMS 消息监听者的方式工作,很像一个事件监听者,只是用消息代替了事件。消 ——应用程序客户端、别的企业 Bean 或者 Web 应用——或者一个 JMS 应用程序或者别的非 J2EE 系统。 将来一定可以处理任意类型 第 7 与会话 Bean、EntityBean 的不同之处 Mes Mes 在下一节介绍)。就是说它只需 要一个 Bean 类文件。 Message-DrivenBean 在有些方面和无状态会话 Bean 相似: Mes 通过实例 当一个消息发送到 J2EE 服务器端,容器调用 Message-DrivenBean 的 onMessage 方 法来处理 收到的消息造型为五种 JMS 消息之一然后根据该应用的 商业逻辑处理收到的消息。该方法也可以调用别的辅助方法或者调用一个会话 Bean 或 者 Enti 消息 的所有操 就必须重发。 何时需要 Me 用会话 时候同 步并不是必要 占很多服务器资源,这样我们可以采用异步方式来处理 以减少资 息的发送者可以是任意 J2EE 构件 Message-DrivenBean 现在只能处理 JMS 消息,不过 的消息。 章会详细讨论 Message-DrivenBean。 sage-DrivenBean 与另外两种企业 Bean 最明显的区别是客户端访问 sage-DrivenBean 不需要通过接口(接口定义将 z 它的实例不保持数据或者与特定客户端的会话状态 z 一个 Message-DrivenBean 的所有实例都是等价的,容器可以把消息分给 任何一个实例处理。容器可以通过实例池实现同时处理多个消息流。 z 单个 Message-DrivenBean 可以处理多个客户端发送的消息 sage-DrivenBean 并不是任何状态都保持,在处理客户端发送的消息期间它也 变量保持一些状态,例如:JMS 连接,数据库连接或者对企业 Bean 的引用等。 该消息。该方法通常把 tyBean 的方法来处理消息中的信息或把消息存储到数据库。 也许和事务上下文一起发送给 Message-DrivenBean,这样 onMessage 方法中 作都会被当作同一个事务或其中的一部分来处理。如果处理过程被回滚,消息 详见第 7 章 ssage-DrivenBean Bean 和 EntityBean 也可以发送和接收 JMS 消息,但它们是同步的。而很多 的,这时候同步反而会强 源消耗。需要异步消息处理就是用 Message-DrivenBean
5.定义客户端访问接口 注:本节内容不适用于Message--DrivenBean,.因为它不需要通过接口访问:) 客户端只能通过会话Bean或者EntityBean的接口中定义的方法来访问它们。接 口就相当于一个企业Bean的客户端视图。而企业Bean的方法实现、部署描述 符设置、抽象数据模式和数据库访问对客户端都是透明的。设计优良的接口可 以使J2EE应用程序的开发和维护更简单。优雅的接口不仅避免了客户瑞了解 EJB层的复杂性,同时它们也使EUB内部实现的修改不会影响到客户端。甚至 你把原来用BMP实现的EntityBean改为用CMP实现也不需要改变客户端的代 码。但是如果你修改了接口中的方法声明,那么没办法客户端也只有作相应的 修改了。就向地下工作者的联系暗号,如果上线的暗号变了,而下线还用旧暗 号是不可能在联系上的了。因此,为了尽量使你的客户瑞不受EB更改的影响, 必须谨慎的设计接口。 在设计J2EE应用程序的时候,你一开就应该要讨论问题之一就是企业Bean允 许客户端访问的方式:远程或者本地访问。 远程访问 一个企业Bean的远程客户端有以下特征: ·它可以运行在一个与它访问的企业Bean不同的机器和一个不同的Java虚 拟机(Java virtual machine JVM)环境中。但并不是必须的。 ·它可以是一个Wb应用或者一个J2EE的应用程序客户端,也可以是其他 的企业Bean ·对于远程客户端,企业Bean的位置是透明的。 要创建一个可以远程访问的企业Bean你必须为它编写一个Remote接口和一个 Home接口.Remote接口定义商业方法,不同的企业Bean有不同的商业方法(这 个是废话,因为企业Bean是根据商业逻辑划分的实体或者处理过程)。如 BankAccountEJB有两个名字为debi借)和credit(贷)的商业方法。Home接口定 义企业Bean的生命周期方法create和remove方法。对EntityBean,Homc接 还定义查找方法((finder)和家族(home)方法。查找方法用来定位EntityBean。家族 方法县被调用以操作所有的EntityB©an实例的,就是说这些方法的调用对于对 应Entity Bean的实力都起作用。下图是由接口组成的企业Bean的客户端视图
5.定义客户端访问接口 注: 客户端只能通过会话 Bean 或者 EntityBean 的接口中定义的方法来访问它们。接 应用程序的开发和维护更简单。优雅的接口不仅避免了客户端了解 EJB 层的复杂性,同时它们也使 EJB 内部实现的修改不会影响到客户端。甚至 声明,那么没办法客户端也只有作相应的 修改了。就向地下工作者的联系暗号,如果上线的暗号变了,而下线还用旧暗 上的了。因此,为了尽量使你的客户端不受 EJB 更改的影响, 必须谨慎的设计接口。 远程访问 一个企业 Bean 的远程客户端有以下特征: z 它可以运行在一个与它访问的企业 Bean 不同的机器和一个不同的 Java 虚 机(Java virtual machine JVM)环境中。但并不是必须的。 z 它可以是一个 Web 应用或者一个 J2EE 的应用程序客户端,也可以是其他 是透明的。 。对 EntityBean,Home 接口 还定义查找方法(finder)和家族(home)方法。查找方法用来定位 EntityBean。家族 本节内容不适用于 Message-DrivenBean,因为它不需要通过接口访问:) 口就相当于一个企业 Bean 的客户端视图。而企业 Bean 的方法实现、部署描述 符设置、抽象数据模式和数据库访问对客户端都是透明的。设计优良的接口可 以使 J2EE 你把原来用 BMP 实现的 EntityBean 改为用 CMP 实现也不需要改变客户端的代 码。但是如果你修改了接口中的方法 号是不可能在联系 在设计 J2EE 应用程序的时候,你一开就应该要讨论问题之一就是企业 Bean 允 许客户端访问的方式:远程或者本地访问。 拟 的企业 Bean。 z 对于远程客户端,企业 Bean 的位置 要创建一个可以远程访问的企业 Bean 你必须为它编写一个 Remote 接口和一个 Home 接口。Remote 接口定义商业方法,不同的企业 Bean 有不同的商业方法(这 个是废话,因为企业 Bean 是根据商业逻辑划分的实体或者处理过程)。如 BankAccountEJB 有两个名字为 debit(借)和 credit(贷)的商业方法。Home 接口定 义企业 Bean 的生命周期方法 create 和 remove 方法 方法是被调用以操作所有的 EntityBean 实例的,就是说这些方法的调用对于对 应 EntityBean 的实力都起作用。下图是由接口组成的企业 Bean 的客户端视图