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 获取系统当前时间并格式化CreateTime--2018年5月9日11:41:00Author:Marydon实现方式有三种updateTime--2018年7月23日09点32分准备工作:import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;方式一:/*** 获取系统当…

并行和并发

并行:同时运行,从微观的角度讲 并发:同时发生,从宏观的角度讲 并行是真正意义上的同时执行。而并发不是。 “并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。 而“并发…

java 本地方法栈_Java虚拟机栈和本地方法栈

Java虚拟机栈的特征线程私有后进先出(LIFO)栈存储栈帧,支持Java方法的调用、执行和退出可能出现OutOfMemoryError异常和StackOverflowError异常Java本地方法栈的特征线程私有后进先出(LIFO)栈作用是支撑Native方法的调用、执行和退出可能出现OutOfMemoryError异常和…

如何使用Java,Maven,Jetty创建Web应用程序项目

在本文中,我们使用Maven Archetype插件创建一个简单的Web应用程序。 我们将在名为Jetty的Servlet容器中运行此Web应用程序,添加一些依赖项,编写简单的Servlet,并生成WAR文件。 在本文的最后,您还可以在Tomcat中部署该服…

java开发一款坦克大战游戏

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

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

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

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

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

mysql orderby count_mysql中count(),groupby,orderby使用方法分享

本文主要和大家分享mysql中count(), group by, order by使用方法,mysql中order by 排序查询、asc升序、desc降序,group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询…

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

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

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

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

php开启openssl的方法

windows下开启方法: 1: 首先检查php.ini中;extensionphp_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘;’, 如果不存在这行,那么添加extensionphp_openssl.dll。 2: 讲php文…

mysql 短时大连接的问题_mysql长连接和短连接的问题

什么是长连接?其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。通常的短连接操作步骤是:连接-》数据传输-》关闭连接;而长连接通常就是:连接-》数据传输-》保持连接-》数据传输-》保…

java实现动漫论坛

导读:作为文化产业的一部分,动漫影响了我国一代又一代青少年,据钱江晚报调查显示,有超过七成的95后愿意从事与动漫相关的行业,可见其对青少年影响力之大。 动漫论坛作为最先开始热爱动漫人士进行交流的方式之一,是爱好者们共享信息,寻找同伴的重要渠道之一。在这次毕业设…

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

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

Java实现个人博客系统(附下载源码)

导读:进入二十一世纪,以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用,各种网络交流互动工具也应运而生。其中以论坛、博客、社区、空间最为受广大网民朋友的欢迎,也是目前为止发展的比较成熟的信息交流工具。在网络技术逐渐渗入社会生活各个层…

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

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

通过SPANN方式将Spring&Quartz与自定义注释集成

在上一篇文章中 ,我们演示了如何在Spring容器中创建和配置带批注的Quartz作业。 我们使用了一个类级别的注释将一些元数据添加到实现Quartz Job的bean中。 批注定义了作业的名称,组及其cron表达式。 后来,大部分代码专用于处理该批注&#xf…

Linux学习之常用技巧

▌基础 学习 Bash 。你可以man bash来看看bash的东西,并不复杂也并不长。你用别的shell也行,但是bash是很强大的并且也是系统默认的。(学习zsh或tsch只会让你在很多情况下受到限制) 学习 vim 。在Linux下,基本没有什么…

java开发一个完整的秒杀与竞价网上商城

导读:网络商城近年来非常火热的一种经营方式,与现实生活中的商店的差别是利用电子商务的一些手段,从而沟通消费者与商家进行商品买卖的虚拟商店,减少买家卖家间的多层环节,减少运输的成本以及层层代理过程中的差价,这就有巨大的价格优势从而带来巨大的发展空间。网络商城…

precede和previous_Previous Analyses of Hungarian Phrase Structure

摘要:The most obvious empirical basis of the establishment of phrase structure rules is the observation of word order phenomena. Since in a large set of Hungarian sentences any permutation of the major constituents is grammatical, the conclusion…