`
mouer
  • 浏览: 100245 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为什么需要EJB

    博客分类:
  • J2EE
阅读更多

来源:http://www.jdon.com/artichect/whyEJB.htm

文章有点老,但是大概意思能够领略.

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



 

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

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

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

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

 

 

 

EJB提供了事务机制

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

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

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

CMP独特的优点

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

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

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

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

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

小结

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

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

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

  补充:什么情况下不需要EJB,在SUN的SECA架构师试卷中回答:小型系统和不需要事务。另外过去那种认为“EJB有性能问题”根本是一种缪误,具体可参考下面有关问题。

相关文章:

J2EE集群原理

为什么需要有态Session Bean

When to not use EJB

关于SPING与EJB的胡言乱语--重和轻永恒的话题

 


相关文章的讨论比较精彩

  • 大小: 7.6 KB
  • 大小: 20.3 KB
分享到:
评论

相关推荐

    实战EJB 实战EJB 实战EJB

    企业JavaBeans (EJB) 是Java平台上的服务器端组件模型,专为构建可扩展、可靠且跨平台的企业级应用程序而设计。通过将业务逻辑与基础架构关注点(如事务管理、安全性、持久性和并发控制)分离,EJB允许开发者专注于...

    EJB方面 ejb pdf

    理论上任何Java类都可能被视为一个Bean,但在实践中,JavaBean通常具备无参数构造函数,并实现了`Serializable`接口以支持持久化。JavaBean类似于COM模型中的本地进程内组件,不具备跨进程访问能力。 - **...

    EJB笔记--介绍了EJB的用处以及编程方法

    什么是EJB EJB(Enterprise JavaBeans)是Java平台的一种企业级组件模型标准,用于构建可重用的企业级应用组件。它由Sun Microsystems制定,并通过Java Community Process (JCP)来规范其版本更新和技术细节。 - *...

    实战角度比较EJB2和EJB3的架构异同

    EJB2的编程模型相对复杂,一个EJB通常需要两个接口(业务接口和远程接口)以及一个Bean实现类。开发者需要手动实现ejbCreate等生命周期方法,这在处理大量EJB时显得较为繁琐。而在EJB3中,这一情况得到了显著改善,...

    EJB白皮书EJB白皮书

    **企业级JavaBeans (EJB) 技术详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的分布式组件模型的关键技术。EJB规范定义了一套标准,允许开发者创建可复用、安全且事务管理的业务逻辑...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    java的ejb.jar包

    javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....

    ejb2.0与ejb3.0的区别

    - **EJB 2.0**:需要为每个实体Bean定义一个Home接口,用于创建和查找Bean实例。 - **EJB 3.0**:取消了Home接口的需求,简化了实体Bean的创建和查找过程。 #### 五、其他变化 - **EJB 3.0**:提供了轻量级的支持,...

    EJB集群EJB集群资料

    EJB集群是EJB技术的一个重要特性,它允许EJB容器(如JBOSS)在多台服务器上分布和复制EJB实例,以实现高可用性和负载均衡。 在给定的示例中,我们看到一个简单的无状态会话Bean(Stateless Session Bean)`...

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....

    EJB中ejb-jar——xml文件说明.pdf

    EJB中ejb-jar文件配置详解 EJB(Enterprise JavaBean)是一种Java技术,用于开发企业级应用程序。EJB容器提供了许多功能,如事务处理、安全认证、资源管理等,以便开发者更方便地开发企业级应用程序。在EJB中,ejb-...

    Idea搭建EJB架构Demo项目源代码

    在Idea中搭建EJB项目,你需要: 1. **创建新项目**:选择"New Project",然后在Java EE选项中选择"EJB"或"Java Web"模板。 2. **配置服务器**:添加支持EJB的服务器,如GlassFish或WildFly。 3. **添加依赖**:...

    EJB3.0规范-EJB3.0 SPECIFICATION

    4. **有状态会话Bean(Stateful Session Beans)**:这些Bean可以保持与特定客户端的会话状态,适用于需要跟踪用户交互的情况。`@Stateful`注解用于定义这类Bean。 5. **实体Bean(Entity Beans)**:EJB3.0中的...

    EJB原理图:EJB工作原理

    - **功能**:当一个EJB部署到容器中时,容器会为该EJB创建一系列的对象来支持其运行。具体来说,对于每个EJB,容器至少会创建以下三个对象: - **EJB对象**:这是实际的业务逻辑实现,比如这里的`HelloBean`。 - *...

    EJB配置部署打包实例

    2. **部署文件**:除了ejb-jar.xml,还需要一个全局的weblogic-ejb-jar.xml(针对WebLogic服务器)或jboss-ejb3.xml(针对JBoss服务器)来指定服务器特定的配置。 3. **部署过程**:将EJB的JAR文件(包含bean类、...

    EJB3 PPT教程

    在EJB3中,SessionBean变得更加轻量级,不再需要XML配置,而是通过注解实现。你可以学习如何定义SessionBean接口、实现类,并使用`@Stateless`或`@Stateful`注解来指定其状态行为。 **二、EntityBean** EntityBean...

    jboss7ejb配置文件

    在Java企业版(Java EE)应用开发中,EJB(Enterprise JavaBeans)是核心组件,用于构建可扩展、安全和事务处理的服务器端应用程序。JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括...

    EJB3.0__EJB3.0

    - **JBoss应用服务器**:EJB3.0需要JBoss4.0或更高版本作为运行环境。 - **Java EE版本**:至少需要Java EE5.0或更高版本来支持EJB3.0规范。 - **开发工具集成**:配置JBoss到IDE(如Eclipse)中,便于开发和调试。 ...

    EJB教程,EJB参考书

    通过上述过程,我们可以看到EJB为开发者提供了一种高效、标准化的方式来构建企业级应用,降低了复杂度,提高了可维护性和可扩展性。然而,学习和掌握EJB技术需要时间,尤其是对于复杂的业务逻辑和系统集成场景,但其...

    EJB基础(学习EJB者必看)

    它可以帮助读者快速理解和掌握EJB的各个方面,从基本概念到高级特性,为开发高效、可扩展的企业级应用打下坚实的基础。对于Java EE开发者来说,深入理解并熟练运用EJB是提高生产力和保证软件质量的关键。

Global site tag (gtag.js) - Google Analytics