为什么要使用EJB?

  为什么要使用EJB?

板桥里人 http://www.jdon.com 2004/03/08

  首先,我们必须明确,为什么要使用J2EE?J2EE优点是什么?使用J2EE的主要原因是多
层结构,传统的两层C/S结构难于维护,稳定性极差,界面代码和数据库代码混淆在一起,
牵一动百,多层结构使得界面和数据库完全分离,并且诞生了中间件这样的技术,如下图:

Web+EJB能组成真正的多层结构

  为什么使用EJB我原先认为这不是一个讨论的话题,因为EJB是J2EE重要的组成部分,可
以说没有EJB的J2EE只是一种Web系统,这样的系统非常容易丧失了多层结构的大部分优点(
仔细想想那些混合多种层次功能JavaBeans和传统两层结构有什么区别?)。

  当然,可以人为地在Javabeans之间进行层次划分,例如Hibernate算数据持久层,某些
JavaBeans是业务核心层,但是因为都是普通 JavaBeans,这种划分没有一种强制性和明显
标志性,这样的系统更换了主创人员或设计师,可能就会被新的程序员修改得非常混乱。

  我们先看看一个包含EJB的J2EE系统是如何清晰地表达层次。如下图:

  Web完全只是一个MVC模式的实现,关键业务核心是在EJB的服务层实现,这样做的优点
是,Web只负责界面相关部分,因为,如果是一个智能客户端,如Swing或J2ME,在不需要修
改任何业务核心的情况下能够方便地更换。同样,提供Web Services功能,也只是在 Web层
修改,不会涉及EJB方面的修改,同样保证了系统的稳定性,保证了系统升级和未来的扩展
性。

  如果不使用EJB,在EJB服务层实现的业务核心将由普通JavaBeans实现,使用何种架构
或设计能够保证负责MVC的JavaBeans和负责业务核心的JavaBeans清晰地分开,又如何保证
在新的程序员不会破坏和打乱你精心布局的JavaBeans架构?
EJB提供性能优化支持

  最主要的是性能问题,由于以前国内中文Java网站有些人弯曲EJB,认为EJB性能低,其
实这是一种非常肤浅错误的认识,我们首先看看在一般Java环境中是如何提高性能。

  假定一个JavaBeans为A,那么一般使用这个JavaBeans命令如下:

  A a = new A();

  但是,在高访问量的环境中,new A()其实是很费时消耗系统性能的,因此,能不能在
软件系统启动时候就预先建立一些对象,这样,系统运行时,从这些已经生成的对象池中借
用一个,这样,就无需在使用时进行New,节约了开销,提高了性能,因此,真正成熟性能
解决方案都是需要对象池等支持。

  在一个纯Web结构的系统(也就是只能运行在Tomat环境中),例如Struts + Hibernat
e等这样的系统,除非自己动手做,一般是没有对象池技术支持的,因此他们的性能只能算
是Demo演示版本的性能,根本无法承受大容量并发访问,也无法称为一个成熟的系统,所以
,我们研究成熟的开源Web系统,如Jive、OFBize,LifeRay等,他们都在Web层拥有自己的
对象池和缓存池。

  对象池和缓存机制是J2EE必须的吗?当然,是所有成熟系统必须的,Windows系统如果
去掉缓存将会变得怎样?

  自己动手开发对象池和缓存机制并不是一件简单的事情,需要对多线程以及同步锁等底
层原理有深层次的把握,这其实也是一门非常深入的Java研究分支,所以,你可以抛开你的
客户焦急的催促,精心研究开发自己的对象池和缓存池。

  但是,EJB容器(如JBoss)已经提供了对象池和缓存机制,所以,没有事务机制的无状
态Session Bean的性能肯定要强于普通JavaBeans。EJB容器不但在单机中提供了对象池和缓
存,而且可以跨服务器实现动态负载平衡,这些都无需开发者自己开发任何软件代码,结构
如下:

EJB组件能提供真正的可重用框架

  每一个jar包代表一个EJB组件,一个系统可以由多个可重用的EJB组件构成,例如:树
形结构EJB组件;自增序号EJB组件;用户资料EJB组件等,这样的EJB组件可以象积木一样搭
配在大部分应用系统中,提高了系统的开发效率,保证了开发质量。

  下图是某个新的具体系统时应用到的EJB组件图,在这个新的应用中,由于使用了以前
大量可重用的EJB组件,新的开发工作基本集中在界面设计和流程安排上:

EJB提供了事务机制

  事务机制对于一些关键事务是很重要的,例如ATM机提款,提款有多个动作:修改数据
库以及数钱等,如果这其中有任何一个环节出错,那么其它已经实现的操作必须还原,否则
,就会出现,提款人没有拿到钱,但是卡上已经扣款等不可思议的事情发生。

  EJB提供的事务机制非常周全,但事务机制带来的缺点是性能的降低,因此,有些人认
为EJB很重,因为在实际应用中,有的用户系统可能不需要事务机制,只是需要EJB提供的性
能优化机制,这样,如果使用EJB,就象叫一个人来背东西,他除了背着我要的东西外,还
背着我不要的东西。

  除非你是一个完美主义,在一般企业应用或数据库系统应用中,EJB不会对你构成很重
的包袱。
CMP独特的优点

  开源以及一些数据库持久层技术崇拜者,一直抨击CMP,认为CMP慢无用,实际最大的问
题是他们的设计和使用问题。

  由于EJB容器(如JBoss)对CMP实现有事务机制的缓存优化,因此,CMP特别适合多个用
户同时更新同一个数据源的情况,CMP这种严格的事务完整性保证多个用户同时操作一个数
据记录时,能够保证性能优化和数据的完整性,如果这个数据记录是是软件系统的状态标志
,它的状态会影响系统中很多的环节,那么状态更改的重要性不言而喻。

  如果没有事务完整性支持,你的软件系统在用户访问量变大,就会变得发生各种不可能
发生的逻辑错误,查看程序逻辑是正确的,那么问题出在哪里?出在数据完整性上。

  由于每个CMP在内存中都有一个缓存,在实际应用中,如果使用CMP批量读数据库数据,
几万条查询完毕,内存中充满了几万条CMP缓存,如果这时你的 EJB容器设置不当(如使用J
Boss缺省配置),那么JVM的垃圾回收机制就会频繁启动,导致你的系统变慢甚至死机,这
也是一些人抨击CMP慢的原因所在,其实他们使用方法不当,或者没有正确配置EJB容器CMP
缓存。

  对于这种情况,根据J2EE核心模式,推荐使用DAO+JDBC方式。
小结

  除非你对设计模式非常精深,能够将自己系统中的JavaBeans使用模式或某种框架进行
固定分层,同时,你孜孜不倦研发出对象池,又熟练于JTA等事务机制,你可以选择没有EJ
B的纯Web结构,就象Jive、OFBiz那样。当然还有一个前提,老板不懂或者非常有挑战性(
做与IBM SUN 微软齐名的公司和技术)。

  不要再被TSS那些狂热的开源先生误导,他们有时间有保障可以做他们喜欢的事情,作
为专业的J2EE程序员,按照J2EE标准去学习去行动,也不要认为,只要使用了J2EE其中某个
技术如Jsp或JavaBeans就心安理得认为自己的系统是J2EE了。

  当然,我并不是说纯Web系统不能实现多层结构,但是至少在很多方面没有Web+EJB结构
完善和清晰,所以,EJB不是J2EE可以忽视的部分,而是主要的重要的部分,重要业务功能
核心都封装在EJB中,相反Web层是一种次要的、和界面相关的层次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: EJB(Enterprise Java Beans)是一种用于开发企业级应用的Java技术,适合用于以下场景: 1. 需要在分布式环境中部署的应用:EJB提供了分布式组件的支持,能够在不同的服务器上部署不同的EJB组件。 2. 需要高度可靠性和安全性的应用:EJB提供了事务管理、安全性等方面的功能,可以保证应用的高可靠性和安全性。 3. 需要支持高并发的应用:EJB提供了多线程和并发控制的功能,能够支持高并发的应用。 而Fractal是一种用于构建复杂系统的框架,适合用于以下场景: 1. 复杂系统的构建:Fractal提供了一种用于构建复杂系统的方法,使得系统更加结构化、可维护性和可扩展性更高。 2. 组件化设计:Fractal提倡组件化的设计方法,使得系统中的各个部分能够独立开发、测试和部署。 3. 软件复用:Fractal提供了一种用于软件复用的方法,使得系统中的组件能够多次使用,提高了软件开发的效率。 ### 回答2: 在日常工作或者生活场景中,EJB(Enterprise JavaBeans)适合使用于中等到大型企业级应用。EJB提供了一种开发分布式、可伸缩和可维护的Java应用的标准,它适用于需要处理复杂业务逻辑并且需要高度可靠性和安全性的应用。 EJB适用于以下场景: 1. 企业级应用:如电子商务平台、银行或保险系统等,涉及许多业务流程和复杂的数据处理。 2. 多层架构:EJB架构支持将应用程序划分为多个层次,包括客户界面、业务逻辑和数据持久化层。 3. 高并发性和事务处理:EJB通过容器管理事务和并发性,确保应用程序的数据完整性和一致性。 4. 安全性需求:EJB提供了一套丰富的安全功能,包括基于角色的访问控制和数据加密等。 而Fractal适合使用于构建分布式系统和面向服务的应用。Fractal是一种面向组件的分布式计算模型,它可以将应用程序划分为多个自治组件。每个组件有自己的接口、状态和行为,可以独立管理和部署。 Fractal适用于以下场景: 1. 基于服务的体系结构:Fractal允许将应用程序划分为服务组件,这些组件可以在网络上进行分布和组合。 2. 分布式系统:Fractal提供了用于管理和通信的机制,使分布式系统的开发和运行更容易。 3. 可插拔的架构:Fractal的组件可以动态加载和卸载,以实现灵活的系统组装和扩展。 4. 横向扩展:Fractal支持组件的水平复制,使得应用程序可以根据需求动态地增加和移除组件。 总的来说,EJB适合于构建复杂的企业级应用,而Fractal适合于构建分布式系统和面向服务的应用。具体选择哪种技术取决于需求的复杂性、性能要求和可扩展性。 ### 回答3: 在日常工作或生活场景中,适合使用EJB的应用是那些需要进行分布式事务管理和企业级应用开发的场景。EJB(Enterprise JavaBeans)是一种Java技术,用于开发分布式应用,它提供了事务管理、远程访问、持久性和安全性等功能。因此,当应用需要处理大量并发用户、访问多个数据源、进行事务处理等复杂业务逻辑时,EJB是一个合适的选择。例如,银行系统、电子商务平台、物流管理系统等都可以使用EJB来实现。 而适合使用Fractal的应用是那些需要构建灵活可扩展、模块化和可重用组件的场景。Fractal是一种面向组件的中间件架构,它支持组件的动态部署、组装和交互。因此,当应用需要动态添加、替换或升级功能模块,以适应不断变化的需求时,Fractal是一个合适的选择。例如,智能家居系统、智能交通管理系统、物联网平台等都可以使用Fractal来构建灵活可扩展的组件化架构。 总的来说,EJB适合处理复杂的商业逻辑和分布式事务管理,而Fractal适合构建灵活可扩展的组件化架构。具体选择哪种技术取决于应用的需求和场景的特点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值