ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]实体Bean介绍

[转载]实体Bean介绍

原创 Linux操作系统 作者:dinner1007 时间:2019-03-31 19:03:07 0 删除 编辑
实体Bean介绍

EJB的技术体系中,实体Bean充当维护数据持久性的角色。开发者可以利用实体Bean对关系型数据库中的数据进行管理,EJB容器会为实体Bean提供可靠的服务支持,使实体Bean拥有可靠的性能。下面首先介绍EJB容器结构和实体BeanEJB容器中的生命周期。

3.1.1 EJB容器

EJB容器为开发者提供了维护EJB对象的环境。在面向客户端方面,EJB容器为EJB对象提供了客户端视图和接口,通过特定的传输协议可以实现EJB容器和客户端之间调用EJB对象的过程。在面向设备和资源方面,EJB容器对数据库、邮件服务器、事务服务、消息服务器等各种资源进行管理,使开发者不必或很少需要与这些资源直接发生关系。EJB在提供这些服务时,保证了EJB对象的稳定性,而且通过EJB容器内的一些机制对EJB对象的服务处理进行了优化。

EJB容器结构如图3-1所示。

EJB容器中包含3EJB组件:实体Bean、会话Bean和消息Bean

实体Bean的主要作用是维护数据的持久性;会话Bean可以提供实现业务逻辑的方法;消息驱动Bean是基于Java消息技术的EJB对象,可以与JMS程序相配合,实现对消息队列的操作。

本章介绍实体Bean的开发方法,本书的第4章将介绍会话Bean的开发方法,第5章将介绍消息驱动Bean的开发方法。

3-1 EJB容器的结构

3.1.2 实体Bean的生命周期

实体Bean是用来管理数据持久性的EJB组件,主要功能是管理与数据库之间发生的操作。每个实体Bean对应数据库表中的一行数据,建立或删除一个实体Bean相应会导致数据库表的一行记录被建立或删除。实体Bean的业务功能由开发者实现,或者由EJB服务器根据实体Bean的配置文件生成。

实体Bean的生命周期是由EJB服务容器负责维护的,同时每个实体Bean都需要实现javax.ejb.EntityBean接口,这个接口中的方法与实体Bean对象的状态有关,具体的接口方法如下:

public void ejbActivate()throws EJBException, RemoteException

public void ejbLoad()throws EJBException, RemoteException

public void ejbPassivate()throws EJBException, RemoteException

public void ejbRemove()throws RemoveException,EJBException,

RemoteException

public void ejbStore()throws EJBException, RemoteException

public void setEntityContext(EntityContext ctx)throws

EJBException,RemoteException

public void unsetEntityContext() throws EJBException,

RemoteException

实体BeanEJB容器中有3种状态,包括不存在、正在池中缓存和准备就绪。

容器在创建实体Bean对象实例后,通过setEntityContext(ctx)方法将上下文传递给实体Bean对象,实体Bean进入缓存的状态,此时的实体Bean可以通过主接口提供一些方法,当实体Bean对象被激活进入就绪状态时,ejbActivate()方法被调用,此时实体Bean的对象与实体Bean的主接口相联系,可以提供相应的业务方法。在执行与数据库的交互时,容器通过ejbStore()ejbLoad()两个方法来维护实体Bean状态。当实体Bean对象被返回到对象池之前ejbPassivate()方法被调用,同时实体Bean对象再次回到缓存的状态。当实体Bean对象对应的EJB对象被删除之前,实体Bean对象的ejbRemove()方法会被调用。当实体Bean被从对象池中删除时,unsetEntityContext()用来除去实体Bean对象中的上下文对象。

3.1.3 本地接口与远程接口

EJB 2.0中,实体Bean能够提供的客户端视图有两种,一种是远程接口方式,另一种是本地接口方式。

当实体Bean发布远程接口方式时,调用实体Bean与客户端程序的位置是无关的,即使客户端程序与EJB容器位于同一Java虚拟机,对于调用过程来说,与客户端在远程的情况是一样的。EJB服务容器通过Java RMI技术来提供实体Bean的远程视图,在客户端调用实体Bean时将参数和结果在双方之间进行传递。

当实体Bean发布本地接口方式时,调用实体Bean的过程就有了很大的不同。最直接的影响是,位于EJB服务容器Java虚拟机以外的客户端程序无法调用到这个实体Bean。当实体Bean提供本地接口时,客户端与EJB服务容器之间不需要RMI来进行远程调用的过程,而是通过传递实体Bean对象的引用方式实现。

3.1.4 主接口与对象接口

EJB服务容器为每个实体Bean提供主接口和对象接口。当提供远程视图时扩展主接口(EJBHome)和远程对象接口(EJBObject),当提供本地视图时扩展本地主接口(NodeLocalHome)和本地对象接口(EJBLocalObject),它们的作用是不同的。

主接口的作用是向客户端提供创建实体Bean、查找实体Bean、删除实体Bean和执行主接口操作的方法。在主接口中可以提供若干个创建方法,方法名称是create(),其参数可以有多种排列方式,这些方法均返回实体Bean实例。主接口中还提供若干个查找方法,这些方法以“find”作为名称的前缀。查找方法可以由容器实现,也可以由实现类实现,这与实体Bean的类型和开发者的设计有关。主接口还提供了删除这个实体Bean的方法,由容器来执行。所以主接口是客户端与服务容器端之间实现交互的接口,客户端可以借助JDNI获取实体Bean的主接口,对于远程视图来说,可以通过如下的方法完成:

Context ctx = new InitialContext(env);

Object objRef = ctx.lookup("cmp/node");

NodeHome home = (NodeHome)

javax.rmi.PortableRemoteObject.narrow(objRef, NodeHome.class);

对于本地视图来说可以通过如下的方法完成:

Context ctx = new InitialContext(env);

Object objRef = ctx.lookup("cmp/node");

NodeLocalHome home = (NodeLocalHome)objRef ;

对象接口向客户端提供了实体Bean的主要业务方法,通过对象接口可以完成对数据的操作,也可以通过它得到主接口,或者删除实体Bean对象。

3.1.5 实体Bean的类型

实体EJB分为CMPBMP两种,CMP的数据操作方法由开发者通过配置文件描述,由EJB容器提供实现,BMP的数据操作方法由开发者自己编写代码实现。

1CMP类型的实体Bean

CMPContainer-Managed Persistence,容器管理持久性)类型的实体Bean是应用最多的实体Bean类型。它使开发者不必再去和复杂的JDBC API程序打交道,就可以完成高质量的数据库操作组件,并且在EJB 2.0标准中对CMP的内容进行了一些扩充,主要包括对EJB-QL的支持,对CMRContainer-Managed Relationships,容器管理的关系)的支持。

EJB-QLEJB-Query LanguageEJB查询语言)是基于SQL-92标准开发的用于EJB的查询语言,在EJB-QL语言中包括WHERE, FROMSELECT字句等,开发者可以通过在EJB的部署描述文件中嵌入EJB-QL语句的方式,使EJB服务容器实现相应的查询方法。这减轻了开发者的任务。

CMREJB 2.0的特性,通过CMR的设定,使用容器的支持来实现实体Bean之间的关系,配合EJB-QL的支持时,CMP在处理数据查询方面的能力增强了。

本章在后续的内容中将通过实例介绍CMP的开发方法。

2BMP类型的实体Bean

BMPBean-Managed PersistenceBean管理持久性)类型的实体BeanEJB中的另一种实体Bean类型。在BMP的实现方法中,需要借助于数据库API来实现对数据的操作。与CMP相比,BMP的优势在于可以更加灵活地提供数据库操作方法,特别是对于不支持使用CMP的数据库产品,BMP可以解决特殊的问题。

本章将通过实例来介绍BMP的开发方法。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-131573/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    680
  • 访问量
    471288