[读书笔记]EJB学习小结:EJB中包括什么?

EJB中包括什么?

  • 业务接口
  • 业务逻辑
  • 厂类信息
  • Bean元数据

1、业务接口

EJB的主要用途是实现业务或应用逻辑。因此,bean开发者要定义或派生bean需要的业务操作,并在RMI远程接口中对这些操作进行正式化。这与稍后所学的本地接口相对,称为bean的业务或者远程接口。

远程接口中方法的定义取决于bean的具体用途,但关于接口有一些通用规则:

  • 使用任何基于RMI的接口时,当每个方法抛出java.rmi.RemoteException以及任何面向业务的异常时,必须对此方法进行声明。这样允许RMI字系统向客户端发出与网络相关的错误信号。
  • RMI规则也应用于参数和返回值,因此使用的类型必须是原始类型,Sereializable类型或Remote类型。
  • 接口必须声明扩展了javax.ejb.EJBObject接口。

关于对象的参数和返回值的问题也是很值得研究一番的。当你向本地方法调用中传递参数时,将提供一个初始对象引用以供方法中使用。由于用户共享同一个对象,因此所有用户都能看见对象状态的变化。同时也无需创建对象副本——只需传递一个引用即可。

另一方面,当使用RMI远程方法时,连续对象(实现Serializable接口)通过值进行传递,然而远程对象(例如EJB)通过引用进行传递。通过值进行传递意味着发送了一个对象副本。这又如下几层含义:

  • 首先连续对象的用户不再共享同一个对象;
  • 其次通过bean的远程接口调用方法时可能会降低性能。不仅在网络调用时会降低性能,在拷贝对象以便于在网络中发送时也会降低性能。大多数情况下传递的都是连续对象。

2、业务逻辑

定义接口后面的业务逻辑的任务。EJB的业务逻辑存在于bean类中。这个bean包括两部分:

  • 业务逻辑本身,包括远程接口定义的方法的实现;
  • 一套允许容器管理bean生命周期的方法。

注意:尽管bean本身必须包括以上元素,注意non-trivialbean可以将其部分或全部业务功能委派给其他bean帮助程序或类来完成。

(1)业务接口的实现

首先要指明的是bean本身并不实现前文定义的远程接口。通过EJB配置信息中的属性可以请求容器代表EJB应用注入访问控制之类的服务。要达到此目的,容器必须有从客户端截取方法调用的途径。容器接收到方法后,判断是否需要其他额外服务,然后将此方法传递至bean本身。(例如:容器查看为EJB配置的安全信息,然后判断是否将其传递至bean)

名为EJBObject的服务器端对象截取方法调用。EJBObject作为bean的服务器段代理,实际上有EJBObject实现EJB的远程端口。

客户端调用EJBObject实现的业务方法。EJBObject应用需要的额外服务,然后将方法调用传递至bean本身。EJBObject与提供远程程序调用能力的RMI桩和骨架进行分离。

因此,你的bean必须能够实现远程接口中定义的业务方法。容器使用接口中定义的方法签名以及java映像API来查找bean上合适的方法,因此必须确认使用了正确的方法签名。

(2)提供生命周期的钩子

  • Bean的创建和初始化
  • Bean的销毁和删除
  • Bean内部状态的保存和恢复(如果可应用)
  • EJB根据自身类型来实现一个或多个生命周期接口。在javax.ejb包中定义这些接口。
  • 生命周期方法通常使用ejb开头,这样方便我们区别于业务方法,例如ejbCreate()。

3、厂类信息

对一个客户端使用EJB而言,客户端必须要创建一个新的实例或发现一个现有的实例。EJB可以动态地创建和重新使用bean,这为EJB模型提供了可升级性。

为方便EJB的创建和发现,每种类型的EJB都提供了一个本地接口。Bean开发人员提供一个EJB本地接口作为这个EJB工厂。本地接口扩展javax.ejb.EJBHome接口,并包括bean开发人员识别的一些必要的方法,这些方法允许客户端创建、查找和删除EJB。

依据EJB的类型和EJB的使用方式,客户端获取EJB的方式有两种:

  • create()
  • findXXX()

本地接口是否允许你删除bean取决于bean的类型和bean的使用方法。

4、Bean元数据

EJB包含的最后一部分讲述的是为EJB提供配置信息或元数据(META_INF)。配置信息为EJB的需求和结构提供了一种与容器通信的方式。如果成功部署了EJB,必须要为容器提供一些额外的信息,包括:

  • 用于查找EJB的EJB标识符或名字。
  • Bean类型(会话类型,实体类型或消息驱动类型)
  • EJB的远程接口是哪个类一般根据EJB的功能命名,如:Agency。
  • EJB的本地接口是哪个类。本地接口名字一般由其远程接口名字派生而来。如:AgencyHome。这仅仅是一种命名习惯,而非强制的,因此元数据会明确显示本地接口的名字。
  • Bean本身是哪个类。如:AgencyBean。这也是非强制性的命名方式,所以元数据会明确显示本地接口的名字。
  • 任何作为bean的命/值对。
  • EJB需要的外部资源信息,例如数据库连接或其他EJB。
  • 安全和事务的声明属性。
  • 结构信息bean的关系和依赖性。
  • 持久性映射(如果时可应用的)。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值