近期的项目中使用了EJB。当时就仅仅知道怎么用,没有深入的去理解。当完毕这个项目之后。再回想项目中使用的技术、框架以及工具的时候,突然感觉对EJB这个概念非常是模糊,于是上网搜一些资料。可是,非常多的资料都是“官方语言”。没有我想要的答案,可是机缘巧合下,发现了一篇可以给我解惑的文章。这里就节选一部分(查看全文)。

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上的"类"进行调用。

结束语:我认为文章中的“把你编写的软件中那些须要运行制定的任务的类,不放到client软

件上了,而是给他打成包放到一个server上了”这句话就是我想要的。

用通俗易懂的语言把那些晦涩难懂的“官方语言”解说清楚,这也是一种能力。

EJB是什么?(节选)的更多相关文章

  1. NetBean 8 创建EJB

    一. 介绍 百度了一下关于在NetBean开发环境里创建EJB的教程,没有找到好的例子,2天的调试过程,写下来帮助后人. EJB (Enterprise Java Bean) 是一套高扩展性的开发企业 ...

  2. J2EE基础之EJB

    J2EE基础之EJB 1.什么是EJB?       EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB) ...

  3. 2.一个EJB的小Demo

    新建一个java普通项目即可 这里用到了Jboss,需要安装Jboss,然后进入jboss-4.2.3.GA\client目录,拷贝所有的jar包到本项目的lib下. 3个接口分别如下所示: publ ...

  4. 1.认识EJB

    什么是EJB?1. Enterprice JavaBeans(EJB)是一个用于分布式业务应用的标准服务端组件模型. . 采用EJB架构编写的应用是可伸的.事务性的.多用户安全的. . 采用EJB编写 ...

  5. java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead

    java.lang.IllegalStateException: Not allowed to create transaction on sharedEntityManager - use Spri ...

  6. EJB之Timer

    EJB Timer 要么: Annotation @Schedule 或者方法前声明@Timeout 要么: 在部署描述中定义timeout-method 如果是使用@Schedule, Timer在 ...

  7. EJB的调用

    EJB调用.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border ...

  8. EJB 简介

    EJB: 被称为java企业bean,服务器端组件,核心应用是部署分布式应用程序.用它部署的系统不限定平台.实际上ejb是一种产品,描述了应用组件要解决的标准 标准:   可扩展 (Scalable) ...

  9. EJB初识(通熟易懂)

    转载自http://blog.csdn.net/jojo52013145/article/details/5783677,讲的很透彻,佩服,膜拜学习 1. 我们不禁要问,什么是"服务集群&q ...

随机推荐

  1. zoj Burn the Linked Camp (查分约束)

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  2. Vue之$set使用

    背景 后端参与前端开发的小白,在开发过程中遇到了如下情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. ...

  3. PHP开发环境配置系列(四)-XAMPP常用信息

    PHP开发环境配置系列(四)-XAMPP常用信息 博客分类: PHP开发环境配置系列 xamppphp 完成了前面三篇后(<PHP开发环境配置系列(一)-Apache无法启动(SSL冲突)> ...

  4. 微软官方的精简版Windows 7——Windows Thin PC

    Windows Thin PC是微软的Window 7的精简版本,它的一个非常明显的特点是系统资源占用小.如下是官方的系统配置需求: CPU:    主频1 GHz 内存:    1GB(实际占用约5 ...

  5. 去掉wget烦人的 “eta(英国中部时间)” 提示

    gentoo 里的 wget ,从1.12版本开始,就一直有个不影响功能的小毛病:由于中文翻译的失误,进度提示的时候,会被拉成很多行.原因就是原来英文的ETA这3个字母,被翻译成了 “eta(英国中部 ...

  6. python pep8编码风格学习记录(转)

    简要归纳 每个缩进层级使用4个空格. 每行最多79个字符. 顶层的函数或类的定义之间空两行. 采用ASCII或UTF-8编码文件 在文件顶端,注释和文档说明之下,每行每条import语句只导入一个模块 ...

  7. .Net强大的列表控件XPTable [转]

    .Net强大的列表控件XPTable http://blog.csdn.net/bodybo/article/details/7359531 XPTable的大名,想必C#开发的人都有所耳闻,使用下来 ...

  8. 排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现

    以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数 ...

  9. Java 中 ConcurrentHashMap 原理分析

    一.Java并发基础 当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题. 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1 ...

  10. Java源码中遇到的一些问题(更新中)

    1子类和父类实现同样的接口,这样做有什么意义吗? 举例:Vector和AbstractList的类签名 public class Vector<E> extends AbstractLis ...