Jakarta ee 为什么选择tomcat而不是兼容JavaEE的应用服务器?

Jakarta ee 为什么选择tomcat而不是兼容JavaEE的应用服务器?,jakarta-ee,tomcat,Jakarta Ee,Tomcat,JavaEE应用服务器提供了tomcat的所有特性,那么为什么要使用tomcat(而不是glassfish,例如,因为它是官方的) 特别是当需要Java EE功能时,如JPA、JAX-RS、JSF,因此必须将更多的库与应用程序打包,而符合EE的应用程序服务器则会提供现成的功能?大多数Java EE应用程序服务器体积庞大,附带许多不需要的功能,而且开发/测试周期非常慢(只需查看JavaRebel生产力报告)。如果您真的需要一些JavaEE特性,那么您应该使用它,但是在大多数情况下,您可以使用tom

JavaEE应用服务器提供了tomcat的所有特性,那么为什么要使用tomcat(而不是glassfish,例如,因为它是官方的)


特别是当需要Java EE功能时,如JPA、JAX-RS、JSF,因此必须将更多的库与应用程序打包,而符合EE的应用程序服务器则会提供现成的功能?

大多数Java EE应用程序服务器体积庞大,附带许多不需要的功能,而且开发/测试周期非常慢(只需查看JavaRebel生产力报告)。如果您真的需要一些JavaEE特性,那么您应该使用它,但是在大多数情况下,您可以使用tomcat或任何其他轻量级servlet容器具有相同的基本特性(本质上是servlet容器,您可以将大多数JavaEE技术放在tomcat之上,例如轻量级ejb容器等)

还要记住,您可以在应用服务器之外使用JPA、JSF、JAX-RS

TL;DR:JavaEE应用程序服务器显然速度很慢,不要动态地重新加载类,并强制执行一个非常恼人的代码/部署/测试周期(考虑20秒到8分钟的时间来测试Java代码中的一些更改)。大多数人只需要基本特性(本质上是servlet容器)


这里有一份关于2011年重新部署时间的报告:

如@Miguel Ping所述,应用服务器包含开发者不需要的功能
例如,许多开发人员不需要用于消息传递的代码,因此他们不需要JMS JAR
其他开发人员可能不需要集群,所以他们不需要集群代码,等等
随着当今大多数UI面向web,必须由应用服务器提供的Servlet容器变得越来越重要,因此许多开发人员决定只使用Servlet容器(即-tomcat)
在这种情况下,许多开发人员使用Spring框架来替代普通Java EE的功能(或者与Java EE集成,Spring也可以在应用服务器上运行)
是lightware,主要提供深度注入/反转控制容器(替代JavaEE中的EJB容器)
您可以从Spring framework中添加其他模块,为您的应用程序提供更多功能。然而,在许多应用程序服务器(EJB3.0及以下版本)中,应用程序服务器正在加载整个堆栈,这也会影响应用程序服务器的启动时间(从个人经验来看,这对开发人员来说非常烦人)

话虽如此,EJB3.1现在包含了一些概要文件,例如web概要文件,它从JavaEE规范中加载了较少的部分。此外,Jboss引入了一种并行部署机制,该机制分析应用程序内的依赖关系,并执行独立组件的并行部署
例如,在开源项目中,我们将一个简单的虚拟化环境部署的启动时间从超过1分钟减少到大约3秒
我不知道其他EJB3.1应用程序服务器中是否存在这样的机制,但是,如前所述,您可以非常轻松地定义概要文件或使用现有概要文件,例如为了减少启动时间


最后,, 在过去,人们使用tomcat主要是为了缩短启动时间和减少加载的模块数量
Spring提供了JavaEE开发的模块化替代方案,可以与tomcat一起使用

今天,在EJB3.1中,JavaEE也采用了模块化,还有像JBoss as 7这样的应用服务器,由于在部署过程中进行了各种优化,它们可以将启动时间缩短到几秒钟。

Tomcat是一个编写良好的轻量级servlet容器,它可以完成大量JVM web应用程序所需的一切。它作为一个直接与浏览器对话的web服务器在生产中运行良好。对于许多人来说,JavaEE中有太多的东西,超过了构建稳定有用的应用程序的需要。这种类型的人寻找的工具具有更少的,而不是更多的,并且价值稳定的、编写良好的代码。软件选择的世界是一个市场,Tomcat很好地服务于该市场的一部分。就像在任何市场中一样,你需要寻找替代品,选择满足你需求的产品。Tomcat只是众多备选方案之一

本文中有一个关于Tomcat的有趣观点 关于设计结构矩阵。他们将其与一家未具名的竞争对手进行比较,发现其设计精良。如果您对分析自己的代码感兴趣,我知道唯一的DSM实现是IntelliJ Enterprise edition,但他们会给您几周的免费试用


就个人而言,我相信简单性是支持软件的一个优点,servlet容器是支持软件,而不是应用程序的一部分。

人们很少使用普通的Tomcat。他们总是添加大量额外的东西,比如webframework、一些orm、一些DI框架等等

您可以使用Spring实现这一点,但最终的结果将是庞大的、臃肿的,并且您将被迫进行大量XML编程


现代JavaEE6实现非常轻量级(TomEE和Resin只有25mb),包含您需要的一切(web、持久性、DI)。所谓的Web配置文件不包含任何您很少需要的内容。现代JavaEE6服务器只需一两秒钟就可以启动,这与纯Tomcat不相上下,但它们实际上每天都提供您所需的工具

我们脑海中的问题和我们创造的全部原因是,为什么人们必须选择

整个“Tomcat或JavaEE”的东西都是既累又旧的。 10年后,它仍然会出现,人们互相争论哪一个更好,为什么更好

以下是简单的数学公式:

  • 在JavaEE6中