EJB 总结

EJB概述

1 简介                                                           

1.1 EJB 的起源

在两层的“客户机/服务器”环境中,应用程序的商业逻辑驻留在客户机上,使得客户机变得庞大和复杂,这种应用程序叫做“胖客户机”。三层“客户机/服务器”引入了一个中间层-----应用程序服务器,改进了可伸缩性和可用性。商业逻辑和服务都驻留在中间件层。

分布式对象系统壮大后,CORBA,COM+等技术出现了,但其编程模块复杂,可移植性不够强。EJB的出现简化了分布式对象的开发,部署和访问。

1.2 EJB的特点

 EJB是一种标准的使用JAVA语言的组件结构,用于创建分布式的面向对象的商业应用程序。EJB使得编写程序简单:应用程序开发者无须明白底层的事务和状态管理,多线程,资源池,安全及其他复杂的底层API细节,然后又允许程序员直接访问底层的API

遵循“编写一次,随处运行”的原则,开发一次,可以部署在多个平台,无需重新编译或修改源码。EJB结构与CORBA兼容。

1.3 EJB的角色

EJB结构定义了六种角色:EJB提供者,应用程序装配者,部署者,EJB服务器提供者,EJB容器提供者,系统管理员。

2 EJB基础

2.1 作为组件的EJB

EJB是一种基于组件的用于分布式计算的结构,是分布式的面向事务的企业应用程序的组件。

EJB实例被容器在运行时创建和管理。

2.2 EJB的约定

客户机的约定:

对象标识符,方法调用(使用Remote接口),Home接口。

容器提供者负责为每个session bean对象声称一个唯一的标志符,对于entity Bean提供者负责提供一个唯一的主健,容器将其嵌入进EJB对象标识符。

客户机通过标准的JNDI确定EJB Home接口的位置,主健被用来标识每一个EJB对象。

EJB提供者定义了个remote接口,该接口中定义了客户机可以调用的商业方法。

Ejb-jar文件:

EJB及其声明的部署信息进行打包的标准格式,包括:描述ejb-jar文件内容的JAR文件的清单纪录;EJBjava类文件;EJB部署描述符;运行时需要的EJB的环境属性。

 

Session Bean

1 Session Beans 概述

一个session bean 代表一个j2ee服务器中的客户机,非共享的,非持久地。

Enterprise Bean 运行在EJB容器内部,客户机不能直接实例化bean,仅仅EJB容器可以实例化Enterprise Bean。实例化时,通过以下步骤:

(1)      客户机调用home对象的create方法

(2)      EJB容器实例化Enterprise Bean

(3)      EJB调用相应的ejbCreate方法

Stateful Stateless Session Bean

Stateless Session Bean 不维护特定客户机的会话状态,当方法调用完成后状态不保留。与Stateful Session Bean相比,在相同数量客户机的情况下,应用程序要求更少的Stateless Session Bean。有时,EJB容器可以将Stateful Session Bean写到二级存储设备,而Stateless Session Bean永远不能被写到二级存储设备。Stateless Session BeanStateful Session Bean提供更好的性能。

Stateful Session Bean的使用:维护特定客户机的状态,表现非持久存储的对象,表现商业对象之间的工作流。

Stateless Session Bean的使用:不需要维护任何客户机的特定状态信息,相同的bean实例可以被重新用以服务其他的客户机;相对Stateful Session Bean提高性能;操作数据库中多条记录和表现数据的共享观点的商业对象。    

2 剖析Session Bean

简介:

entity bean 相比,Session Bean并不直接表现数据库中的共享资料,尽管他们可以访问和更新这样的资料。

客户机通过Session Beanremote接口访问Session Bean,实现该remote接口的对象称为EJB对象,可以通过java apirmi访问该对象。

EJB容器

EJB容器是一个系统,多个EJB类的多个Enterprise Bean可以生存在相同的容器中,客户机通过JNDI查询home接口,使容器负责让已安装的EJB类对客户机有效。通常,EJB类和EJB容器的实际位置对于客户机来说是透明的。容器通过home接口创建和移走EJB对象。

EJB对象

客户机不会直接访问Enterprise Bean类的实例,总是使用Enterprise Beanremote接口访问Enterprise Bean的实例,Enterprise Beanremote接口的实现类由容器提供,这种类实现的分布式对象被称为EJB对象。

EJB对象提供对象的商业逻辑方法,javax.ejb.EJBObject接口方法允许客户机得到EJB对象的容器、句柄,测试EJB对象是否与其他的相同,移走EJB对象。这些定义方法由容器实现。

3 Session Bean组件的约定

Session Bean实例的生命周期通常就是创建他的客户机的生命周期。

为了高效,Session Bean容器可能需要临时的江空闲状态的Session Bean转换到二级存储设备,将工作集转换到二级存储设备被称为钝化(passivation),反之,称为活化(activation)

Home接口上的create方法被调用时,Session Bean的生命周期开始,容器调用newInstance方法为Enterprise Bean创建新的内存对象,然后调用实例上的setSessionContext,并将EJB对象的引用返回给客户机。

Stateless Session Bean home接口必须由一个无参数的create方法,并返回remote接口,home接口不能在有其他的create方法,必须定义一个ejbCreate方法,该方法也不能带参数。由于Stateless Session Bean的所有实例都是相同的,容器可以选择将客户机的工作代理给其他任何有效的实例。

(1) Enterprise Bean提供者的责任

类和接口:提供Enterprise Bean类,Enterprise Beanremote接口和home接口。

Enterprise Bean类:必须实现javax.ejb. SessionBean接口,类必须是public的,不能为abstract,必须实现ejbCreate方法和商业方法。

Enterprise Beanremote接口:必须扩展javax.ejb.EIBObject接口,方法的定义必须遵循java rmi原则,方法必须与Enterprise Bean的方法相匹配(方法名一样,参数一样,返回类型一样,throw 异常一样)。

Enterprise Beanhome接口:必须扩展javax.ejb.EJBObject接口;方法的定义必须遵循java rmi原则;定义一个或多个create(…)方法,该方法必须与Enterprise Bean中定义的其中一个ejbCreate方法相匹配(参数相同,返回值不同);create方法的返回类型必须是enterprise bean remote接口的类型。

(2) 容器提供者的责任

实现类的生成:enterprise beanhome接口的实现类(EJB home)

              enterprise beanremote接口的实现类(EJB对象类)         

EJB home类:由容器生成,实现javax.ejb.EJBJhome接口的方法和create方法,每一个create方法的实现调用一个匹配的ejbCreate方法。

EJB对象类:由容器生成,实现javax.ejb.EJBObject接口的方法和enterprise bean上特定的商业方法.

Handle类:容器负责为enterprise bean实现handle类。

 

Entity Bean

1 概述

1.1 简介

Entity bean 代表了以持久存储机制保存的一个实体(entity,通常为一个数据库。客户机通过entity beanremote接口访问entity bean,实现remote接口的对象被称为EJB对象,该对象是一个客户机通过标准的java api rmi可以访问的远程java编程对象。它存在于容器中,容器为其提供安全,并行处理,事务,持久存储和其他服务,这些对于客户机都是透明的。多个客户机可以并行地访问一个entity对象,容器使用事务同步entity的状态。每一个entity对象都有一个标志符,容器崩溃并重起后,已创建的entity bean 仍然存在,对象标识符由容器实现。           客户机利用JNDI查找enterprise beanhome接口时,容器使home接口在JNDI名字空间中生效。容器的实现对客户机是透明的,可以保证可移植性的实现。            

1.2 Entity Bean的特征

session bean相比,entity bean是持久性的,允许共享访问,并且有一个主健。

持久存储:Entity Bean的状态以一种存储机制存储,它是持久的。有两种类型:Bean管理的持久存储(Bean Managed Persistence,BMP)和容器管理的持久存储(Container Managed Persistence,CMP)。对于BMP,我们编写的entity bean代码中含有访问数据库的调用,如ejbCreate方法,将发出一个SQL语句。对于CMP,它自动生成所需要的数据库访问调用,entity bean代码中不包含SQL语句。相对于BMPCMP代码更少,且不含有数据库访问的调用,代码与特定数据促出无关。

共享存取:entity bean可以被多个客户机共享访问,因此,EJB容器提供了事务管理。

主健:entity EJB对象的标志符由EJB对象的home和主健确定,如果两个EJB对象的home和主健相同,则认为他们是相同的。

1.3 异常处理

ejbCreate----CreateException

ejbFindByprimaryKey----ObjectNotFoundException

ejbLoad,ejbStor----NoSuchEntityExcetion

ejbRemove----RemoveException

所有方法----EJBException

 

2 BMP

Entity Bean 应满足的要求:

实现EntityBean接口,类定义为public,类不能定义为abstractfinal,实现一个或多个ejbCreateejbPostCreate方法,实现finder方法,实现商业方法,含有一个空构造器,不能实现finalize方法。

其中的ejbCreate方法需满足:将entity的状态插入到数据库,初始化实例变量,返回主健。

ejbPostCreate方法:每一个ejbCreate方法必须对应一个ejbPostCreate方法,由容器调用,该方法通常为空。

ejbRemove方法:客户机通过他移走一个entity bean,它将删除数据库中该实体的状态。

ejbLoad,ejbStore方法:同步存储在数据库中的值所对应的entity bean实体变量。

Finder系列方法:必须实现ejbFindByPrimaryKey方法,finder方法名必须以ejbFind为前缀,必须为public,不能为finalstatic,返回类型必须为主健或主健集合。

商业方法:里面封装的是entity bean的商业逻辑,通常,商业方法不访问数据库,这允许我们将商业逻辑与数据库访问代码分离。

Home接口:定义了允许客户机创建和find entity bean的方法。Create 方法的参数与enterprise bean中的一样,返回类型为remote类型,throws包括对应的ejbcreateejbPostCreate方法的throws子句的异常。Finder方法的参数及throws与对应enterprise bean中对应方法一样,返回类型为remote或它的集合。Throws中含有FinderExceptionRemoteException.

Remote接口:扩展了javax.ejb.EJBObject,并定义了商业方法

3 CMP

Enterprise bean:

容器管理域:有点像类的属性,他们代表了实例的状态。

ejbCreate方法:用输入的参数初始化容器的管理域,然后返回null

ejbRemove方法:删除数据库中的纪录,如果entity bean需要再remove前执行一些操作,可以在该方法中完成。

ejbLoadejbStore方法:通常为空

Home接口:

由于是容器管理的持久存储,不用实现finder方法,但是必须指定哪一个子句用于select语句。

4 Entity Bean组件的约定

持久存储:在enterprise bean实例中,实例变量和数据库间转换entity状态的协议被称为对象的持久存储。

BMP的持久存储:在enterprise bean类方法中,直接编写数据库的访问调用,数据库访问调用在ejbCreateejbRemove,ejbFind,ejbLoad,ejbStore方法中被执行。优点:在容器无需生成实现enterprise bean持久存储的数据库调用的情况下,enterprise bean可以被安装进容器。缺点:持久存储被硬编码进enterprise bean类,对于不同的数据资源,调整困难。

CMP的持久存储:不用编写enterprise bean中的数据库访问调用,在部署期间,根据部署描述符,容器提供者会生成数据库访问调用。优点:enterprise bean类与存储entity的数据资源无关。缺点:部署期间,必须将enterprise bean的域映射到数据资源。

实例的生命周期:

Enterprise bean的三种状态:不存在,pooled(该实例不与任何特定ejb对象标识符相联系),ready(实例被分配给一个ejb对象).

当容器用newInstance方法创建实例,enterprise bean实例生命开始;然后进入实例池,变成pooled状态;当被选中为某个客户机提供服务时,从pooled状态到ready状态;当服务完时,容器将其转回pooled状态;调用finalize方法将实例从实例池中移走。

Enterprise bean实例的功能:

容器使用setEntityContext(EntityContext ic)方法将EntityContext接口的引用传递给enterprise bean,实例可以利用该方法来分配实例在其生命周期中所持有的资源。通过unsetEntityContext(EntityContext ic)来释放资源。

ejbActivate方法:当容器从池中选出实例并分配一个特定的EJB对象标识符给实例,容器调用该方法。

ejbPassivate方法:当实例决定解除与EJB对象标识符的联系时,可以调用该方法。

5 多个事务的并行访问

Entity容器有两个策略实现同步:

活化的enterprise bean的多个实例,每一个实例用于一个entity访问的事务,在ejbLoad等方法执行的数据库调用期间,数据库自动执行事务的同步。

容器要求一个独占的锁在数据库中实例的状态上,容器活化单个实例,让多个事务串行地访问该实例。

6 Entity bean的角色

Enterprise Bean提供者:定义remote接口,里面有客户机可以调用的商业方法,必须扩展javax.ejb.EJBObject,遵循rmi的标准规则;在enterprise bean类中编写商业逻辑,定义ejbCreate等方法;定义home接口,里面定义了createfinder的方法;指定环境属性,定义一个配置描述符。

容器提供者:提供javax.ejb.EJBObjectjavax.ejb.EJBHome接口的实现;生成与容器相匹配的enterprise bean类的实现;生成home类,实现home接口的方法。

7 打包与部署

将组件装配进模块和将模块装配进企业应用程序的过程被称为打包(packaging.

可重用的组件被定制导操作的环境,在操作环境中安装和定制应用程序的过程叫做部署。

在部署描述符中,ejb-jar.xmlmiao描述了enterprise javabean的主要属性,web.xml描述了web应用程序的主要属性。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值