黑豹程序员-架构师学习路线图-百科:开启分布式架构开发先河,让Java戴上全球第一的皇冠-EJB

文章目录

  • 1、EJB的传奇
  • 2、什么是 EJB
  • 3、从拥抱到抛弃
  • 4、最终版EJB3.0

1、EJB的传奇

EJB这项技术其实已经消亡了,但为何我还专门单另拿出来讲呢?原因有三。
第一、EJB是J2EE雄霸全球的功臣,它把我们编程推向了分布式架构开发,为开发大型项目做好了铺垫,也是java强于其它语言的一个重要标志。
第二、EJB技术虽然失败了,但是EJB的思想并没有消亡,今天的分布架构、微服务架构都起源于它。
第三、EJB快速消亡的“罪魁祸首”,虽然让J2EE黯然失色,直接“破产”,但它却让Java迎来了第二春,那就是Spring框架。不夸张的说今天学Java其真正学的是Spring框架。如:开发中小项目的基础框架三大框架SSM,两大框架和Spring相关,SpringMVC和Spring。开发大型项目微服务架构SpringCloud,听这名字你就知道,全是基于Spring的东西。而今天如果你应聘java开发岗位,你说你不会微服务,那就地88。

这么传奇吗?就这么传奇,那大家搬好小板凳,快听我给大家来说说。

那一切还得从一本书说起。
下面这本书的作者叫Rod Johnson(罗德·约翰逊),一看发际线就知道是个高手,他就是Spring的作者,一个初出茅庐的人干翻了SUN公司正如火如荼,如日中天,当时的软件企业,甚至世界500强正纷纷膜拜EJB时。他出品了这本书,立刻一片哗然。

在这里插入图片描述

乍一看这本书的名字,Expert one-on-one (专家一对一)J2EE Development without EJB (J2EE开发不用EJB )并没有给人带来太冲击。毕竟关于J2EE的书太多了,而without EJB看上去有点象是故意挑衅EJB的感觉。一本J2EE的书怎么可能会给人带来信念或思维的冲击呢?但意向不到的是,它做到了。

那我们先得说清EJB,在说他怎么干掉的EJB。

2、什么是 EJB

EJB是Enterprise Java Beans技术的简称, 又被称为企业级Java Beans。这种技术最早是由美国计算公司研发出来的。EJB技术的诞生标志着Java Beans的运行正式从客户端领域(单一服务器)扩展到服务器领域(分布式服务器集群)。在电子商务领域运用EJB技术可以简化应用系统的开发, 这是由该技术的结构和特点所决定的。

EJB (Enterprise Java Beans) 是基于分布式事务处理的企业级应用程序的组件。Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。

在这里插入图片描述

在开发分布式系统时, 采用EJB可以使得开发商业应用系统变得容易, 应用系统可以在一个支持EJB的环境中开发, 开发完之后部署在其它的EJB环境中, 随着需求的改变, 应用系统可以不加修改地迁移到其它功能更强、更复杂的服务器上。EJB在系统实现业务逻辑层里面负责表示程序的逻辑和提供访问数据库的接口。

3、从拥抱到抛弃

由于IBM和Sun Microsystems等EJB提倡者力推其前景,起初一些大公司纷纷采用EJB部署他们的系统。然而随后各种问题便接踵而至,对EJB的恶评短时间内激增。

对于初学者,EJB的API显得太过困难;对于许多程序员来说,书写那些必须抛出特定异常的接口并将bean类作为抽象类实现的做法既不直观也不正常。当然,EJB所被赋予的使命,如对象关系映射和事务管理确实有其天然复杂性,但其API之复杂还是令开发人员们觉得望而却步,一些人开始怀疑EJB除了引入了复杂的实现手段以外似乎并未带来什么实际好处。

另外,实际运用中被发现,如果使用EJB来封装业务逻辑会带来性能上的下降。这是因为,最早的EJB规范只允许客户端通过特定协议(如CORBA)进行远程方法调用来调用,即使大部分实际应用根本就不需要分布式计算。直到EJB 2.0才引入了本地接口,以支持可以开发不通过网络就能直接本地调用的EJB系统。

尽管如此,EJB的广泛普及仍然为其复杂度所制约。尽管已经有一些高质量的集成开发工具可以协助开发人员通过自动编码解决一部分重复作业,但这并不能降低学习此项技术的难度。

另一方面,“草根阶层”的编程爱好者们发起了一场旨在使用 “轻量级”技术以代替复杂的EJB的运动。这些技术包括Hibernate(用于提供数据持久化和对象-关系映射)及Spring框架(用于封装业务逻辑)。尽管它们不像EJB那样有巨头支持,但其在庶民间却更加流行,并且也被一些对EJB深感失望的企业所采用。

4、最终版EJB3.0

EJB规范起初的一个主要价值—对分布式应用进行事务管理—在随后的实践中被一致认为几乎没能派上用场。对于企业级应用来说,Spring和Hibernate等简化框架更加实用。因此,EJB 3.0规范(JSR 220)为了迎合这个趋势相比于其前辈进行了一次激进的大跳跃。受到Spring 影响,EJB 3.0也使用所谓的“传统简单Java对象(POJO)”;同时,支持依赖注入来简化全异系统的集成与配置。Hibernate的创始人Gavin King参与了这一新版规范的制订,并对EJB大加提倡。Hibernate的许多特性也被引入到Java持久化API当中,从而取代原来的实体bean。EJB 3.0规范大幅采用Java注释(annotation)来对代码进行元数据修饰,从而消减了此前EJB编程的冗杂性。

但此时已经为时已晚,Hibernate和Spring的成功,让EJB黯然退出市场。
但在我看来,在当时单机服务器就足够的时代,EJB太先进了,相当于牛刀杀鸡不好用太麻烦,再者它没有像今天微服务使用那么轻巧,所以才被弃用。而且Hibernate、Spring还是单机产物,其实并没有胜过EJB分布式的架构。

可这就是历史,太先进太超前的东西不会被立刻接受的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu的EFI分区无法删除

本文解决的问题:双系统装完后需要删除ubuntu的分区,但是EFI系统分区无法删除。 第一步:cmd中输入命令 diskpart 并回车,如图中①; 第二步:在弹出窗口②中依次输入如下命令即可删除EFI分区; /…

移动App安全检测的必要性,app安全测试报告的编写注意事项

随着移动互联网的迅猛发展,移动App已经成为人们日常生活中不可或缺的一部分。然而,虽然App给我们带来了便利和乐趣,但也伴随着一些潜在的安全风险。黑客、病毒、恶意软件等威胁着用户的隐私和财产安全,因此进行安全检测就显得尤为…

什么是USRP软件无线电设备?

什么是USRP软件无线电设备? USRP软件无线电设备提供软件定义的RF架构,可让工程师使用自定义信号处理功能来设计、原型验证和部署无线系统。从基于大型开放式FPGA的经济款到高性能无线电设备,多种硬件可满足您的不同需求。您可以使用LabVIEW或…

施密特正交化

相信大家在平时的期末考试中一定少不了对某某向量组执行标准正交化类型的题目。今天我们从这个题目入手,说明这个如何执行施密特正交化,以及为什么要进行正交化。 一、例子 例子:设 a 1 [ 1 2 − 1 ] a_1\begin{bmatrix}1\\2\\-1\end{bmat…

vulkan SDK安装

文章目录 一. vulcan官网二.安装流程 一. vulcan官网 https://vulkan.lunarg.com/sdk/home#windows 二.安装流程 点击下载 双击下载的*.exe进行安装 点击下一步 点击下一步 选择安装位置,点击下一步 点击全选,选择下一步 勾选同意&#xf…

PTrade财务数据获取函数的问题

前文介绍了PTrade的get_fundamentals函数,可以用于获取股票的财务数据。但在实际应用中,会遇到如下的问题。 前文我们通过将回测时间设置为2023-05-05进行回测调用get_fundamentals,得到如下查询结果: secu_codepubl_dateend_da…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[5]客户端与服务端连接

红队专题 招募六边形战士队员端操作系统SystemInfo类获取系统信息发送系统信息头文件声明头文件调用 未找到来自 OleAcc.dll 的导入LINK 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 端 发送连接->进入主线程->返回socket->…

ps插件Coolorus for Mac中文激活版

Coolorus是一款非常实用的Photoshop插件,它为Photoshop增加了色环配色面板,让设计师可以更直观地选择颜色。同时,Coolorus还提供了多种专业配色方案,如鲜艳色、复古色、日常色等,设计师可以直接套用这些方案&#xff0…

Python中的内存管理:深入分析垃圾回收机制

python中有一个名为refchian的环状双向链表,python运行时创建的所有对象都会添加到refchain中。在refchain中的对象PyObject里都有一个ob_refcnt用来保存当前对象的引用计数器,就是该对象被引用的次数,当对象有新引用时ob_refcnt就会增加&…

SDK 窗口程序创建

目录 Windows 窗口 窗口的基本概念 创建一个窗口的流程 句柄 创建窗口 设计注册窗口类 创建窗口 显示和更新窗口 创建消息循环 消息循环 建立消息循环 窗口过程函数 窗口程序模板(多字节) 窗口程序模板(Unicode) Wi…

零基础学习HTML5(列表、表格、表单)

01-列表 作用&#xff1a;布局内容排列整齐的区域。 列表分类&#xff1a;无序列表、有序列表、定义列表。 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的区域。 标签&#xff1a;ul 嵌套 li&#xff0c;ul 是无序列表&#xff0c;li 是列表条目。 <ul>…

【RTOS学习】信号量 | 互斥量 | 递归锁

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 信号量 | 互斥量 | 递归锁 &#x1f37a;信号量&#x1f964;原理&#x1f964;使用信号量的函数&…

基于springboot实现java学习平台项目【项目源码+论文说明】

基于springboot实现java学习平台演示 摘要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括学习平台的网络应用&#xff0c;在外国学习平台已经是很普遍的方式&#xff0c;不过国内的管理平台可能还处于起步阶段。学习平台具…

使用 Typhoeus 和 Ruby 编写的爬虫程序

以下是一个使用 Typhoeus 和 Ruby 编写的爬虫程序&#xff0c;用于爬取 &#xff0c;同时使用了 jshk.com.cn/get_proxy 这段代码获取代理&#xff1a; #!/usr/bin/env rubyrequire typhoeus require jsondef get_proxyurl "https://www.duoip.cn/get_proxy"respon…

正则表达式[总结]

文章目录 1. 为什么要学习正则表达式2. 再提出几个问题&#xff1f;3. 解决之道-正则表达式4. 正则表达式基本介绍5. 正则表达式底层实现(重要)6. 正则表达式语法6.1 基本介绍6.2 元字符(Metacharacter)-转义号 \\\6.3 元字符-字符匹配符6.4 元字符-选择匹配符6.5 元字符-限定符…

vscode中4个json的区别和联系

在vscode中快捷键ctrlshiftp&#xff0c;然后输入setting&#xff0c;会出现下图几个选项 当不同设置之间出现冲突时&#xff0c;听谁的&#xff1a; Open Workspace Settings(JSON) > Open Settings(JSON) Open User Settings > Open Default Settings(JSON) Open Wo…

WPF实现签名拍照功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

如何理解OSI七层模型?

一、是什么 OSI &#xff08;Open System Interconnect&#xff09;模型全称为开放式通信系统互连参考模型&#xff0c;是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架 OSI 将计算机网络体系结构划分为七层&#xff0c;每一层实现各自…

element-ui中表格树类型数据的显示

项目场景&#xff1a; 1&#xff1a;非懒加载的情况 1&#xff1a;效果展示 2&#xff1a;问题描述以及解决 1&#xff1a;图片展示 2&#xff1a;html <-- default-expand-all 代表默认展开 如果不展开删除就行 --> <el-tableref"refsTable"v-loadin…

Linux_Shell运行原理(命令行解释器)

一般我们叫Linux操作系统&#xff0c;狭义上就是指Linux内核&#xff08;kernel&#xff09;&#xff0c;广义上就是Linux内核Linux外壳程序对应的配套程序&#xff0c;这里我们来详细介绍一下这个“外壳程序”。 在我们使用指令时&#xff0c;这个外壳程序会将我们的解释指令并…