What’s EJB
EJB => Enterprise Java Beans
直译:企业 Java Beans
EJB 的官方解释:
商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。
所谓:"业务逻辑" 我们注意到在EJB 的概念中主要提到的就是"业务逻辑"的封装,而这个业务逻辑到底是什么?说的那么悬乎,其实这个所谓的"业务逻辑"我们完全可以理解成执行特定任务的"类"。
剖析2:所谓:"将业务逻辑从客户端软件中抽取出来,封装在组件中……运行在一个服务器上" 既然我们知道了"业务逻辑"的概念就是执行特定任务的"类",那么,什么叫"从客户端软件中抽取出来"?其实,这个就是把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行。
How to Do
从上面的分析中,可以得知,做法是:“把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了”。
不管是用"八股文"说,还是用大白话说这个 EJB 概念都提到了一个词 客户端软件。客户端软件?难道 EJB 的概念中说的是C/S 软件?
是的,没错!
EJB 就是将那些"类"放到一个服务器上,用 C/S 形式的软件客户端对服务器上的"类"进行调用。
Principle of EJB
再来分析 EJB 的底层实现技术,通过底层实现技术来分析EJB 的工作方式。
EJB 是运行在独立服务器上的组件,客户端是通过网络对EJB 对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB 技术基础正是RMI。通过RMI 技术,J2EE 将EJB 组件创建为远程对象,客户端就可以通过网络调用 EJB 对象了。
什么是 RMI ?点这里
优点与缺点
优点
这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI 规则设计程序,可以不必再过问在RMI 之下的网络细节了,如:TCP 和Socket 等等。任意两台计算机之间的通讯完全由RMI 负责。调用远程计算机上的对象就像本地对象一样方便。RMI 可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java 哈西表这样的复杂类型作为一个参数进行传递。
缺点
如果是较为简单的方法调用,其执行效率也许会比本地执行慢很多,即使和远程Socket机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间需要传递的信息不仅仅包含该函数的返回值信息,还会包含该对象序列化后的字节内容。
EJB 是以 RMI 为基础的
通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB 什么时候不需要用EJB 了。
When Use It
通过上面小节的讲解似乎好像 EJB 和开发 Web 应用的B/S 结构的系统关系并不大,其实倒也不然。我们如果把"客户端程序"理解成某一台服务器,这样也是可以被应用的,而且,如果是服务器互相之间做 EJB 的调用的话,也就不存在广域网带宽限制的问题了。但是,如下情况尽量就不要使用EJB 了:
- 较为简单的纯Web 应用开发,不需要用EJB。
- 需要与其他服务程序配合使用的应用,但调用或返回的自定义的网络协议可以解决的应用程序,不需要使用EJB。
- 较多人并发访问的C/S 结构的应用程序,尽量不要使用EJB。
After All
-
EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。
-
RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。
-
服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。