为什么选择tomcat而不是Java EE兼容的应用服务器?

kga*_*ron 38 tomcat java-ee

Java EE应用程序服务器提供了tomcat的所有功能,那么为什么要使用tomcat(例如代替glassfish,因为它是官方的)?

特别是当需要Java EE功能(如JPA,JAX-RS,JSF)时,因此需要将更多库与应用程序打包在一起,而符合EE标准的应用程序服务器是否可以提供开箱即用的功能?

Dav*_*ins 77

我们心中的问题以及我们创建TomEE的全部原因是,人们为什么要选择?

整个"Tomcat或JavaEE"的东西很累旧.

10年后它仍然出现,人们互相争论哪个更好,为什么.

这是简短形式的数学:

  • 在Java EE 6中,我们(JCP)创建了Web Profile,以正式承认需要使用一组专注的技术来实现更小的运行时.

太好了,我们在那里中途,但人们仍在争论"Tomcat JavaEE".解决方案很明确,Tomcat需要通过Java EE认证.创建Web配置文件是为了实现这一点.

  • 2011年,我们(Apache)开始着手验证Apache Tomcat.认证达到并在JavaOne 2011上宣布为Apache TomEE.最终发布于4月份.

太棒了,现在我们在那里.

新的现状

  • 有一个较轻的JavaEE版本
  • 有一个JavaEE认证的Tomcat版本

这一切都发生在过去的两年里.事情变了.

如果你想要Tomcat和JavaEE,你可以拥有它.

  • 这是有用的信息,但我不觉得它回答了这个问题.在TomEE之前,为什么人们会选择Tomcat而不是Java EE认证的服务器?我知道整个"Tomcat或JavaEE"的东西很累旧,但我从未见过这个讨论. (5认同)
  • 对此的回答通常是Java EE"沉重","过度杀伤","臃肿","缓慢","不稳定",并且通常很糟糕,我可以自己构建所有这些[在tomcat上].实际上他们的意思是"可用的实现很糟糕,我可以构建一个更好的实现".这是公平的事情,只要承认它是Java EE.如果你不喜欢福特或雪佛兰,那并不代表汽车很糟糕.如果你建造一辆更好的汽车,它只会证明汽车是好的. (3认同)

Mik*_*aun 6

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

你可以使用Spring,但最终的结果会很大,膨胀,你将被迫进行大量的XML编程.

现代Java EE 6实现非常轻量级(TomEE和Resin只有25mb)并且包含您需要的所有内容(Web,持久性,DI).所谓的Web Profile不包含您很少需要的任何内容.现代Java EE 6服务器在一两秒内启动,与裸Tomcat处于同一联盟,但它们实际上每天都提供您需要的工具.

  • Spring会给你构成一个堆栈的负担.这不是可选的.许多必需的部分(如Hibernate或Transactions)甚至不在Spring中,所以你需要去其他地方.使用Java EE,您可以选择两个非常好的标准配置文件(Web和Full),或者如果您真的想要编写自己的堆栈.Java EE中的所有内容都是模块化的.JSF,CDI,EJB等都可以单独添加到Tomcat或Jetty中. (10认同)
  • 现在你可以使用spring进行java配置,因此你不需要创建大量的XML.:)只是说...干杯! (5认同)
  • 关于弹簧 - 弹簧是模块化的,你可以选择你需要的东西(spring-core,spring-jdbc,spring-mvc)等...... (3认同)

Mig*_*ing 5

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

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

TL;DR: Java EE 应用程序服务器显然很慢,不要即时重新加载类并强制执行非常烦人的代码/部署/测试周期(想想从 20 秒到 8 分钟的任何地方来测试 Java 代码中的一些更改)。大多数人只需要基本功能(本质上是 servlet 容器)。

以下是关于 2011 年重新部署时间的报告:http: //zeroturnaround.com/java-ee-productivity-report-2011/#redeploy_times

  • 仅供参考,这些天几乎所有 Java EE 服务器的最新版本的平均启动时间是 [1-3 秒](http://antoniogoncalves.org/2011/10/20/o-java-ee-6-application -servers-where-art-thou/)。 (7认同)
  • Jboss EAP 6 在我的机器上在 0.8 秒内启动 op。对于使用 JSF、EJB、CDI 和 JPA 的应用程序,只需 2 秒。一个类似的 Spring 3.1 应用程序需要将近 10 秒,现在谁是轻量级应用程序吧? (4认同)
  • 我绝对同意它就是这样——当 Arquillian 被创建时,它实际上曾经用 OpenEJB 进行演示,因为 JBoss 太慢了。从 JBoss 7 开始,他们现在使用 JBoss 进行演示。如果 JRebel 报告中包含服务器版本,那就太好了。 (2认同)
  • 以下是我们(JRebel 团队)一直在测量的服务器启动时间的更多信息:http://dow.ngra.de/2010/12/14/jee-oss-container-startup-times-apples-vs-oranges/事实上,服务器启动时间不是大多数现代应用服务器的主要问题,无论是 Tomcat 还是 Glassfish。甚至 WebShpere 现在在启动时也非常快(请参阅 Liberty Profile 版本)。应用程序和框架元数据需要很长时间才能初始化(向基于注释的编程模型问好)。 (2认同)