1. 我们不禁要问,什么是"服务集群"?什么是"企业发展"?
现在说EJB 至"服务集群"和"企业发展",然后,说什么是所谓的"服务
集群"和"企业级开发"吧。
这个问题事实上挺关键的。由于J2EE 中并没有说明确,也没有详细的指标或者事例告诉
广大程序猿什么时候用EJB 什么时候不用。于是大家都产生一些联想。觉得EJB"分布式运
算"指得是"负载均衡"提高系统的执行效率。然而。预计非常多人都搞错了,这个"服务群集"
和"分布式运算"并没有根本解决执行负载的问题,尤其是针对数据库的应用系统。

为什么?
我们先把EJB 打回原形给大家来慢慢分析。

2. 把EJB 掰开了揉碎了
我们把EJB 的概念好好的分析一下,看看能发现些什么蛛丝马迹。

3.1 EJB 概念的剖析
我们先看一下。EJB 的官方解释:
商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程。并使用计
算机语言将他们实现。

……
J2EE 对于这个问题的处理方法是将业务逻辑从client软件中抽取出来。封装在一个组
件中。这个组件执行在一个独立的server上。client软件通过网络调用组件提供的服务以实
现业务逻辑。而client软件的功能单纯到仅仅负责发送调用请求和显示处理结果。在J2EE 中。
这个执行在一个独立的server上,并封装了业务逻辑的组件就是EJB(Enterprise Java
Bean)组件。
这当中我们主要关注这么几点。我们来逐条剖析:
剖析1:所谓:"业务逻辑"
我们注意到在EJB 的概念中主要提到的就是"业务逻辑"的封装,而这个业务逻辑究竟是
什么?说的那么悬乎。事实上这个所谓的"业务逻辑"我们全然能够理解成执行特定任务的"类
"。
剖析2:所谓:"将业务逻辑从client软件中抽取出来。封装在组件中……执行在一个服
务器上"
既然我们知道了"业务逻辑"的概念就是执行特定任务的"类",那么。什么叫"从client
软件中抽取出来"?事实上。这个就是把原来放到client的"类"。拿出来不放到client了,放
到一个组件中,并将这个组件放到一个server上去执行。

3.2 把EJB 这个概念变成大白话
变成大白话就是,"把你编写的软件中那些须要执行制定的任务的类,不放到client软
件上了。而是给他打成包放到一个server上了"。
3.3 发现问题了
无论是用"八股文"说,还是用大白话说这个EJB 概念都提到了一个词--"client软件"。
"client软件"?难道EJB 的概念中说的是C/S 软件?
是的。没错!

EJB 就是将那些"类"放到一个server上,用C/S 形式的软件client对server上的"类"进
行调用。
快崩溃了吧!
EJB 和JSP 有什么关系?EJB 和JSP 有关系。可是关系还真不怎么大,至多是在JSP 的
server端调用远端服务上的EJB 类。仅此而已。

.1 EJB 的最底层到底是什么
我们揭开了EJB"八股"概念的真谛,那么。再来分析EJB 的底层实现技术,通过底层实
现技术来分析EJB 的工作方式。

4.2 EJB 的实现技术
EJB 是执行在独立server上的组件,client是通过网络对EJB 对象进行调用的。在Java
中,能够实现远程对象调用的技术是RMI。而EJB 技术基础正是RMI。

通过RMI 技术,J2EE
将EJB 组件创建为远程对象。client就能够通过网络调用EJB 对象了。
4.3 看看RMI 是什么东东
在说RMI 之前。须要理解两个名词:
对象的序列化
分布式计算与RPC
名词1:对象的序列化
对象的序列化概念:对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对
象。

将对象状态转换成字节流之后,能够用java.io 包中的各种字节流类将其保存到文件里,
或者通过网络连接将对象数据发送到还有一个主机。
上面的说法有点"八股"。我们最好还是再用白话解释一下:对象的序列化就是将你程序中实
例化的某个类的对象,比方,你自定一个类MyClass。或者不论什么一个类的对象。将它转换成
字节数组,也就是说能够放到一个byte 数组中。这时候。你既然已经把一个对象放到了byte
数组中。那么你当然就能够随便处置了它了,用得最多的就是把他发送到网络上远程的计算
机上了。如图2 11所看到的。


名词2:分布式计算与RPC
RPC 并非一个纯粹的Java 概念,由于在Java 诞生之前就已经有了RPC 的这个概念,RPC
是"Remote Procedure Call"的缩写,也就是"远程过程调用"。在Java 之前的大多数编程语
言,如,Fortran、C、COBOL 等等,都是过程性的语言。而不是面向对象的。

所以,这些编
程语言非常自然地用过程表示工作,如。函数或子程序,让其在网络上还有一台机器上运行。说
白了,就是本地计算机调用远程计算机上的一个函数。

如图2 12所看到的。


名词3:二者结合就是RMI
RMI 英文全称是"Remote Method Invocation"。它的中文名称是"远程方法调用",它就
是利用Java 对象序列化的机制实现分布式计算,实现远程类对象的实例化以及调用的方法。

说的更清楚些,就是利用对象序列化来实现远程调用,也就是上面两个概念的结合体,利用
这种方法来调用远程的类的时候,就不须要编写Socket 程序了,也不须要把对象进行序列
化操作,直接调用即可了很方便。

远程方法调用是一种计算机之间对象互相调用对方函数。启动对方进程的一种机制,使用这
种机制,某一台计算机上的对象在调用另外一台计算机上的方法时。使用的程序语法规则和
在本地机上对象间的方法调用的语法规则一样。
如图2 13所看到的。

4.4 长处
这种机制给分布计算的系统设计、编程都带来了极大的方便。仅仅要依照RMI 规则设计程
序,能够不必再过问在RMI 之下的网络细节了。如:TCP 和Socket 等等。随意两台计算机
之间的通讯全然由RMI 负责。

调用远程计算机上的对象就像本地对象一样方便。
RMI 可将完整的对象作为參数和返回值进行传递。而不仅仅是提前定义的数据类型。也就
是说。能够将相似Java 哈西表这种复杂类型作为一个參数进行传递。
4.5 缺点
假设是较为简单的方法调用。其运行效率或许会比本地运行慢非常多,即使和远程Socket
机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间须要传递的信息不仅仅
包括该函数的返回值信息。还会包括该对象序列化后的字节内容。
4.6 EJB 是以RMI 为基础的
通过RMI 技术。J2EE 将EJB 组件创建为远程对象,EJB 尽管用了RMI 技术,可是却仅仅需
要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。
但无论怎么说。EJB 的基础仍然是RMI。所以。假设你想了解EJB 的原理。仅仅要把RMI
的原理搞清楚即可了。

你也就弄清楚了什么时候用EJB 什么时候不须要用EJB 了。

5. EJB 中所谓的"服务群集"
既然已经知道了,RMI 是将各种任务与功能的类放到不同的server上,然后通过各个服
务器间建立的调用规则实现分布式的运算,也就明确EJB 所谓的"服务群集"的概念。

就是将原来在一个计算机上运算的几个类,分别放到其它计算机上去执行,以便分担运
行这几个类所须要占用的CPU 和内存资源。同一时候,也能够将不同的软件功能模块放到不同的
server上,当须要改动某些功能的时候直接改动这些server上的类即可了。改动以后全部客
户端的软件都被改动了。

如图2 14所看到的。

6. 这样的部署难道是无懈可击
图2 14所看到的的这个"服务群集"看似"无懈可击",事实上是它这个图没有画完整,我们来
把这个图画完整。再来看看有什么问题没有。

6.1 瓶颈在数据库端
细致观察之后,发现这样的配置是有瓶颈的,如图2 15所看到的。


我们看看图2 15的结构图,如今假设想实现各个server针对同一个数据库的查询。那
么,无论你部署多少个功能server。都须要针对一个数据库server进行查询操作。

也就是说,
无论你的"计算"有多么"分布"也相同须要从一台server中取得数据。尽管。看起来将各个功
能模块分布在不同的server上从而分担了各个主计算机的CPU 资源,然而,真正的瓶颈并不
在这里,而是,数据库server那里。

数据库server都会很忙的应付各个server的查询及操
作请求。
因此。通过这个结构图使我们了解到了EJB 根本不能全然解决负载的问题。由于,瓶颈
并不在功能模块的所在位置。而是在数据库server这里。
6.2 假如分开数据库。数据共享怎么办
有的读者一定会想到以下的这个应用结构。如图2 16所看到的。


就是把每个功能server后面都部署一个数据库,这样不就攻克了上节所说的问题了
吗?是的攻克了数据库查询负载的问题,然而又出现了新的问题,就是"数据共享"的问题就
又不easy攻克了。
6.3 网络面临较大压力。让你的应用慢如老牛
我们再向前翻看看如图2 15所看到的的这样的架构中存在两个网络,一个是"A 网"一个是"B
网",这两个网络是不同的。"B 网"往往是局域网。一般带宽是10M/100M。速度较快。因此
到还好说,然而,"A 网"往往是互联网或者是利用电信网络互联VPN 网或称广域网。

"A 网"
的特点是带宽一般较窄,如ADSL 的网络唯独512K-2M 的带宽,由于广域网互联的成本较
高。所以一般不会有较高的带宽。

而在这个网络上恰恰跑的是功能模块和client软件之间交换的数据,而这部分数据恰恰
优势很占用带宽的。
因此,这个应用架构其执行速度能够想见是多么的慢了。说句不夸张的话,有点想老牛
拉破车一样的慢。

一个如老牛的系统:
眼下在中国互联网做运营商网络管理系统的一个大公司,它的一个早期的网管软件就是
採用了这样的架构来做的C/S 结构的应用系统。
有一次,我作为评估者来对其应用系统进行评估,将其部署到一个非运营商大型的网络
中的时候。便出现了我们上述描写叙述的情况,速度已经到了难以忍受的地步,打开一个流量图。
有时候须要用15分钟的时间才干呈现完整。然而,该系统在开发阶段并没有发现这个问题,
为什么呢?由于,他们没有考虑到应用的实际用户连接网络的复杂性。从而给该公司造成较
大损失,以至于,这个开发架构被终于遗弃。

7. EJB 活学活用,J2EE 不是必须使用EJB
通过上面小节的解说似乎好像EJB 和开发Web 应用的B/S 结构的系统关系并不大,事实上
倒也不然。我们假设把"client程序"理解成某一台server。这样也是能够被应用的,并且,
假设是server互相之间做EJB 的调用的话,也就不存在广域网带宽限制的问题了。
可是,例如以下情况尽量就不要使用EJB 了:
1、较为简单的纯Web 应用开发,不须要用EJB。
2、须要与其它服务程序配合使用的应用。但调用或返回的自己定义的网络协议能够解决
的应用程序,不须要使用EJB。

3、较多人并发訪问的C/S 结构的应用程序。尽量不要使用EJB。

总结:

a.EJB实现原理: 就是把原来放到client实现的代码放到server端。并依靠RMI进行通信。

b.RMI实现原理 :就由Java对象序列化机制,可以实现分布式计算。

c.server簇: 它是通过RMI沟通,连接不同的功能模块server,为了实现一个完全功能。

EJB什么,它真的有这么神奇??的更多相关文章

  1. B站真的是一个神奇的地方,初次用Python爬取弹幕。

    "网上冲浪""886""GG""沙发"--如果你用过这些,那你可能是7080后: "杯具"" ...

  2. 前端深入之css篇|你真的了解“权重”吗?

    写在前面 权重这个概念,相信对许多进行过前端开发的小伙伴来说肯定并不陌生,有时候一个样式添加不上,我们就会一个 !important 怼上去,一切就好像迎刃而解了.但还有的时候,!important也 ...

  3. 【谎言大揭秘】Modin真的比pandas运行更快吗?

    最近看了某公众号文章,推荐了所谓的神器,据说读取速度吊打pandas,可谓牛逼,事实真是这样吗? 来一起揭秘真相. 首先安装包. # pip install ray # pip install das ...

  4. 【原】webpack学习笔记

    之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...

  5. 双栈排序(codevs 1170)

    题目描述 Description Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈 ...

  6. 导出word使用模版

    在我们做我们的小组项目的时候,刚开始的时候我们用到的是Mvc+EF,用上了我们的ITOO框架.在最开始的计划,我们要用到瑞郎报表.可是呢,由于工期原因以及技术暂时没有实现,我们不得不想一个比较折中的方 ...

  7. [纯小白学习OpenCV系列]官方例程00:世界观与方法论

    2015-11-11 ----------------------------------------------------------------------------------- 其实,写博 ...

  8. 对Joint Training of Cascaded CNN for Face Detection一文的几点疑惑

    最近读了Joint Training of Cascaded CNN for Face Detection这篇论文,论文中把之前人脸检测使用到的cascade cnn,从分开训练的模式,改为了联合训练 ...

  9. spring的IOC和AOP

     spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...

随机推荐

  1. Android学习笔记(20):时钟(AnalogClock和TextClock)和计时器(Chronometer)

    时钟文本TextClock继承自TextView.是用于显示当前时间的文本框. TextClock支持的XML属性和相关方法 XML属性 相关方法 说明 android:format12Hour se ...

  2. windows2003 IIS6下安装ISAPI_Rewrite3破解版

    摘抄的https://jingyan.baidu.com/article/ff42efa931a2c0c19e220298.html 非常感谢,我是怕百度经验有一天消失了,以防万一 iis6 ISAP ...

  3. Qt5 编译 & 打包依赖dll发布

    十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍.偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决. 随着“开发平台”和“编译器”版本的逐年升级, ...

  4. linux java配置环境变量

    export JAVA_HOME=/alidata/server/java/jdk1.8.0_65export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME ...

  5. 新版Sublime text3注册码被移除的解决办法

    Sublime Text是风靡世界的文本编辑器,支持多种编程语言,启动时间短,打开文件速度快,插件丰富,让很多程序员爱不释手.但是,对于未注册的Sublime Text, 经常在保存的时候会弹出一个烦 ...

  6. 30行js rem弹性布局适配所有分辨率

    <script> /* # 按照宽高比例设定html字体, width=device-width initial-scale=1版 # @pargam win 窗口window对象 # @ ...

  7. OSGi开发环境的建立

    1 OSGi开发环境的建立 1.1 Equinox是什么 从代码角度来看,Equinox其实就是OSGi核心标准的完整实现,并且还在这个基础上增加了一些额外的功能(比如为框架增加了命令行和程序执行的入 ...

  8. Xcode7 不能使用http网络请求问题解决

    最近使用Xcode 7.0 写代码,发送网路请求提示:  App Transport Security has blocked a cleartext HTTP (http://) resource ...

  9. Eclipse Che安装入门和使用(一)

    Eclipse Che序列博文如下: 安装和调试篇:Eclipse Che安装入门和使用(一) Web进阶篇:Eclipse Che开发Spring Web应用(入门) (二) 本文摘要: Eclip ...

  10. XMPP之安装mySQL--Mac OS(一)

    come from:http://www.cnblogs.com/xiaodao/archive/2013/04/04/2999426.html 一.安装 到MySQL官网上http://dev.my ...