java ee技术_Java EE 6与Spring Framework:技术决策过程

java ee技术

在过去的几个月中,我们经历了这个决策过程:为Java平台上的企业开发选择哪种技术堆栈? 有多种选择。 但是,我们深入讨论的是:纯Java EE 6堆栈与带有Java EE的Spring。

以下博客文章总结了当您考虑这些技术堆栈选项之一时发现的有趣的关键问题。 我不会试图说服某人选择两者之一。 这对我来说很重要,我想分享的是决策过程和关键论点。

什么是“标准”?
在我们的讨论中,“标准”一词非常重要,特别是对于执行管理层而言。 我认为这使决策者对保护投资充满热情。 但是什么是标准,在Java生态系统中我们可以认为什么是标准? Codecentric AG的创始人兼董事会成员Mirko Novakovic写了一篇非常有趣的博客文章,名为:“ Java EE vs Spring。 或者:什么是标准? ” Mirko指出以下内容:
  • 对他来说,标准是建立,接受和主导的东西
  • 遵循此定义,仅将某些Java EE API(例如Servlet规范)视为标准,因为它们已广泛应用于Java生产技术领域
  • 他过去曾说过,某些Java EE标准API几乎没有投资保护,例如EJB规范(过去十年中大量API发生了变化)
  • 他还声称,JPA和JSF的1.0版本不足以满足大型企业开发项目中的技术要求。
  • 他将CDI视为另一个年轻的标准,它需要证明其长期稳定性,然后才能被视为Java企业应用程序中的标准IOC机制。
  • 因此,他目前的结论是:Sping和Hibernate仍然是Java企业开发的“实际”标准。
Mirko描述了一个有效的观点。 另一个有效的观点是:在Java规范请求(JSR)中指定和发布的所有(唯一的)API都可以视为标准。 应用服务器供应商根据这些JSR构建产品。 因此,如果Java开发人员使用这些标准API,他们可以构建可在任何应用程序服务器平台上运行的Web应用程序。 在Java EE 6中,他们可以构建企业级Web应用程序,而无需进一步依赖于第三个库。 结果是一个非常轻便的Web应用程序(WAR或EAR文件),仅包含您开发的代码。 那是Java EE的情况,也是有效和结论性的。
当您必须决定在编程模型中使用哪些API时,对您来说最重要的是什么? 有很多决策参数,例如简单性,API的完整性,改进的生产稳定性等等。 我们在研究中列出了一长串参数。 其中一些比其他一些更为重要,它们是:API的成熟度,供应商独立性,生产就绪性,投资保护和共同判断。
标准API的生命周期
我们的假设是,每个API进入Java EE标准时都会经历理想的 生命周期 (我们在过去已经观察到)。 这些阶段是:Newby,Storm,Stabalize,Matural,Dead。 标准API的第一个( Newby )版本1.0几乎没有功能。 通常,仅仅满足大型开发项目的功能和性能的技术要求是不够的。 这是Mirko反对CDI或JPA 1.0的观点。 有些人使用这些API,但他们还必须编程许多变通方法以获取所需的全部功能(例如,JPA 1.0中的第二级缓存)。

这些阶段的经验教训进入了后续的API版本,因此,API有时会变得不稳定。 增加了功能,减少了采用,简化的API等。 如果客户希望遵循该标准,那么这种动荡且不确定的风暴阶段会导致迁移成本增加。 即使2.0版本向下兼容,使用不错的新功能代替许多变通办法也意味着重构工作。 如果该API并非没有问题,兼容的API更改会强制执行迁移工作,则别无选择。 过了一会儿,但是API变得成熟,这些重构,成本下降,该API进入stabalization的阶段。

一个成熟的 API始终具有较低的迁移和重构成本,因为未应用任何基本更改。 一段时间后,不再使用某种技术,因为它已被其他创新的API所取代。 技术已死了–这些API不再投资,社区 停止了该项目。 图1显示了理想的API生命周期。

图1:理想的Java EE API生命周期
生命周期模型的关键假设是:您决定越早使用API​​标准,则在后续版本中增强API时,可能要付出的重构成本就更多。 因此建议是:您必须判断生命周期中(Java EE)API的状态。 然后,您决定是否要使用成熟的API和更低的制罐成本。 还是您想成为利用技术束缚的先驱之一。 尽早采用的优势之一可能是早日实现更高的开发效率,与其他标准API的更高集成度或开发咨询知识。
我们已决定仅使用成熟的API,我们不希望与“ Newby”状态API相关的迁移成本。 我们的信任度很低,因为我们在EJB时代遭受了很多苦难。 如果我们回顾一些Java EE标准的历史,则与API稳定性相关的变化是巨大的。 因此,我们宁愿等到API成熟并且已成为生产中大型应用程序系统的成熟技术。 如果我们认为Java EE API已经成熟,则可以考虑使用它。
独立性(开发,运营和OE供应商)
对我们而言,架构决策中的另一个重要因素是:我们希望为以后的架构,设计或实施决策提供最大的灵活性。 那是什么意思 例如,如果您选择的技术堆栈是应用程序服务器的一部分,那么您的应用程序开发部门,基础架构人员和原始设备(OE)供应商之间的关系将非常紧密。 为什么? 因为新的应用程序服务器版本包含您在业务应用程序中使用的新API版本。 结果是,当您决定使用新版本的应用程序服务器时,可能必须更改现有代码。 所有这些降低了灵活性。
另外,OE供应商可能会急着迁移您,因为“如果您想拥有我们应用程序服务器的此独特监视或集成功能,则必须使用最新版本的XY Java EE服务器”。 OE供应商通常会对他们感兴趣,因为他们希望您使用最新版本。 对于他们来说,支持更少的生产版本只是更便宜。 它为他们带来更少的维护成本和更高的咨询收入。
我们在生产中运行了50多个Java EE应用程序。 出于上述原因,保持独立于运行时基础结构对我们非常重要。 因此,我们通常更喜欢业务应用程序和应用程序服务器之间的“层”。 换句话说:我们通常不直接使用Newby API,我们通常有一个包装它们的包装器API(参见图2)。

该包装器用作构建业务应用程序的API。 包装器API可以是Spring框架,也可以是您自己的一组自定义框架API。 这样,当我们分别移动到新的应用程序服务器版本或Java EE版本时,进行所需的更改将更容易,更有效。 包装器吸收了Java EE API的更改,使我们免去了更改50个应用程序的负担。 相反,我们只在中央位置进行一次更改。 我们的开发小组不受应用程序服务器升级的影响。 OE供应商和Java Communication Process(JCP)不会影响我们的决定和努力。

基础架构的生产就绪性(或:现在还是以后?)
您的应用服务器是否有生产就绪版本,可以实现新的Java EE 6标准? 在我们的情况下(IBM WebSphere),Z系列上没有任何Java EE 6版本。 因此,如果我们还不能在生产环境中运行应用程序,那么思考Java EE 6几乎没有任何意义。 您必须决定是现在还是以后使用某种技术。 例如,作为IOC机制的CDI(JSR 299/330)对于大型应用程序还不够成熟。 因此,你可能要选择像Spring框架或谷歌吉斯的替代品来完成这项工作,如果你想现在已经送到您的客户端(效益分析)值。
投资保护(或:兼容性低下)
我已经在前面提到过:直接将Java EE API用于许多生产应用程序(可能是50或100),可能会降低设计和实现决策的灵活性。 在研究投资保护时,同样的论点也适用。 对我而言,投资保护主要涉及在特定时期内较低的技术(重构)成本。 您想花费金钱来实现业务价值,您想专注于实现业务功能。 不想花费在生活必需品技术的精力(例如,发布版本升级,平台迁移,开发自定义的API)。 为了实现这一点,选择正确的开发API至关重要。 根据我们的生命周期模型,一个不错的选择是在生命周期的长期成熟阶段开始时选择API。 这降低了重构成本,从而增加了投资保护。
我们已经解释了Java EE不仅提供成熟的API。 例如,CDI在其JSR 299/330版本中还不成熟。 解决该难题的一种可能的方法是组合来自不同来源的API,您可以为业务应用程序配置自己的API集。 如果您使用自己的一组 真实的标准API,则可以保护您的投资。

我说的是您自己的一套,因为您可能会使用混合技术堆栈 (图2):一些成熟的Java EE API(例如Servlet,JPA 2.0),一些实际标准(例如Spring IOC)和一些专有的自定义API作为围绕Newby Java EE API的包装而开发的。 最重要的是,这些API支持生产应用程序的低兼容性 当您要移至新的Java EE 应用程序服务器版本 时,必须找到一组API,这些API可使您免于繁重的迁移工作

图2:用于Java企业开发的混合技术堆栈
共同判断
我做决定时要做的事情就是共同判断。 其他专家怎么看? 他们有什么意识形态? 他们对一个或另一个建议有什么兴趣? 如果查看像Spring Framework这样的大型Java企业开发框架,您会发现它们使用标准的Java EE API,但仅使用它们认为已经成熟的API。 对于我是否使用特定的API,这是一个很好的提示。 无论您是查看Spring还是观察其他框架,都不会满足。 关键是您可以对照其他资深(最好是独立的)专家的意见来验证您的意见。
摘要
当您决定使用哪种技术堆栈时,有一长串参数。 我在本文中描述的内容在我们的决策过程中非常重要。 我们的结论是,目前最好的方法是使用混合技术堆栈。 一些API是事实上的标准,一些是Java EE标准,其他是我们开发的自定义API。 我们的主要目标是随着时间的推移以较低的重构成本保持灵活性。
关于标准的最后思考:您是否曾经问过自己,遵循标准是否真的很重要? 有时,我的印象是,对某些人来说,使用标准是接近绝对真理的事情,是普遍要做的事情。 水是湿的,天空是蓝色的,使用标准是正确的。 你知道我想说什么吗? 所有这些事实上的标准(例如Spring和Hibernate)如何成为标准?

答案是:因为有人有勇气使用它,而其他人(包括Java EE)则紧随其后。 “标准”是社区中很大一部分用来在生产中运行大型应用程序的工具。 标准不一定是Java EE标准。 过去,Java EE标准遵循事实上的标准框架(例如Hibernate,Spring)。 在开源框架中,任何新技术很可能首先达到一定的成熟度。 然后它们将成为Java EE标准。 这是因为至少在最近十年中,绝大多数Java技术创新都源于社区。

参考: Java EE 6与Spring Framework:我们JCG合作伙伴 Niklas的技术决策过程。

相关文章 :

  • 从Spring到Java EE 6
  • Java EE6 CDI,命名组件和限定符
  • Java EE6装饰器:在注入时装饰类
  • Spring Data JPA的持久层
  • Spring MVC3 Hibernate CRUD示例应用程序

翻译自: https://www.javacodegeeks.com/2012/01/java-ee-6-vs-spring-framework.html

java ee技术

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

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

相关文章

java开发一款坦克大战游戏

导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。游戏产业推动高新技术不断升级,极大地促进了经济的增长,推动了“第四产业”的经济腾飞。坦克大战游戏是童年时期…

java大转盘抽奖概率算法_幸运大转盘抽奖 抽奖算法 程序实现逻辑

近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的java代码的实现的思路,有不足之处感谢各位指正。初步方法首先要定义几个奖品…

java开发银行柜员业务绩效考核系统

导读:当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的的基本依据。在一个组织里,信息己作为人力、物力、财力之外的第四种能源,占有重要的地位。然而,信息是一种非…

一文教你使用java开发一款坦克大战游戏

导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。游戏产业推动高新技术不断升级,极大地促进了经济…

Java 8流中的常见SQL子句及其等效项

功能编程允许使用通用语言进行准声明性编程 。 通过使用功能强大的流畅API(例如Java 8的Stream API )或jOOλ的顺序Stream扩展Seq或更复杂的库(例如javaslang或functionaljava) ,我们可以以一种非常简洁的方式来表示数…

混合使用Azure LB和ILB访问相同web服务(3)

接下来我们来配置Azure Load balancer,就是面向公网的负载均衡器: 1.在该测试中,为了保持内网访问和外网访问一样的体验,本地端口和public端口和ILB一样,同样是80: PS C:\> Get-AzureVM -ServiceName …

mysql日活统计函数_如何通过简化日活模型,预估一个产品的日活(DAU)?

本文笔者通过简化日活模型,粗略地估算出未来一段时间的产品日活规模。进而通过日活的规模,再去估算一些潜在收益,以及运营成本等等数据。这段时间,经常有人问到以下的问题:按照现在的推广和留存,我们在未来…

罐中研讨会:设置JBoss BPM Suite全天研讨会

是否在寻找一种简单的方法来宣传,展示或演示JBoss业务流程管理套件(BPM Suite)产品的入门难度? 别无所求,因为我们召集了这个研讨会,因此您可以围绕JBoss BPM Suite构建一个晚上,半天或全天的…

java实现影视创作论坛

导读:随着时代的发展,互联网的出现,给传统影视行业带来的最大便利就是,方便了影视从业人员以及爱好者的交流和互动,而为用户提供一个书写影评,阅读影评以及回复影评的平台,以影评为载体来使用户感受影评、解读影评的是互联网在传统影视行业下应运而生的产物。 所谓的影视…

一文教你使用java开发一款推箱子游戏

导读:社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点。…

uiautomator的坑和AAPT命令方式启动一个应用程序

最近在使用UIautomator完成公司的一个主流程的自动化,因为不适用H5和IOS所以会放弃这个工具的使用,现在记录在使用uiautomator的一些问题: 案列1:使用命令去启动要运用的apk包 使用命令方式启动,可以使用SDK中自带的aa…

一文教你用java实现即时通讯软件的设计(附下载源码)

导读:即时通讯软件即所谓的聊天工具,其主要用途是用于文字信息的传递与文件传输。使用eclipse作为即时通讯软件的开发工具,使用Socket建立通讯渠道,多线程实现多台计算机同时进行信息的传递,swing技术等进行实际开发相…

Divide and conquer:Drying(POJ 3104)

烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘…

java 的 AccessController.doPrivileged使用

AccessController.doPrivileged意思是这个是特别的,不用做权限检查. 在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们的类本生是没有权限去读取那个文件的,一般情况下就是眼睁睁的看着了. 但是jiava提供了doPrivileged.在1.ja…

cordova 实现网页缓存_如何解决ionic,cordova混合开发的app缓存大的问题

如何解决ionic,cordova混合开发的app缓存大的问题关注:143 答案:2 mip版解决时间 2021-02-05 06:24提问者旧梦已过期2021-02-04 16:54如何解决ionic,cordova混合开发的app缓存大的问题最佳答案二级知识专家臸釪樶初2021-02-04 17:10可以试试sd卡挂在&a…

当年课设期末大作业,班主任让我们做一个新闻发布管理系统

导读:基于web的新闻发布及管理系统的设计与实现,是动态网页和数据库结合,通过事件来处理新闻。我们对最新信息的更新和发布需要比较及时,而动态交互网页能实现这些功能,新闻发布及管理系统就是一个能够在网上实现新闻的发布及管理,让人们更好的获取更新的新闻资讯。 随着电…

疫情期间,在家使用java的SSH框架实现一个简单的任务调度系统

导读:随着科学技术的飞速发展和各行各业的分工愈发明细化,对于改革传统的人工任务调度方式的呼声越来越大。得益于快速发展的计算机技术,我们看到了改革的方向。本系统是针对企业或者事业单位甚至一个小团队的任务调度而设计的,目的是改变传统的调度方式,通过计算机来计算…

css3优惠卷上方锯齿_css3怎么实现锯齿边框?

白板的微信你这样的最好还是切图做用css3也达不到一毛一样的效果,如果你很想要尝试一下的话可以试试,不过边缘不是顺滑的感觉

改善Hibernate应用程序性能的7种方法

Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩展时,我们该怎么办? 在花大价钱托管或重写代码之前&…

CSDN:2020博客之星年度总评选大赛,趣味总结!

导读:从2020年正式写博客,第一次参加活动,竟然落选了,在此记录一下这个过程吧,方便找帖子链接,毕竟靠着本人的影响力还是能捞点饭票的,哈哈。 2020博客之星年度总评选活动地址:https…