什么情况下会用EJB?

问题描述

可能是比较老的问题了。我目前的水平还理解,用过EJB的,能不能结合你的项目说说使用EJB后,和不用EJB相比,都带来了哪些好处?在网上查,很多说为了分布式,集群,问题又来了,什么情况下需要分布式呢?Apache+Tomcat也可以做集群啊?(我也没做过,网上看的)。知道的来说说吧,好长时间都没弄清楚的问题。。

解决方案

在设计J2EE应用时,最重要的设计决策之一是用不用EJB,EJB常常被理解为J2EE的核心,但这是不正确的说法,其实EJB只是J2EE提供给我们的选择之一。它在某个领域中适合解决某些问题,但是在许多应用中只起到很细微的作用/价值。当业务需求明确指出需要一个分布式体系结构,而且RMI/IIOP是必然的远程化协议时,EJB给我我们一个标准的实现。我们可把自己的业务对象模型编写成具有远程接口的EJB,并可以使用EJB容器来管理这些EJB生存周期和处理远程引用,这比使用RMI的定制解决方案高级的多,因为RMI要求我们管理服务器端对象的生存周期。如果业务需求没有指出需要一个分布式系统,或者RMI/IIOP 不是必然的远程化协议,是否使用EJB的决策将会变得困难的多。EJB是一种高端的技术,它在解决某些问题非常好,但不应该没有理由地使用它,我们应该冷静客观地看待使用EJB的影响,以及对是否使用EJB的决策将会产生影响的重要考虑.EJB规范的关键目标之一是简化应用代码。EJB2.0规范规定EJB体系结构将使编写应用变得更容易,应用开发人员将不必了解低级事务所和状态管理细节、多线程化、连接池、以及其它复杂的低级API。理论上讲,通过把所有低级问题都推组EJB容器,开发人员能够把他们的精力都投入到业务逻辑,但现实几乎是,使用EJB给应用增加的复杂性与消除的复杂性至少是一样大的。EJB技术对我们实际工作中的影响: · 使用EJB使应用变得更难测试 · 使用EJB使应用变得更难部署 · 复杂的类装入器 · 复杂的部署描述符 · 使用J2EE的大多数挫折与EJB有关,这足以让我们有所重视。 ·使用具有远程接口的EJB会妨碍OO设计的实施 ·不必要地使用具有远程接口的EJB所导致的后果 · 由最小化远程方法调用数量的要求所决定的接口粒度和方法签名。如果业务对象本身是细粒度的(情况常常是这样的),这将导致不自然的设计。 · 对串行化(决定将通过RMI进行通信的对象的设计)的需要。我们必须决定应该随每个可串行化对象一起返回多少数据。还必须编写另外的代码从任何不可串行化的对象中 提取远程客户所需要的数据. · 远程引用时应用业务对象中的不连续性。 (这些缺陷在我们真正需要分布式语义时不适用,当需要分布式时,EJB不是问题的诱因,而将会是分布式应用的一个优秀基础结构。但当不需要分布式时,如果使用EJB会使一个应用变成分布式的,那么使用EJB会有一个致命的结果。这样分布式应用比在单个服务器中应用复杂得多,EJB也就增加了我们可能希望避开的一些额外问题。) · 使用EJB可能会使简单的事情变得很困难。 EJB是一种重量级技术,而且使一些简单问题变成繁重的工作。 · 应用服务器选择的减少 WEB服务器比EJB容器多,而且WEB服务器往往比EJB容器更加容易使用。因此,与EJB相比,WEB应用可以运行在范围较广泛的服务器上或相同服务器的较便宜版本上,且配置、部署非常简单。但如果换成是EJB,那么成本问题,而且EJB容器可能已通过在其它项目中的运用为我们所熟悉。 · 我们要更多的时间来关心和注重实践·EJB 是分布式应用和复杂事务管理问题的一个上佳解决方案。但是,许多应用没有遇到这些问题,EJB在这样的应用中增加了不必要的复杂性。一个EJB解决方案可以比喻为一辆卡车,而一个WEB应用服务可以比喻为一辆小轿车。当我们需要执行一些像搬运大型对象之类的任务时,一辆卡车会被一辆小轿车高效得多。但是,当一辆卡车和小轿车做相同工作时,小轿车的灵活性、更容易操作!

时间: 2024-08-02 04:58:11

什么情况下会用EJB?的相关文章

什么情况下会用到EJB

问题描述 在什么情况下用EJB最合适, 我写过几个web项目,都没有用到ejb,像淘宝用的回事Ejb吗? 解决方案 最最主要的因素就是分布式.

war文件-war和ear有什么区别?分别在什么情况下使用?

问题描述 war和ear有什么区别?分别在什么情况下使用? J2EE应用能打包成war文件和ear文件. 这两个文件有什么区别?什么时候用war?什么时候用ear? 解决方案 .jar/war/ear包的区别 jar/war /ear三种文件,在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式.但是它们的使用目的有所区别: Jar文件(扩展名为. Jar)包含Java类的普通库.资源(resources).辅助文件 (auxiliary files)等 War文件(扩展名

在不操作窗口的情况下触发resize事件

问题描述 在不操作窗口的情况下触发resize事件 function classJudegSize1() { var reallySize=parseInt($(".img_box")[1].naturalWidth); $(window).on("resize", function () { var img_box=parseInt($(".img_box:eq(1)").css("width")) ; var mainWa

php- js在不跳转的情况下向一个页面传递参数

问题描述 js在不跳转的情况下向一个页面传递参数 需求是把textarea传递到savexml.php进行数据保存,但同时我希望页面还留着当前页面.代码如下: <form name=""form1"" id=""form1"" method=""post"" action=""newtest.php""> <input type=

att-ATT7022电能的读取,在没有加信号的情况下也能读到数值

问题描述 ATT7022电能的读取,在没有加信号的情况下也能读到数值 ATT7022电能的读取,在没有加信号的情况下也能读到数值,而且读的数值比加信号时的还要大

请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下)

问题描述 请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下) 请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下)thank in advance 解决方案 https://msdn.microsoft.com/zh-cn/magazine/mt147239.aspx

在什么情况下命令【mv item.1 item.2】能够移动整个子目录树

问题描述 在什么情况下命令[mv item.1 item.2]能够移动整个子目录树 题目:如果item.1和 item.2已经存在,在什么情况下命令 mv item.1 item.2能够移动整个子目录树? A.item.1和item.2是现有子目录 B.只有使用特殊命令选项时C.只有在item.2是空的时候D.只有在item.1是空的时候 在网上找的答案是选:A,我有些疑惑. 我所理解的移动整个子目录树的意思是:将item.1中的文件和目录全部移动到item.2中,而不是把item.1这个目录移

Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值

ajax|服务器|浏览器|刷新 Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值 本节主要讲的是:将text或textarea的值平滑地传递给服务器. 当用户输入text或textarea的值以后,Ajax能将这些值自动的发给服务器.程序等待text的onblur 事件,然后使用request对象向服务器发送数据.在常用的情况是,用户点击一个按钮,然后将 整个form作为一个大的数据包向服务器发送.服务器相应也与此类似.例如,在线测试或者 教程能

不用企业管理器的情况下得知CHECK约束的属性设置

我们知道,在SQL SERVER企业管理器中,在"设计表"状态下,当查看该表的CHECK约束时,会看到CHECK约束有"创建中检查现存数据"."对复制强制约束"."对INSERT和UPDATE强制约束"三个复选框,那么如果不在企业管理器环境下,或者在应用程序中,我们如何得知某个CHECK约束的这三个选项是否选中呢? 我查看了相关系统表的帮助说明,但里面对好多字段的说明都为"保留"."仅供内部使用&