EJB是什么,什么是EJB

时间:2022-06-09 11:35:24

一、什么是EJB。

EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。后面还有一堆下面再仔细分析。我相信在这么写下去,你就要关闭页签了。
尼玛...什么意思?
好吧,也许你只是来看看EJB是不是适合你的应用场景。如果看到底才发现适合,浪费时间了。

二、应用场景

比较适合:规模大、扩展性高、伸缩性强、多形态客户端(C/S,或者C/S、B/S混合)的应用。
不太适合:纯B/S结构的Web应用;请求、返回、调用能通过自定义协议解决的应用;超大访问并发量的应用。

三、继续什么是EJB。

接“后面还有一堆”。EJB定义。
商务软件的核心部分是它的业务逻辑。 业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中 抽取出来, 封装在一个组件中。这个组件 运行在一个独立的服务器上,客户端软件 通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。
下面我们来逐句分析
业务逻辑:所谓业务逻辑,并没有什么高大上,就是你平时写的业务逻辑,完全可以翻译 成执行特定任务的"类"
抽取、封装、在独立服务器上运行:把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行。
下面就没有什么好分析的了,把EJB翻译成大白话就是:
把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了,通过网络访问。
等等等等,听上面的意识,难道EJB 的概念中说的是C/S 软件?
是的,没错,你说的对。
很多人没有看到这一行,直接关闭了页签。
那么EJB和JSP一点关系都没有嘛?
EJB 和JSP 有什么关系?EJB 和JSP 有关系,但是关系还真不怎么大,至多是在JSP 的服务器端调用远端服务上的EJB 类,仅此而已。


以上只是简单解释了EJB是什么,想深入了解,请搜索更深入的文章。


原理?这不就是原理吗。大白话显得不高端么?
好吧,客户端是通过网络对EJB 对象进行调用的,在Java中,能够实现远程对象调用的技术是 RMI,也正是EJB技术的基础。
通过RMI 技术,J2EE将EJB 组件创建为远程对象,客户端就可以通过网络调用EJB 对象了。

四、关于RMI

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
这下明白了吧,没明白?至少高端了吧。
说明白一点:RMI使用Java语言接口定义了远程对象,它集合了Java 序列化和Java 远程方法协议( Java Remote Method Protocol)。
还是不明白?下面一点点来分析。

四点一

序列化概念:对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对象。将对象状态转换成字节流之后,可以用java.io 包中的各种字节流类将其保存到文件中,或者通过网络连接将对象数据发送到另一个主机
大白话就是: 你自定一个类MyClass,或者任何一个类的对象,将它转换成字节数组,那么你当然就可以随便处置了它了,用得最多的就是把他发送到网络上远程的计算机上了。

四点二

远程方法调用:本地计算机调用远程计算机上的一个函数或者说函数

总结:利用对象序列化来实现远程调用

四点三

优点

这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI 规则设计程序,可以不必再过问在RMI 之下的网络细节了,如:TCP 和Socket 等等。任意两台计算机之间的通讯完全由RMI 负责。调用远程计算机上的对象就像本地对象一样方便。RMI 可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java 哈西表这样的复杂类型作为一个参数进行传递。

缺点 

如果是较为简单的方法调用,其执行效率也许会比本地执行慢很多,即使和远程Socket机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间需要传递的信息不仅仅包含该函数的返回值信息,还会包含该对象序列化后的字节内容。4.6 EJB 是以RMI 为基础的通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB 什么时候不需要用EJB 了。

EJB 是以RMI 为基础的

通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB 什么时候不需要用EJB 了。