POJO应用架构:Spring与EJB 3.0的对比-Java基础-Java-编程开发

Fritzing0.9.10下载安装和简单使用 Fritzing 作为一款电子设计自动化软件,其画图用于导入到论文和文档,清晰好看,能解决用相机拍实物照片杜邦线很乱的痛点。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

  爱因斯坦曾经说过:"每件事物都应该尽可能简单,而不是更简单"。的确,对科学真理的追求都是为了简化理论的根本假设,这样我们才能处理真正麻烦的问题。企业级软件的开发也是这样的。

  简化企业级软件开发的关键是提供一个隐藏了复杂性(例如事务、安全性和永续性)的应用框架。良好设计的框架组件可以提升代码的重复使用(reuse)能力,提高开发效率,从而得到更好的软件质量。但是,目前J2EE 1.4中的EJB 2.1框架组件被人们普遍认为是设计较差的和过于复杂的。Java开发者对EJB 2.1很不满,他们已经试验了多种其它的用于中间件服务传送的方法。最引人注目的,下面两个框架组件已经引起开发者的巨大兴趣和积极的反映。它们很可能成为未来企业级Java应用程序可供选择的框架组件。

  · Spring框架组件是一个流行的,但是非标准的开放源代码框架组件。它主要是由Interface21 Inc.公司开发和控制的。Spring框架组件的架构是基于依赖注入(DI)设计模式的。Spring可以单独地或者与现有的应用程序服务器一起工作,它大量地使用XML配置文件。

  · EJB 3.0框架组件是一个标准的框架组件,由Java社区组织(JCP)定义,并受到所有主流的J2EE厂商支持。预发布的EJB 3.0规范的开放源代码和商业实现都可以在JBoss和Oracle上看到了。EJB 3.0大量使用Java注释(annotation)。

  这两个框架组件的核心设计理念是相同的:两者的目标都是把中间件服务传递给松散耦合的简单旧式Java对象(POJO)。这些框架组件通过在运行时截取执行内容或向POJO注入服务对象,把应用程序服务与POJO捆绑在一起。POJO本身不关心捆绑的过程,并且对框架组件几乎没有依赖。其结果是,开发者可以聚焦于业务逻辑,个人可以在没有框架组件的情况下测试他们的POJO。此外,由于POJO不需要从框架组件中继承或实现框架组件接口,开发者建立继承结构和构建应用程序的时候都有高度的灵活性。

  但是,尽管两者的设计理念是相同的,它们传递POJO服务时却采用了完全不同的方法。尽管目前已经出版了大量的图书和文章来把Spring或EJB 3.0与EJB 2.1进行对比,但是它们都没有对Spring与EJB 3.0之间的差异进行认真的研究。在本文中,我将研究Spring和EJB 3.0框架组件之间的关键差异,并讨论它们的优缺点。本文的主题也可以应用在其它一些名气稍小的企业级中间件框架组件上,因为它们都聚焦于"松散耦合的POJO"设计。我希望本文能够帮助你选择符合需求的最佳的框架组件。
  厂商无关性(Independence)

  开发者选择某种Java平台的一个最重要的理由就是该平台的厂商无关性。EJB 3.0是一个开放的、标准的、具有厂商无关性的平台。EJB 3.0规范是由企业级Java团体中所有主流开放源代码和商业厂商开发和支持的。EJB 3.0框架组件把开发人员与应用程序服务器实现(implementation)隔离开来了。例如,尽管JBoss的EJB 3.0实现是基于Hibernate的,而Oracle的EJB 3.0实现是基于TopLink的,但是开发人员并不需要学习Hibernate或TopLink的特殊API,就可以让他们的应用程序在JBoss和Oracle上运行。厂商无关性把EJB 3.0框架组件与其它的POJO中间件框架组件区分开来了。

  但是,很多EJB 3.0的批评家迅速指出,在写这篇文章的时候,EJB 3.0规范还没有达到最终发表的版本。在EJB 3.0被所有主流的J2EE厂商采用之前可能还需要一到两年时间。但是,即使你的应用程序服务器还没有自然地(natively)支持EJB 3.0,你还是可以通过下载和安装一个"嵌入式的" EJB 3.0产品,在服务器上运行EJB 3.0应用程序。例如,JBoss嵌入式EJB 3.0产品是开放源代码的,可以在任何与J2SE-5.0兼容的环境中(例如,在Java应用程序服务器中)运行。它现在正在进行beta测试。其它的厂商也可能很快发布他们的嵌入式EJB 3.0产品,特别是用于规范的"数据永续性"部分的产品。

  另一方面,Spring一直是非标准的技术,而且在可以预见的未来它仍然是这样的。尽管你可以把Spring框架组件与任何应用程序服务器一起使用,但是Spring应用程序都被"锁定"在Spring自身和你所选择的集成到Spring中的特定服务中了。

  · 尽管Spring框架组件是一个开放源代码项目,但是它仍然拥有配置文件的专利XML格式和专利编程接口。当然,这类"锁定"发生在任何非标准的产品上,Spring也不例外。但是它却造成了:你的Spring应用程序的长期生存能力依赖于Spring项目本身(或Interface21 Inc公司,它雇佣了大多数Spring核心开放人员)。此外,如果你使用任何Spring特定的服务,例如Spring事务管理器或Spring MVC,你就被"锁定"在这些API中了。

  · Spring应用程序需要知道后台的服务提供者。例如,对于数据持续(data persistence)服务来说,Spring框架组件为JDBC、Hibernate、iBatis和JDO使用了不同的DAO和模板辅助类。因此,如果你希望为Spring应用程序更换持续服务提供者(例如从JDBC切换到Hibernate),你就必须重构自己的应用程序代码,使用新的辅助类。

  服务集成

  从较高的层次看,Spring框架组件位于应用程序服务器和服务类库之上。其服务集成代码(例如数据访问模板和辅助类)位于框架组件之中,并暴露给应用程序开发者。与此不同的是,EJB 3.0框架组件被紧密地集成到应用程序服务器中,服务集成代码被封装在标准的接口中。

  其结果是,EJB 3.0厂商可以积极地优化总体性能和开发者体验。例如,在JBoss的 EJB 3.0实现中,使用EntityManager保持实体BeanPOJO的时候,下层Hibernate对话事务会自动地与该调用方法的JTA事务联系在一起,当JTA事务提交的时候,它也会提交。如果使用简单的@PersistenceContext注释(本文后面有一个例子),你甚至于可以在有状态的(stateful)对话bean中把EntityManager和它的下层Hibernate事务捆绑到一个应用程序事务上。该应用程序事务在一个对话中跨越了多个线程,它在事务性的Web应用程序(例如多页面购物车)中是非常有效的。由于在JBoss中,EJB 3.0框架组件、Hibernate和Tomcat紧密集成,上述的简单和集成的编程接口才得以实现。Oracle的EJB 3.0框架组件和其下层Toplink持续服务之间的也实现了类似层次的集成。

  EJB 3.0中集成服务的另一个例子是群集(clustering)支持。如果你在服务器群集中部署EJB 3.0应用程序,那么所有的失效接续(fail-over)、负载均衡、分布式缓存和状态复制服务都是可以自动地供应用程序使用的。下层群集服务都隐藏在EJB 3.0编程接口后面,它们对于EJB 3.0开发人员来说是完全透明的。

  在Spring中,优化框架组件与服务之间的交互操作要困难得多。例如,为了使用Spring的宣告式事务服务来管理Hibernate事务,你必须在XML配置文件中显式地配置Spring TransactionManager和Hibernate SessionFactory对象。Spring应用程序开发者必须显式地管理跨多个HTTP请求的事务。此外,要在Spring应用程序中使用群集服务也没有简单的途径。

  服务集成的灵活性

  由于Spring中的服务集成代码是作为编程接口的一部分暴露的,应用程序开发者可以根据需要灵活地集成服务。这个特性允许你集成自己的"轻量级"应用程序服务器。Spring最普遍的使用方式是把Tomcat和Hibernate"粘合"在一起来提供简单的数据库驱动web应用程序。在这种情况下,Spring自身提供事务服务,Hibernate提供持续(persistence)服务--这种组织方式在Spring中建立了一个微型应用程序服务器。

  EJB 3.0应用程序服务器没有赋予你挑选服务的灵活性。在大多数情况中,你得到一组事先包装好的特性,而你只需要其中的一部分。但是,如果应用程序服务器由模式化的内部设计主导(类似JBoss),那么你就可能把它分开,去掉一些不必要的特性。在任何情况下,定制成熟的应用程序服务器都不是一个简单的事情。

  当然,如果应用程序的范围超越了单节点,那么你可能需要捆绑来自普通应用程序服务器的服务(例如资源缓冲池、消息队列和群集)。在总体的资源消耗方面,Spring解决方案与任何EJB 3.0解决方案一样,都是"重量级"的。

  在Spring中,灵活的服务集成使得我们更容易把仿制(mock)对象(而不是实际的服务对象)捆绑到应用程序,用于在容器外部进行单元测试。在EJB 3.0应用程序中,大多数组件都是简单的POJO,我们可以很容易地在容器外部测试这些它们。但是对于测试那些涉及到容器服务的对象(例如持续EntityManager),我们推荐在容器内测试,因为比起仿制对象的方法,它们更简单、更牢固、更精确。 XML与注释的比较
从应用程序开发者的角度来看,Spring的编程接口主要是基于XML配置文件的,而EJB 3.0广泛使用了Java注释。XML文件可以表达复杂的关系,但是它们同时也很冗长、牢固程度也较低。注释简单明了,但是在注释中我们却很难表达复杂的或层次的结构。

  Spring和EJB 3.0关于XML或注释的选择是依赖于这两个框架组件后面的架构的:由于注释只能保存相当少的配置信息,只有预先集成的框架组件(类似在框架组件中已经完成了大多数预备工作)可以广泛地把注释作为配置选项。我们已经讨论过了,EJB 3.0符合这种需求,而Spring作为一个通用的DI框架组件,不符合这个需求。

  当然,EJB 3.0和Spring都在学习对方的最佳特性,它们都在某个程度上支持XML和注释。例如,在EJB 3.0中XML配置文件是一个可选的重载机制,可以用于改变注释的默认行为。注释也可以用于配置某㏒pring服务。

  认识XML和注释之间的区别的最好途径是通过示例。在下一部分,我们会看到Spring和EJB 3.0是如何为应用程序提供关键服务的。

[1] [2]

postgresql 数据库 timescaledb 函数time_bucket_gapfill()报错解决及更换 license 最近在工作中使用postgresql 和 timescaledb 的time_bucket_gapfill()函数 报错,让更换license,在网上找了一大圈,没有找到,最后解决了这个问题,这篇文章记录我的解决办法查看timescaledb.license参数命令:show timescaledb.license;修改命令: 结果不行,报错如下:lter system set timescaledb.license=‘timescale’;那只能换包了如果出现上面那种情况,那我们只能先从官网上下载带 ' 阅读详情

相关推荐

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5861

POJO应用架构:Spring与EJB 3.0的对比

爱因斯坦曾经说过:"每件事物都应该尽可能简单,而不是更简单"。的确,对科学真理的追求都是为了简化理论的根本假设,这样我们才能处理真正麻烦的问题。企业级软件的开发也是这样的。  简化企业级软件开发的关键是提供一个隐藏了复杂性(例如事务、安全性和永续性)的应用框架。良好设计的框架组件可以提升代码的重复使用(reuse)能力,提高开发效率,从而得到更好的软件质量。但是,目前J2EE 1.4中的E

Schumann的专栏 2086

Apache Doris集群IP变更急救指南:用Docker容器+priority_networks快速恢复FE/BE节点

本文详细介绍了Apache Doris集群在IP变更情况下的应急处理方案,通过Docker容器和priority_networks配置快速恢复FE/BE节点。文章提供了从容器化环境构建、元数据迁移到生产环境切换的全流程指南,帮助运维团队在30分钟内完成集群恢复,显著减少停机时间。

pink7的博客 114

POJO、JavaBean和EJB的区别

1、POJO(Plain Old Java Object)         “Plain Old Java Object”的意思是“纯朴旧式的java对象”,现在大家也称它作“简单的java对象”。何为纯朴旧式?在该对象中只有private属性的参数以及根据每个参数定义的get和set方法,没有其它的方法、没有类的继承、接口的实现等,更没有被其它框架侵入的java对象。 public cla...

夜半一碗凉泡面的博客 2578

FunASR语音识别服务在Win11上的Docker部署避坑指南:模型配置与热词优化

本文详细介绍了在Windows 11系统上通过Docker部署FunASR语音识别服务的完整流程,包括环境准备、模型配置、热词优化及常见问题解决方案。特别针对Win11环境下的特殊配置和性能调优提供了实用指南,帮助开发者高效搭建高性能语音识别服务。

e3f4g5的博客 222

UE5游戏逆向实战:用FModel提取.pak文件中的3D模型(附Dumper-7避坑指南)

本文详细介绍了如何使用FModel工具从UE5游戏的.pak文件中提取3D模型,并提供了Dumper-7的避坑指南。内容涵盖FModel工具链配置、UE5特有的unversioned properties问题解决方案、Dumper-7实战流程以及模型后处理技巧,帮助开发者高效获取游戏资产。

weixin_30872499的博客 422

两种类型框架概述 EJB Spring

摘自  :中国BLOG 引言 EJB的体系结构是J2EE的基础和核心,J2EE定义了整个标准的应用开发体系结构和一个部署环境,基于EJB的框架一度成为人们开发Java企业应 用的首选。随着Java开源项目阵营的发展壮大, 一些基于POJOs(Plan Old Java Objects)的开源框架被越来越广泛地引入到Java企业应用的开发中来。根据复杂程度人们习惯把前者称为重量级框架,把后者称...

tiger.passion 490

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1378

EJB和Spring

EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。

lipviolet的博客 1264

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1243

SOMEIP协议--第三节[SOMEIP/SD](SD格式)

Entry和Option是SD报文中最重要的内容,是服务发现功能的承载。7.Minor Version是指当前服务的小版本号,可以配置,用于给用户区分当前服务的版本用的。注意:stop offer,stop subscribe,Subscribe Nack 这三条的TTL一定设为0,唯一和offer,subscribe,Subscribe的区别。Option用来辅助Entry实现其功能,是Entry携带的附加信息,作用上一般是用来告诉对端自己业务的ip和port信息,方便对端通过ip和port发送报文。

qq_41816308的博客 1339

POJO是什么意思

它是一种普通的 Java 类,不依赖于特定的框架或技术,也不实现特定的接口。相比于传统的企业级 Java EE 应用中的 EJB(Enterprise JavaBeans),POJO 更加简单、轻量级,易于理解和维护。Spring 框架通过依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)等技术,使得开发者可以将 POJO 与 Spring 容器无缝集成,实现更加灵活、可测试、可扩展的应用程序。

思索的涟漪,突破自我 2089

uniapp - [微信小程序] 实现点击预览各种文件 pdf文档、视频mp4、mp3音乐、图片图像、word/excel/ppt 等,uniapp小程序文件预览功能(详细示例代码,一键复制开箱即用)

uniapp,uniapp微信小程序,支付宝小程序平台端,uniapp实现文件在线预览,uniapp微信小程序怎么实现预览视频mp4,mp3音乐,图片,office文档,小程序平台如何在线预览word/excel/ppt文档,uniapp实现小程序端的文件查看功能,uniapp小程序端实现pdf文件预览,uniapp纯前端预览PDF、DOC、DOCX、图片、视频,uni-app文档、图片预览查看,uniapp文档预览功能,uniapp小程序端文件预览,uniapp小程序平台纯前端解析word,pdf,xls

✅ 精选推荐文章 1万+

EJB2.1 EJB3.0 Spring

   Java annotations are the key behind EJB 3.0, which ties POJO services, POJO persistence, and dependency injection altogether into a complete enterprise middleware solution. EJB 3.0s annota

持续改进 2026

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring 与 EJB 比较

本文中,笔者希望比较客户的评价Spring相对EJB所具有的一些特性,同时,Spring可以与EJB进行协同的工作,Spring可以应用到EJB应用中去,同样,EJB可以在Spring应用中很好的使用。首先EJB最初的设计思想考虑的是为分布式的应用服务的。比如,JBoss的EJB 3.0的实现是基于Hibernate的,Oracle的EJB 3.0实现是基于TopLink的,但是,在JBoss或者Oracle上跑应用程序,开发者既不需要去学习Hibernate,也不需要学习TopLink提供的独特API。

JBIB ENGINE 1350

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

POJO应用框架:Spring与EJB3.0的比较

英文原文地址: http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html 中文地址: http://www.matrix.org.cn/resource/article/43/43718_Spring_EJB.html 关键词: Spring EJB 艾伯特.爱因斯坦曾经说过:“一切都应该尽可能地简单,但是不

乐云天的博客 508

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring学习开发之路——使用JavaBean代替EJB

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ◆范围:任何Java应...

weixin_30273763的博客 5169

EJB3.0与Spring

总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。 Hibernate Session和JPA Entity Manager基本上等价,但是要记住他们的两个重要区别。        Hibernate session是一个实体缓存也是一个ORM引擎的接口。        而JPA中这两个概念是分开的。Persistence context作为缓存而

步春良 4894

技术演进中的开发沉思-167 java-EJB:EJB 在我眼里的印记

本文回顾了EJB作为Java企业级开发标志性技术的历史地位与演进过程。EJB曾是企业级开发的标杆,通过标准化组件模型解决了分布式系统的核心问题。经历了从1.x/2.x版本复杂繁琐到3.x版本注解驱动、POJO化的重大改进,但最终因重量级容器和生态局限被Spring框架超越。作者指出,虽然EJB已非主流,但其开创的容器化、声明式事务等思想仍深刻影响着现代开发框架,且在银行、电信等传统系统中仍有应用。建议开发者了解EJB历史,把握技术演进脉络,但应专注于SpringBoot等主流技术。

你的天空阅读专栏 648

POJO式开发

<br /><br />POJO<br /> <br />      POJO 就是简单 java 对象,不实现任何特殊接口。 POJO 这一名字由 Fower 、 Rebbecca 、 Parsos 、 Josh MacKenzie(Foeler POJO) 发明,目的地是为了给普通 Java 对象取个令人兴奋的、过目不忘的名字。<br /> <br />早期 EJB 及其存在的问题<br /> <br />      EJB1.0 版本发布于 1998 年,它提供了两种企业 bean :会话 bean 

gaoqian19820731的专栏 8486

POJO Application Frameworks: Spring Vs. EJB 3.0

POJO Application Frameworks: Spring Vs. EJB 3.0 by Michael Juntao Yuan -- Spring and EJB 3.0 are both reactions, in their own ways, to the complexity of EJB 2.1 and the complaints piled upon it. Both

东哩个东 1373

java spring ejb_带你走进EJB--EJB和Spring对比(转)

http://blog.csdn.net/jnqqls/article/details/17723417通过对EJB系列的总结和学习我们已经对EJB有了基本的了解,但是为了更进一步的去深入学习EJB,我们很有必要将它拿出来跟之前非常熟悉的spring进行一下对比,通过对比来了解这两个内容的相同与不同之处,更有利于我们对两者进行深入的了解.我们都有过这样的经历,在开发应用程序的时候,选择哪个技术是比...

weixin_42525482的博客 383

EJB3.0和Spring比较

0.比较目录     1) Vendor Independence 2) Service Integration 3) Flexibility in Service Assembly 4) XML versus Annotation 5) Declarative Services 6) Dependency Injection       1. 厂商无关性(Vendor ...

lyxsp的博客 254

ejb3 与 ejb2

                 EJB3 与 EJB2 区别 EJB3.0相比于以往的EJB版本而言改动很大,是到目前为止,EJB变动最大的一次。EJB之所以这么改,与EJB市场慢慢地被Spring剥夺有很大关系。EJB容器往往被看作是一种重量级组件容器,而Spring则更多地被认为用来进行轻量级企业程序的开发。面面俱到、考虑完备,是EJB的优点,但同时也是其致命弱点,很多时候我们并不需

528

Spring VS EJB3.0

Spring 与 EJB 比较 在开源领域,Spring开源框架已成为企业应用开发中使用最多的开源框架。Spring框架的优秀不但表现在其优雅的底层设计、使用方便快捷、面向工作实践、超强粘合能力等方面,另外一个不可忽视的方面是Spring拥有一个世界一流且活跃的技术开发团队。随着Spring的流行,于是,大家开始对比Spring与另一种流行的框架组件EJB。目前网上关于Spring和EJB的争论

杨天赐 725
上一篇: 实战体会Java的多线程编程-Java基础-Java-编程开发
下一篇: Java手机软件图形界面API之Form相关API-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值