标签: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 2和Spring对比
由于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 3和Spring对比
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
原文地址:http://blog.csdn.net/zhaolijing2012/article/details/42276853