一、什么是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 了。

EJB是什么,什么是EJB相关推荐

  1. ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?

    ejb能调用另一个ejb吗 在之前的文章( 此处和此处 )中,我展示了当服务器负载沉重时,创建非阻塞异步应用程序可以提高性能. EJB 3.1引入了@Asynchronous批注,用于指定方法将在将来 ...

  2. EJB是什么Java使用EJB容器的详细概述

    EJB是什么 博客分类: java EJB  最近项目中接触到EJB,但对EJB不是很了解,于是网上找了些资料参考,下面这篇是个人感觉讲的比较清晰的,遂转载一起参考,文章转自https://www.c ...

  3. [EJB:011008]Unable to bind EJB Home Interface to the JNDI name: BusinessDelegateBean.

    weblogic部署应用,真的只部署了这么一个应用,其他没找到任何东东,可就是报错,aready in use   . 求高人指导  2014-08-04 控制台报错如下: <2014-8-4 ...

  4. ejb能调用另一个ejb吗_EJB 3词汇表

    ejb能调用另一个ejb吗 版本1.1.2,最新更新17.07.2006. 这是EJB 3中引入的新术语和概念的基本词汇表.该词汇表使诸如(IoC),按异常配置,POJO,POJI,依赖注入,可嵌入对 ...

  5. EJB基础三 有状态EJB

    有状态EJB其实是类似于CDI中的依赖作用域.就是你需要一个有状态EJB的时候,就会新建一个有状态EJB.因为根据需求创建的,所以每个请求都有一个,这样才可以保存状态,故成为有状态EJB. 无状态EJ ...

  6. javabean和EJB的区别

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以 ...

  7. EJB与JAVA BEAN_J2EE的异步消息机制

    EJB与JAVA BEAN_J2EE的异步消息机制 EJB与JAVA BEAN的区别 Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个 ...

  8. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  9. EJB究竟是什么,真的那么神奇吗??

    1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...

  10. EJB学习(四)——Enterprise Bean(企业Bean)和Entity Bean(实体Bean)

        一.为什么使用EJB ? 企业Bean执行在EJB容器中.企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式能够 ...

最新文章

  1. ARM的突破:超级计算机和Mac
  2. 【ACM】Uva 455
  3. instance-based与model-based 区别
  4. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符
  5. onSingleTapUp()和onSingleTapConfirmed()的区别
  6. 加入域时出现以下错误 登陆失败 该目标账户名称不正确_Windows 10 20H1新加入的这些功能,你应该用得上...
  7. 三维点云学习(5)5-实现Deeplearning-PointNet-2-classfication
  8. python elem_Python
  9. Qt + GDAL 写入矢量图层 shp
  10. python flask智能租房项目——详情页
  11. python 等值面多边形平滑_三次贝塞尔曲线平滑多边形
  12. Kafka高性能之页缓存(page cache)使用
  13. AutoCAD Civil 3D坐标几何(COGO)输入
  14. FFmpeg 工具:音视频开发都用它,快@你兄弟来看丨音视频工具
  15. 华为Atlas200DK的环境部署与运行demo(人脸识别)
  16. 内置DSP的数字音频功放芯片优势?
  17. 基于springboot大学校园防疫与服务系统毕业设计源码111556
  18. java wechat_Java调用WeChat's API总结
  19. 用MATLAB画混淆矩阵 --2018/11/24
  20. 流量卡之家:中国电信联合华为实现全球首个5G超级上行网络覆盖

热门文章

  1. C# ASP.NET WebApi入门
  2. 借助WinPE进行Windows系统安装
  3. WinZip for Mac注册版
  4. Linux下oracle数据库备份方案
  5. 树莓派Pico 开机自动运行程序
  6. 如何通过Dropbox访问iPad上的电子书库
  7. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  8. 计算机组装与维护试题精选,《计算机组装与维护》精选试题及答案
  9. python实现搜索功能_python实现百度识图搜索功能
  10. 26个英语字母表及字母音标