第3章 企业Beans(EJB)简介

  上一章通过开发一个简单的企业Bean,对EJB有了一个初步的认识,本章进一步讨论EJB技术体系的主要几个方面,阐述诸如EJB组件、EJB角色、EJB类型、持久性、EJB合约等基本概念。使读者对EJB技术有更加深入的了解。
  企业Bean(Enterprise JavaBeans,EJB)规范由SUN公司和其它伙伴公司制订,1.0版本在1998年3月发布。1.1版本在1999年12月发布。最近的版本是2.0,于2000年10月发布。可以从网址http://java.sun.com/products/ejb/docs.html下载该规范。
  本章以Enterprise JavaBeans(EJB)规范2.0版为主要参考,从多个侧面介绍EJB的基本概念。

3.1 EJB组件

  企业Bean技术从本质上说是一个基于组件的分布式计算架构体系规范。企业Bean是分布式的面向业务逻辑的企业应用组件。
  基于组件的应用方式是把传统上的应用系统按一定的目标分成两个部分:容器和组件。这种划分更多的是从功能出发的,划分的原则把底层技术细节与应用逻辑分开。容器部分重点在于解决底层的技术问题,如目录访问、分布式事务处理、安全管理、并行访问、持久性管理、资源池管理、系统管理界面和负载均衡等方面。组件部分重点放在具体的应用逻辑上。同时,这样划分也把不同性质的开发工作分离出来。具有不同技术背景的开发人员关注于系统的某一个层面而无需对其他层面深人的了解。一旦这种划分成为了一个技术标准,那么就形成了相关的技术领域的社会工业。

3.1.1 EJB组件的特性

  企业Bean的重要特性如下:
  ·企业Bean包括操作企业数据的业务逻辑。企业Bean是用来封装业务逻辑的。
  ·企业Bean的实例被容器创建和运行。容器管理EJB。
  ·企业Bean在部署的时候通过编辑环境属性来定制。使用部署描述符是部署EJB的重要环节。
  ·不同的服务信息,如事务和安全属性,从企业Bean类中分离出来。这些通用的服务由容器一次完成。开发不同的应用时,不必再考虑这些琐碎的细节问题。用一些工具在应用程序装配和部署过程中管理服务信息。
  ·客户端访问部署在容器的组件是快速进行的。容器通过使用资源池等手段显著提高了性能。
  ·如果一个企业Bean仅使用EJB规范定义的服务,它能被部署在任何一个兼容的EJB容器中。特定的容器能提供EJB额外的服务。依赖这样服务的企业Bean只能部署在支持这个服务的容器中。EJB规范是个通用的规范,得到很多厂商的支持,确保了EJB的可移植性。
  ·企业Bean能被包含在一个已装配的应用程序中,而不需源代码的改变或重新编译。具有良好的重构性、可升级特征。
  ·Bean提供者定义一个企业Bean的客户端视图。Bean提供者可以手工定义客户端视图或通过程序部署工具自动产生。客户端视图不受Bean部署的容器和服务器的影响。这确保了Bean和它们的客户端能被部署到多种执行环境中而不需改变或重新编译。

3.1.2 EJB组件的类型

  企业Bean架构是灵活的,可以实现下列组件:
  ·表示一个无状态服务的对象。即无状态会话EJB。
  ·表示一个无状态服务对象且是异步激发的,被Java消息服务(JMS)的消息驱动。即消息驱动Bean。
  ·表示一个特定客户端的会话状态的对象。如会话对象在客户端多次调用之间自动维持它们的会话状态。即有状态会话Bean。
  ·实体对象表示商业逻辑对象,被多个客户端共享。即实体Bean。实体Beans用来描述较粗糙的逻辑对象(如订单、雇员记录等)。不太适合描述较详细的对象(如订单上的项、雇员地址等)。
  EJB的状态是个较重要的概念。这里的状态是在EJB的客户端视图定义的,也就是说EJB的状态指的是EJB呈现的客户端的状态,而并不是指EJB本身的生存状态,这两者往往并不完全一致。
  虽然EJB定义的状态管理协议简单,它为开发者提供了一个在管理状态上的企业Bean极大的灵活性。
3.1.3 企业 Beans组件应用模型
  J2EE三层应用架构定义了两种基于组建的应用模式,即Web应用和EJB应用。如表3-1所示。

         表3-1 Web应用与EJBs应用对比
  ─────────────────────────────────
        Web应用      EJBs应用
  ─────────────────────────────────
  组件    Servlets(Jsps)   EJBs
  容器    包含在Web服务器中  在应用服务器中
  通信协议  Http        Java RMI,CORBA IIOP,
                  Microsoft DCOM等
  ─────────────────────────────────
  这里我们考虑EJBS应用的情况(Web应用在第7、8章讨论)。
  如图3-1所示是EJB组件运行架构图。图中间的部分包括EJB容器和部署在容器中的组件(即EJB)。图左边的部分是EJB的客户端。图中共示意了四种客户端。EJB还有一种重要的客户端类型,就是EJB本身。也就是说,一个EJB组件可以作为另一个EJB组件的客户端。这种情况在企业级应用中是很常见的。
  
  客户端也可以简单的分成两种:即Java客户端和非Java客户端(比如C/C++)。对Java客户端来说,传输协议可以采用 Java远程方法调用(Java RMI)方式,也可以是IIOP协议,而对非Java客户端来说,只能采用IIOP协议。