历史疑团之EJB

  在学习Sping框架的过程中,看到过很多次关于EJB的批判。使用了SpringMVC但是并没有真性情般体会到它的优点,所以有必要对传统的Java Bean和EJB来做一些了解,无奈百度搜了很多知识,还是理解的很抽象,并没有在大脑中实例化了这个思想。所以有必要对历史EJB做一番探索,于是就有了这篇文章。

  EJB是企业级java bean,字如其名。每个字都有其取这个名字的因缘,所以就名字先来说说。EJB官方是这样解释的:商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。

  这其中我们主要关注这么几点,我们来逐条剖析:所谓:"业务逻辑" ,我们注意到在EJB 的概念中主要提到的就是"业务逻辑"的封装,而这个业务逻辑到底是什么?说的那么悬乎,其实这个所谓的"业务逻辑"我们完全可以理解成执行特定任务的"类
"。所谓:"将业务逻辑从客户端软件中抽取出来,封装在组件中,运行在一个服务器上",既然我们知道了"业务逻辑"的概念就是执行特定任务的"类",那么,什么叫"从客户端软件中抽取出来"?其实,这个就是把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行。  

  那么,一句话来说EJB就是:"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。EJB 就是将那些"类"放到一个服务器上,用C/S 形式的软件客户端对服务器上的"类"进行调用。

  分析一下EJB的实现技术:EJB 是运行在独立服务器上的组件,客户端是通过网络对EJB 对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB 技术基础正是RMI。通过RMI 技术,J2EE将EJB 组件创建为远程对象,客户端就可以通过网络调用EJB 对象了。
  RMI是什么呢?在理解它之前需要理解两个抽象概念:对象的序列化和分布式计算与RPC。先来说对象的序列化:对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对象。将对象状态转换成字节流之后,可以用java.io 包中的各种字节流类将其保存到文件中,或者通过网络连接将对象数据发送到另一个主机。也就是说:对象的序列化就是将你程序中实例化的某个类的对象,比如,你自定义一个类MyClass,或者任何一个类的对象,将它转换成字节数组,也就是说可以放到一个byte 数组中,这时候,你既然已经把一个对象放到了byte数组中,那么你当然就可以随便处置它了,用得最多的就是把他发送到网络上远程的计算机上了。分布式计算与RPC:RPC 并不是一个纯粹的Java 概念,因为在Java 诞生之前就已经有了RPC 的这个概念,RPC是"Remote Procedure Call"的缩写,也就是"远程过程调用"。在Java 之前的大多数编程语言,如,Fortran、C、COBOL 等等,都是过程性的语言,而不是面向对象的。所以,这些编程语言很自然地用过程表示工作,如,函数或子程序,让其在网络上另一台机器上执行。说白了,就是本地计算机调用远程计算机上的一个函数。将两者结合起来就是RMI,RMI 英文全称是"Remote Method Invocation",它的中文名称是"远程方法调用",它就是利用Java 对象序列化的机制实现分布式计算,实现远程类对象的实例化以及调用的方法。说的更清楚些,就是利用对象序列化来实现远程调用,也就是上面两个概念的结合体,利用这个方法来调用远程的类的时候,就不需要编写Socket 程序了,也不需要把对象进行序列化操作,直接调用就行了非常方便。远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。所以,一句话来说,RMI在序列化和分布式计算上实现了又一层封装。那么RMI的优缺点:优点,这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI 规则设计程序,可以不必再过问在RMI 之下的网络细节了,如:TCP 和Socket 等等。任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。RMI 可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java 哈希表这样的复杂类型作为一个参数进行传递。缺点:如果是较为简单的方法调用,其执行效率也许会比本地执行慢很多,即使和远程Socket机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间需要传递的信息不仅仅包含该函数的返回值信息,还会包含该对象序列化后的字节内容(也即牺牲了效率)。

  EJB正是以RMI为基础的,通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB,什么时候不需要用EJB 了。EJB中所谓的服务集群:RMI 是将各种任务与功能的类放到不同的服务器上,然后通过各个服务器间建立的调用规则实现分布式的运算,也就明白EJB 所谓的"服务群集"的概念。就是将原来在一个计算机上运算的几个类,分别放到其他计算机上去运行,以便分担运行这几个类所需要占用的CPU 和内存资源。同时,也可以将不同的软件功能模块放到不同的服务器上,当需要修改某些功能的时候直接修改这些服务器上的类就行了,修改以后所有客户端的软件都被修改了。
         

仔细观察之后,发现这种配置是有瓶颈的,现在如果想实现各个服务器针对同一个数据库的查询,那么,不管你部署多少个功能服务器,都需要针对一个数据库服务器进行查询操作。也就是说,不管你的"计算"有多么"分布"也同样需要从一台服务器中取得数据。虽然,看起来将各个功能模块分布在不同的服务器上从而分担了各个主计算机的CPU 资源,然而,真正的瓶颈并不在这里,而是,数据库服务器那里。数据库服务器都会非常忙的应付各个服务器的查询及操作请求。因此,通过这个结构图使我们了解到了EJB 根本不能完全解决负载的问题,因为,瓶颈并不在功能模块的所在位置,而是在数据库服务器这里。

那么换成上面这种结构之后,就是把每一个功能服务器后面都部署一个数据库,这样不就解决了上节所说的问题了吗?是的解决了数据库查询负载的问题,然而又出现了新的问题,就是"数据共享"的问题就又不容易解决了。我们发现似乎好像EJB 和开发Web 应用的B/S 结构的系统关系并不大。总结一下:EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。

时间: 2024-11-08 10:14:16

历史疑团之EJB的相关文章

历史小说《雍正皇帝》后感(电视剧雍正王朝)

真没想到开篇是一录杂记.o(∩_∩)o . 本为记录些纯技术的点滴,没想上来开篇第一文就跑题了.貌似与园子内主写技术不一样的路子o(︶︿︶)o 但这只是开篇,暂且就作了.万事开头难,既然迈出了第一步,先记下这篇看似无关技术(确实也无关好像)纯属个人偏好的一本书(应该是一套3本).一部电视剧.权且开个张熟个脸.当然了作为技术性博客,后期会更多的专注于一些“典型”的技术内容. 说说前人的故事,聊聊今日之叙述. 皇位之谜 一提到雍正,围绕其疑团就扑面而来.许多故事也广为流传,随之衍生出诸多的创作品.戏

Web开发技术发展历史

Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互联网".Web是World Wide Web的简称,中文译为万维网."万维网"和我们经常说的"互联网"是两个联系极其紧密但却不尽相同的概念.今天"互联网"三个字已经承载了太多的内涵,提到互联网,我们通常想到的一种战略思维,或者是一种颠覆传统的商

Ejb in action(七)——message与JMS

在我们展开对MDBs的学习之前,我们需要了解message(消息)与JMS(Java Message Service)的概念.我们在Java EE中谈论消息,实际上就是意味着实现一个松耦合的过程,系统组件之间的异步通信. 在开发中,许多组件之间的调用都是同步的,像简单的方法调用.Java的RMI等.而此处的异步调用区别于此.在很多时候,使用异步消息能够提高用户体验. 拿CSDN的注册功能来举例:用户点击注册之后,这时客户端向服务器发送一个请求,服务器进行处理后,将注册成功的提示消息返回给客户,同

上官婉儿墓志还原历史事实

颠覆史书多处记载 揭示生前几大疑团 本报驻陕西记者  赵建兰 她,才貌双全,位居权要,竟然恋上武则天的老情人张昌宗.后又不甘寂寞,与武三思私通,与崔?兄弟相恋.唐中宗立朝,却先后依附韦皇后与太平公主祸乱朝政.唐玄宗李隆基虽慕其才,却终因其淫乱而杀之-- 上官婉儿,这位被武则天重用的"巾帼宰相",是否真如传说中的如此不堪?1月7日,陕西省考古研究院对外公布的上官婉儿墓志全文,披露或者颠覆了很多史书记载的内容,或许会还原一个历史上真实的上官婉儿. 墓志由谁撰写 2013年8月,陕西省考古研

EJB初级篇--EJB组件之会话Bean

上篇博文中我们已经详解介绍了什么是EJB.其实最简单的说:EJB就是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的.而我们常说的企业Bean组件可以分为三种类型:会话Bean.消息驱动Bean和实体Bean.依据应用设计的不同,开发者可以选择适合应用的组件类型.下面几篇博文中我会为大家分别详细的介绍这三种企业Bean组件.本篇博文则就先来介绍介绍会话Bean吧. 首先来介绍一下,什么是会话Bean.会话Bean能够完成客户所要求的业务操作,它是含有业务逻辑的可重用组件,并能够用

java历史

背景 Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的.1995年更名为Java,并重新设计用于开发Internet应用程序.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态Web.Internet计算.从此,Java被广泛

EJB之JPA

在前一篇文章中大概了解了EJB是什么?那么接下来就进一步介绍一下它与JPA有什么样的关系?及什么是JPA?JPA怎样用? 一.是什么? 第一次听说JPA是在EJB视屏中,所以一直感觉他们有不解的渊源.可是经过这一段时间学习和总结发现JPA的作用远远不局限于此. JPA是这样定义的:JPA(Java Persistence API)是Sun官方提出的Java持久化规范.为Java开发者提供了一种对象/关系映射工具来管理Java应用中的关系数据.它的出现主要是为了简化现有的持久化开发工作和整合ORM

深入浅出,了解 Spring 框架和 Spring Boot 的历史

Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一.它目前由大量提供一系列服务的模块组成.包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类.Spring 框架的所有组件都通过依赖注入粘在一起.依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易. 多年来 Spring 框架已变得足够成熟.几乎所有 Java 企业应用需要用到的基础组件都可以在 Spring 框架中找到.但

spring 历史&哲学

历史: 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望. 曾经使用过EJB开发J2EE应用的人,一定知道,在EJB开始的学习和应用非常的艰苦,很多东西都不能一下子就很容易的理解.EJB要严格地实现各种不同类型的接口,类似的或者重复的代码大量存在.而配置也是复杂和单调,同样使用JNDI进行对象查找的代码也是单调