首页 > 代码库 > 会话EJB系列(一)EJB概述

会话EJB系列(一)EJB概述

    EJB(Enterprise Java Bean)是Java EE(以前叫J2EE)的核心规范,不仅仅是一种优秀的组件技术,而且还是Java EE 其它规范(如RMI,JNDI,JMS等)的具体应用。

 

一.EJB的概念和意义

(1)EJB规范的由来

    随着软件规模的快速增大和技术复杂度(分布式软件的开发技术,如CORBA、RMI等)的增加,导致软件开发变得越来越复杂,使普通程序员难于处理各种系统级服务,从而使得大型软件系统的开发变得难以为继。

 

    后来,Sun公司发布了EJB规范,目的是统一各种分布式软件开发技术。

    使开发者将主要精力集中在应用业务逻辑的实现上,而一些通用的系统服务(如分布式服务器、远程调用等底层技术)则由应用服务器负责管理。从而提高开发效率。

    而且EJB规范为EJB容器(由应用服务器提供)和EJB组件(由开发者开发)制订了明确的规范,因此只要应用服务器支持标准的EJB规范,那么使用EJB组件开发的应用就可以移植到该服务器上运行。

 

(2)CORBA规范与EJB规范对比

    与CORBA相比,EJB更简单,尤其体现在:访问控制、事务安全等系统级服务上。

    CORBA需要开发者使用复杂的API来进行控制,但EJB则只需要使用部署描述符(一种XML文件)进行配置管理即可,真正提供这些系统级服务的是应用服务器。

 

 

二.EJB发展史

(1)EJB 1.0

    最初的规范只包含有状态的会话Bean、无状态的会话Bean、实体Bean(持久化领域对象)

        优点:提供了良好的分布式支持功能,允许通过远程接口来远程调用EJB中的业务方法。

        缺点:试图简化RMI的远程访问编程,结果更复杂。

                  强制客户机组件总以远程访问的方式来调用EJB的方法,它会加大系统开销,影响性能。

(2)EJB 1.1

    正式支持实体Bean,持久化解决方案。

    把以"硬编码"方式写在程序代码中的信息提取到XML配置文件中,以声明式的方式来管理EJB部署信息。

        缺点:Annotation替代XML配置文件,来管理配置信息。

(3)EJB 2.0

    引入了本地接口:允许开发者决定EJB组件的访问方式,避免强制远程访问支持带来的系统开销和性能下降。

    增强实体Bean功能:允许开发者通过配置文件来用容器管理EJB间关联关系。

    引入了EJB查询语言EJB-QL:不如原生SQL强大

    消息驱动Bean(MDB):客户机组件向目的发送消息来触发MDB的onMessage方法。本质上与无状态的会话Bean相同

(4)EJB 2.1

    增加Web Service支持:更有利于异构系统的整合。

    增加计时器服务:提供任务调度的支持

    增强了EJB-QL的功能

(5)EJB 3.0

    基于ORM理念的、统一的JPA规范作为持久层的解决方案,实现真正的可移植性。抛弃Entity Bean,保留Session Bean和消息驱动Bean

    简化开发过程

        只要求提供远程或本地的业务接口即可,不再需要Home接口,简化Session Bean开发

        完全支持基于Annotation的依赖注入DI,来设置部署描述信息,代替了以前手动的JNDI查找,不再推荐使用XML文件作为部署描述文件

        支持拦截器机制,本质上就是一种轻量级AOP实现。

 

(6)EJB 3.1

    进一步简化开发

       允许企业Bean只提供一个Bean类,甚至无须提供业务接口;

       允许通过异步的方式来调用Session Bean的业务方法;

        简化了EJB的类文件必须打包到JAR文件中的限制,允许直接将EJB类放到WAR文件中。

 

三.EJB的优势和使用场景

    两种主流的Java EE技术架构:

        经典Java EE:以EJB为核心,前端以JSF为MVC框架的技术架构,以Sun提倡的官方Java EE技术为主;

        轻量级Java EE:以Spring+Hibernate为核心,前端以Struts 1或Struts 2为MVC框架的技术架构,以主流的开源框架为主。

 

(1)EJB 2Spring对比

    由于EJB 2开发有点复杂,直接催生了Spring框架。

         IoC容器,处理企业级应用中,组件的依赖关系

         AOP,处理应用底层的系统级问题,如事务、访问控制等

 

      不管是以Spring+Hibernate为核心的轻量级Java EE应用,还是以EJB为核心的经典Java EE应用,它们的结构其实殊途同归。

      对于应用开发者而言,Spring容器管理的不再是复杂的EJB组件,而是简单的POJO Bean。 这些Bean无须实现任何接口或继承任何基类,无须单独为每个Bean类使用XML配置文件,无须打包成JAR文件

       开源的Spring容器已经取代了昂贵的EJB容器,不再需要应用服务器(如WebLogic、WebSphere等),只需要普通的Web服务器(如Resin、Tomcat等)

   

(2)EJB 3Spring对比

    EJB 3的出现成为了EJB规范的巨大转机。

 

    就简单、易用性方面来说,EJB 3的开发和Spring容器中POJO Bean复杂度类似

    真正商用的应用服务器提供了Spring容器更多的支持,例如EJB的池化管理、服务器节点的集群管理等。

 

(3)总结

    对于规模较小、伸缩性要求不大的企业级应用而言,使用以Spring+Hibernate为核心的技术来开发即可。

    但对于具有如下3个特征的企业级应用来说,选择以EJB为核心的经典Java EE技术可能更合适。 

         1)应用的规模较大,而且增长速度快速。

         2)应用的伸缩性要求很高。

         3)应用可能需要使用除JSP页面之外的其他客户端。

 

 

文章最后,对EJB做如下总结:

    EJB使开发者将主要精力集中在应用业务逻辑的实现上,而一些通用的系统服务(如分布式服务器、远程调用等底层技术)则由应用服务器负责管理。从而提高开发效率。

    而且EJB规范为EJB容器(由应用服务器提供)和EJB组件(由开发者开发)制订了明确的规范,因此只要应用服务器支持标准的EJB规范,那么使用EJB组件开发的应用就可以移植到该服务器上运行。

 

会话EJB系列(一)EJB概述