您的位置:首页 > 其它

J2EE学习笔记五:entity bean概念

2007-11-28 17:26 489 查看
Entity Bean提供了一个关系数据库的面向对象的抽象,它能同时从面向对象技术和面向过程技术中获益。既然Entity Bean和Session Bean都是Enterprise Bean,那么它们必然具备一定的相同点:Entity Bean也要有一个Home Interface、Bean Interface和Bean Class,如下图所示:



Session Bean调用Entity Bean的Home Interface和Bean Interface来创建、查找和删除Entity Bean,严格来讲其它客户端也可以直接调用这些接口,只是这并不是一个很好的做法。
Home Interface:
Entity Bean的Home Interface可以用来创建一个新的Entity Bean、删除一个Entity Bean以及查找一个已经存在的Entity Bean。调用Home Interface的create方法将会创建一个新的Entity Bean实例,这个方法类似于一般Java类中的构造器;当调用Home Interface的remove方法时,会删掉指定的Entity Bean实例;当调用Home Interface的find方法时,会寻找合适的Entity Bean实例并返回它们,Entity Bean至少要有一个叫做findByPrimaryKey的find方法。同Session Bean一样,Entity Bean的Home Interface也必须要继承EJBHome接口。
Bean Interface:
同Session Bean相似,Entity Bean的Bean Interface也是用来暴露一个bean的方法,只不过它的方法大部分都是Entity Bean中域的set和get方法。同Session Bean一样,Entity Bean的Bean Interface也必须要继承EJBObject接口。
Bean Class:
Entity Bean的Bean Class必须要集成EntityBean接口,它包含了在Bean Interface中指定的setter和getter方法以及包含了业务逻辑的方法,除此之外,它还必须实现那些由EJB容器调用的声明周期方法如ejbCreate等等。
容器管理持久化(Container-Managed Persistence,CMP):
Entity Bean都与后台一个持久化的数据存储相关,这个数据存储通常是关系数据库,Entity Bean的一个特性就是能够使这个持久化过程自动化,这个特征就叫做容器管理持久化(CMP)。因此,当我们调用Home Interface的create方法时,不仅仅创建了一个新的Entity Bean,同时还在它所对应的数据库表中新增了一行记录,整个过程是由容器为我们管理的,包括在什么时候插入这一行记录;调用find方法时,会在相应的数据库表中查找合适的记录,每一行记录对应一个Entity Bean的实例。当使用CMP的时候,数据库模式直接反映了Entity Bean的设计,这和Hibernate里面非常相似,通常一个表对应一个实体。
除了CMP外,还有一个策略是BMP(Bean-Managed Persistence),这要求我们自己去管理所有的持久化过程。通常在如下情况下才需要用到BMP:
1.基于一个已经存在的数据库构建一个EJB应用,如果Entity Bean的设计不能与已有的数据库模式相匹配,此时需要用到BMP
2.不存在数据库,Entity Bean用于对一个外部系统进行包装
3.EJB服务器不支持CMP
一个Entity Bean要求它的一个或多个域能够唯一的识别它,这些个域就叫做主键,就像Hibernate中每个持久化类的ID属性一样,主键的主要作用就是用于查找一个特定的Entity Bean,它可以是任何一个序列化的对象,如String或者Integer。Entity Bean还一个特征就是EQL(EJB Query Language),如同Hibernate中的HQL。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: