当前位置: 首页 > 科技观察

小白科普:JavaEEvsJ2EEvsJakartaEE

时间:2023-03-15 23:08:00 科技观察

1.简介您听说过JavaEE吗?您听说过Java2EE、J2EE或当前的JakartaEE吗?事实上,这些各种不同的术语都描述了同一个东西:一组由JavaSE扩展的企业规范。在这篇简短的文章中,我们将讲述JavaEE的历史。2.历史在Java的第一个版本中,JavaEnterpriseExtensions只是核心JDK的一部分(译者注:CoreJDK通常指的是JavaSE)。然而,到1999年,JavaEnterpriseExtensions已经脱离JavaSE并成为Java2的一部分,这也意味着J2EE或Java2PlatformEnterpriseEdition的诞生。J2EE的名称一直保持到2006年。随着2006年Java5的发布,J2EE更名为JavaEE,即JavaPlatformEnterpriseEdition。这次更名后的称号一直持续到2017年9月。那一年发生了一件大事,甲骨文决定将JavaEE捐赠给Eclipse基金会(但Java仍然属于甲骨文)。3.之所以改变,其实是因为甲骨文拥有“Java”商标。法律要求Eclipse基金会重命名JavaEE。JavaEE在社区投票后更名为JakartaEE。从某种意义上说,JavaEE仍然被称为JEE。(译者注:JavaEE的首字母缩写也可以简写为JEE)。不过,这仍然是一个正在进行的故事,尘埃尚未完全落定。例如,虽然Oracle开源了Java源代码,但并未开源其所有文档。关于这个问题,因为涉及到一些法律问题,一些开源文档(比如JMS、EJB相关的文档)都非常刁钻,至今争议还很多。目前尚不清楚新的EclipseFoundation文档是否会参考原始文档。同样令人惊讶的是,Eclipse基金会不能使用javax命名空间来创建新的Java包,而是可以在现有包下创建新的类和子类。过渡阶段还意味着向JakartaEE添加规范的新流程。为了更好地理解这一点,让我们快速了解一下Oracle添加规范的过程以及EclipseFoundation所做的相应更改。4.Future过去,为了给“EE”增加一个特性(译者注:原作者为了避免JakartaEE的历史名称混淆,用“EE”来指代所有版本,下同),我们需要三样东西:规范、参考实现和测试。社区中的任何人都可以提交这3个东西,然后执行委员会将决定何时将它们集成到Java语言中。为了更好地理解添加规范的旧过程,让我们仔细看看JSR、Glassfish和TCK是什么,以及它们如何合并新功能。我们还将瞥见未来的预期。4.1JCP和现在的EFSP过去,EE生成新特性的过程被称为JCP(JavaCommunityProcess)。JavaSE仍然使用JCP。但是,由于EE的所有权已经从Oracle转移到EclipseFoundation,EE有了一个新的过程,它是Eclipse开发过程(https://www.eclipse.org/projects/dev_process)的扩展,而JavaSE的进程之间互不干扰,我们称之为EFSP(EclipseFoundationSpecificationProcess)。尽管JCP和EFSP之间存在一些很大的差异,但它们中的大多数都围绕着“透明、公开、集体责任和供应商中立”的原则展开。例如,EFSP的组织者设想了一个供应商中立的协作工作组,认证过程是自助服务的,并且该组织是由精英管理的。4.2JSR在JCP中,向EE添加新功能的第一步是创建JSR(Java规范请求)。JSR有点像EE功能的接口。JCP执行委员会批准完整的JSR,合适的JSR贡献者编写代码以使其在社区中生效。JSR-339或JAX-RS是说明上述过程的好例子。JAX-RS最初于2011年提出,2012年获得JCP批准,最终于2013年发布。虽然在讨论规范时社区总是可以加入,但时间表明,实现优先的方法更有利于创建被广泛接受的特性和API。所谓实现优先级类似于JSR310中的java.time和JodaTime的例子(译者注:Java在JDK1.8之前的时间API很不理想,广泛使用Joda-Tme)。因此,EFSP(EclipseFoundationSpecificationProcess)在其既定目标中表述了这一观点:“EFSP将根据是否先进行了动手实验和编码来判断是否值得加入规范。4.3GlassFish另外,JSR作为JCP的一部分,需要参考实现,这有点类似于实现接口的类,对于那些想创建自己规范实现的人,比如兼容库的开发者或者其他组织,参考实现可以帮助。对于JavaEE特性,JCP使用Glassfish作为参考实现。虽然Glassfish的中心化简化了实现者的发现过程,但这种中心化也需要更多的管理,并且倾向于偏向于一个供应商。因此,EFSP不需要参考实现,但只有兼容的实现。简而言之,这种微妙的变化使得在像G这样的中央架构中实现lassfish没有被基金会无缘无故地黑掉。4.4TCK***,JCP要求EE特性通过TCK(TechnologyCompatibilityKit)测试。TCK是一组验证特定EEJSR的测试。简而言之,为了符合JavaEE,应用服务器需要实现所有的JSR,并通过特定TCK的所有测试。测试。和上面类似,虽然Oracle已经开源了TCK和EEjsr的源代码(译者注:但是没有开源相应的文档)。当然,未来所有的文档和TCK都会开源。5.这些年来的总结,JavaEE确实取得了长足的进步。很高兴看到它继续改变并变得更好。前方的道路充满坎坷,希望向Java的过渡会更顺利。作者|RodrigoGracianohttps://www.baeldung.com/java-enterprise-evolution【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号coderising】点此查看作者更多多么好的文章