ejb与javaBean的区别以及应用场合

来源:互联网 发布:淘宝开店怎么收费标准 编辑:程序博客网 时间:2024/04/19 12:43

EJB的优缺点  

2010-06-12 13:45:40|  分类: EJB|字号 订阅

 这篇文章主要针对将要打算把EJB应用的到自已的技术项目中,。那么在使用EJB之前我们先来盘点一下Ejb的优缺点,然后概括一下什么时候你该用EJB,什么时不该用EJB。 
    EJB的优点
    1 规范详细性:EJB是一种基于规范性的技术。(这同时构成了EJB的主要优点和主要的缺点)。EJB规范说明书中描述了应用程序执行的各个方面,包括数据类型,组件声明周期,角色分布以及其它的东西。。 
    2 和J2EE紧密整合:有许多服务器技术以J2EE为中心构建,其中包括EJB和其它一些相关技术,如:servlets、JavaServer Pages、Java Message Service、J2EE 连接器架构、Java 数据库连接、Java Authentication、Authorization Service, Java Transaction API、JavaMail技术等等。这些技术使J2EE 和 EJB是有机的结合构成一个非常吸引人的解决方案。 
    3 很好的伸缩性:只要你的应用程序服务器通过了大多数的资源管理功能,开发商就可以应用更为复杂的可伸缩算法。 
    4 有权使用资源管理系统:连同EJB容器一起,你可以获得上千行的代码来访问管理资源,包括事务管理系统、安全管理系统、目录服务。因为有了EJB我们可省去亲手实现的这一部分。 
    EJB的缺点 
    EJB优点表现固然卓著,但是缺点和优点同样显著: 
    1 巨大而复杂的规格说明:对于一个复杂的分布式系统,有一个文档进行说明是一件很合理的事情。但是,并不是所有的文档信息都是真正必需的,EJB的文档反而成了一个非常不便利的工具。 
    2 庞大的文件:在你开发一个项目之前,你通常需要阅读1000多页的文档。这是部署EJB时非常痛苦的事情。 
    3 增加程序调试时间:制定EJB解决方案比远比使用普通的Java代码所需的时间长,调试EJB程序也比调试普通的Java代码所需要的时间也长。主要原因是我们不知道bug是出在代码本身还是出在容器上。 
    4 EJB代码更加复杂:举个例子,为了实现一个session bean,你必须写三个类,为了实现一个实体bean,你需写四个类。增加几个部署描述语句,比如说最简单的"Hello world"程序需要10个文件,而不是一个文件。 
    5 重复设计的危险:导致这种结果的原因是复杂的文档所致。。如果你没有完全理解EJB的概念,你就不会很好的驾奴它,让它你所用,反之为你所累。 
    6 维护困难:EJB是一个不断更新的技术,在新技术不断推出的时候,代码需要升级,这就就需要额外的努力和成本来使你的程序和新的EJB容器兼容。

 

 什么时候该使用EJB 
    在众多优点和缺点面前,程序员似乎无从选择,基于这样的情况,我们该如何决定什么时候用EJB更合适呢? 
    如果你有一个基于servlet的web应用程序,这个应用程序要用到数据库。要用到JDBC,要用到SQL查询语句,然后得到ResultSet对象,这是一组表现业务逻辑对象的数据。你将会创建一个类,来表现数据库一条记录的结构。代码如下: 


MyObjectobj = new MyObject(); obj.setXXX(rs.getString("XXX")); obj.setYYY(rs.getString("YYY"));


    当你将结果集显示到表现层或者从表现层数据插入到数据库,你就会考虑如何将这些逻辑事务移到我的MyObject。如果将servlet和那些JDBC链接细节分离开来,让那些对象自己在数据库里查询自己,并且修改,删除。 
    此刻就会有一个新的问题:如何通过查询语句在数据库里找到一个对象?如果要通过主键来查找的话,那么要将主键传到类的构造器中。如果要通过多条件来查找一条记录,那么将需要更多的静态方法。你也需要一种方式来支持事务处理。 
    当应用程序的访问的人数增多,程序的压力越来越大,程序的稳定性也就越来越重要的时候,,就必需考虑复制(replication)、快速对象持久化(fast object persistence)、对象缓冲(object caching)、数据库连接池(database connection pools)、安全事务(secure transactions)等等。这些问题在EJB中都已经得到了解决。你不需要再去走一些弯路,犯些错误。。如果你的bean是一个容器管理持久(Container Managed Persistence)实体bean, 你所要做的就是实现一些接口,你不需要去考虑数据库的连接问题。如果这不是你所需要的,也没有关系,你可以自己去实现BMP(Bean Managed Persistence)实体bean. 
    在应用程序的事务层里,并不仅仅是保持数据的对象,还要实现一些动作功能的对象,这些对象表示业务逻辑。当你开始写应用程序的时候,所有的业务逻辑将会驻入到servlet里面。应用程序最终会需要几个servlets的支持,并且你将会选择是否粘贴复制业务逻辑代码,或者单独称为一个类。一些用户最终会在每个页面中与你的应用程序交互,所以就需要将他的session信息保存起来,以区别不同用户的请求信息。这个问题的解决方案称为会话Bean(Session Bean),它将封装在应用程序的所有业务逻辑里面。 
不需要使用EJB的情况 

    EJB是一个非常出色的技术,但并不是适合所有的解决方案。EJB提供了许多优良的特性(如安全,持久性,事务支持),但并不是每个应用程序都需要这个特性。 

    另外,在有些非分布式的应用程序中,它们更多的关注是速度,而不是安全,事务,这时你就不需要使用EJB进行企业开发。由于EJB的分布式特性,数据必须在客户端和EJB组件(或者服务器)之间,先被marshalled,然后unmarshalled。这个特性引入了大量的损耗,导致性能降低,这既是为什么在同一个虚拟机上使用本地的类是一个更好的选择。 

    关于EJB的一些欠妥的说法 

    1 EJB是一项昂贵的技术:这个回答有点太片面。虽然现在发布了很多低价格或者免费的应用服务器,并且这些服务器拥有商业服务器的所有性能。但是,在一个大的企业应用程序项目里面,相比整个项目的成本,应用程序服务器的价格只是其中的一小部分而已。 

    2 当使用CMP bean时,你需要了解SQL知识:这种说法也不正确。 

    3 EJB应用程序在不同的容器之间很容易移植。这种说法部分正确。只有当EJB 代码以一种portable方式写的才行。Session beans 和BMP beans容易移植,但是移植CMP并不容易,很费劲。 

    4 实体beans运行很慢:这句话大部分对。在大多数的情况下,实体bean运行很慢,最好将其换成session bean. 

    结论 
    在你决定是否在你的项目中使用EJB技术之前,你需要明白你应用程序的需求,以及应用程序发展的前景,同时还有知道使用EJB的主要目地和它的缺陷

原文地址:http://tech.it168.com/j/n/2007-07-17/200707171548937.shtml

 

 

另外  在加上EJB和javaBean的区别

EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了   1.EJB用于服务端应用开发, 而JavaBeans用于客户端应用开发。也可以使用JavaBeans进行服务端应用开发,但JavaBeans模型没有提供服务框架,当应用需要使用系统级服务(如事务管理,安全性,生命周期管理等)时,不适合。

  2.EJB构件是可部署的,EJB构件可以作为独立的单元被部署到EJB应用服务器上,是应用构件(application components),而JavaBeans构件是不可部署的, JavaBeans构件是开发构件,不能被部署为独立的单元。

  3.EJB构件是部署可定制的,使用部署描述符可以在部署EJB时对其运行时配置进行定制,而JavaBeans构件在部署时不能进行定制,JavaBeans构件的定制仅发生在开发阶段,只能利用开发工具创建并组装JavaBeans构件,部署时不能定制

  4.EJB构件是分布式对象,可以被客户应用或者其它EJB构件进行远程访问,而JavaBeans构件不是分布式对象,JavaBeans构件只能在其构成的应用中使用,不能提供远程访问能力

  5.EJB构件对终端用户不可见,运行在服务端,没有人机交互界面,而部分JavaBeans构件对终端用户可见,如GUI应用中使用的按钮构件