EJB 和 without EJB

来源:互联网 发布:淘宝主播实体培训班 编辑:程序博客网 时间:2024/06/09 18:58

            自古有矛就有盾,有正就有邪,中国人讲:“天地万物,阴阳两极.”西方人讲:“辨证唯物主义”。其实本质都是一样,都是说明了事物都有两面。
            以前略略看过EJB的一些资料,就当时不成熟的思想来看,觉得EJB的分布式概念相当好,对于实际工作的情况而言也是蛮实用的一个方法,比如在电力,电信,银行大型行业里面使用这种构架业务层和web服务器层分开,业务层就全放在EJB里面,因为这样安全,而且业务层变动大,就放在这里处理,计算啊也一样,还有数据库操作等等,这就是我个人认为的EJB最好的地方,后来在网上听说大名鼎鼎的Rod Johnson写了一本新书《J2EE.Development.Without.EJB》,老实说作者书名起得好,很有噱头,让人看了产生好奇心,包括我,就我当时想法我完全不能想象如何Without.EJB,我根本想象不到这么好的框架不用还会有更好的框架,报着好奇心我花了一些时间去看了作者提倡的“轻”量级容器spring。
           看完以后我才发现我以前的想法从根本上就错了,其实“轻”量级容器并没有从本质上去颠覆分布式理念,因为分布式就现阶段来讲是一个很好的构架,spring其实只是改变EJB的东西达到去从一些地方优化它的目的,所以正象我说的Without.EJB,其实真的是有噱头的成分在里面.
           EJB的重要的分布式概念和框架没有取代,spring的要取代的是EJB的运行机制,不是那种接口连接的方式,而是要改进的是控制权,不是由应用程序控制,而由外部代码控制,这就是控制反转,后面更进一步该名叫依赖注入,“在运行时(系统开机,USB设备加载),由容器(运行在Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows文件访问组件)。”从概念来看似乎有点空洞,其实就是不同的是程序的调用机制上面,“轻”“重”之分也不是在根本结构,根本思路上面,只是在使用的简化和方便上的不同,一个由配置文件动态加载程序,一个是由两个接口寻找调用会话bean。这从《J2EE.Development.Without.EJB》这本书的第一章也能看出来,在第一章中Rod Johnson罗列了EJB的种种不是(节选如下):
时移世异,自从EJB规范成型以来,很多事情已经变了样:
1.EJB规范中一些部分已经过时。
2.EJB和RMI之间传统的紧密关系开始显得有些不和适宜。
3.EJB最善于实现业务对象分布的体系结构,然而这种体系结构究竟有多大程度的普遍性,如今看来是相当值得怀疑的。(注意这里写的是怀疑,原文写的是“has proved problematic”)。
4.从人们使用EJB的情况也可以EJB的优缺点。大多数开发者和构架师仅仅使用无状态session bean(SLSB)和(如果需要异步调用的话)message-driven bean(MDB)。
5.尽管EJB已经存在五年之久,并且在很多J2EE项目中得到应用,但是很显然,由于他的复杂性,很多开发者仍然没有真正理解它。
6.为了解决EJB存在的问题,EJB规范也在变得日益复杂。
7.EJB是如此复杂,这也就意味着使用EJB的开发效率会相对较低。
8.严格的单元测试和测试驱动开发(Test Driven Development,TDD)正在日益变得流行--这也是情理之中的。
9.对于EJB致力解决的中间件问题,面向方面的程序设计(Aspect Oriented Programming,AOP)的飞速发展为我们指出了一条更为强大--并且很可能更为简单--的解决之道。
10.在大多数时候,源代码的元数据属性(就像.net中所使用的那样)可以非常优雅地取代基于XML的部署描述符--从EJB1.1起,我们就一直在跟这些复杂的XML文件周旋。
根据我们的经验,EJB的失败之处主要有以下几点:
1.EJB并非降低复杂度所必须的,它倒是引入了很多新的复杂度。
2.作为一种持久化机制,entity bean的尝试是彻底失败的。
3.与其他J2EE技术(例如servlet)相比,使用EJB的应用程序更加缺乏不同应用服务器之间的可移植性。
4.尽管EJB承诺提高高度可伸缩性,然而EJB系统的性能常常不够理想,而且EJB也并不是获得可伸缩性所必须的。
5.EJB可能让简单的事情变得困难。
              以上只是部分原文节选,为了不误解作者的意思,建议直接看原作。
              从上面我们不难看出要决大部分都是说明了EJB的不足和缺陷,所以作者发明了spring框架来弥补EJB的不足,而不是从根本上去姘弃它。
              但是遗憾的是:就目前我对于spring的研究也仅仅局限于只研究懂了spring的对配置文件的修改方便调用不同类文件的这个好处,单从这一点好处来看,我个人认为还不足以和EJB相对立,其他spring的方面还要做更多的研究才行,希望有朋友有其他的这方面研究心得也拿出来给我分享,告知我一声。

原创粉丝点击