已发布的 Tomcat 10 上的 运行 Vaadin 7/8 网络应用程序是否存在任何已知的兼容性问题?

Are there any known compatibility issues with running Vaadin 7/8 web app on the released Tomcat 10?

我想知道目前VAADIN的7/8版本与tomcat10

之间是否存在兼容性问题

tl;博士

  • Tomcat9和10本质上是一样的。
    • 唯一的区别是 javax.* 包命名与 jakarta.*
  • 目前对于 Vaadin,使用 Tomcat 9,而不是 10。

竞争对手 Tomcat 也是如此。示例:使用 Jetty 10,而不是 11。

jakarta.*

是的,有一个简单但大的问题。

Vaadin 仍然编码为 javax.* 包命名的 Java EE 技术,它是基于它构建的。这包括 Servlet 技术。

使用 Oracle 的 Oracle transferring responsibility for Java EE technologies to the Eclipse Foundation, the naming of those technologies has changed from Java EE to Jakarta EE (Java™ being a trademark)。作为该过渡的一部分,Jakarta EE 技术中定义的接口包名称和 类 正在从 javax.* 更改为 jakarta.*

这个新包名称是 重大更改 几十年来为 Java EE 编写的软件。虽然这是一个不幸的问题,但修复非常简单:重命名所有源文件顶部的包行。

Jakarta EE 项目在 Jakarta EE 版本 9 中做到了这一点。大多数相关技术都增加了各自的版本号,但在其他方面与以前的版本基本相同(重命名它们的包是唯一的重大变化)。请参阅 Eclipse 基金会的 2020 年时事通讯,Understanding Jakarta EE 9

Tomcat 项目现在 运行 有两个并行版本:9 和 10。

  • Tomcat 9 使用旧包命名:javax.*
  • Tomcat 10 使用新的包命名:jakarta.*

两者都在同时开发中; 10 并不比 9“好”。

如果启动一个 greenfield 项目,并且您只使用更改了包名称的库,您可以选择使用 Tomcat 10.

如果使用尚未更改包名称的库,请使用 Tomcat 9. Vaadin 就是这样一个仍在使用旧包名称的库。

➥ 所以,目前,您的 Vaadin 项目应该是 运行,版本 9 为 Tomcat 而不是 10。这里没有损失,因为 Tomcat 9和10本质上是一样的

目前还没有迫切需要进行 javax.*jakarta.* 的过渡。最终,我希望我们会看到 Vaadin 的发布过渡到新的包命名。 Vaadin 阵营和更广泛的 Jakarta EE 世界都在谈论工具来帮助实现这一变化,尽管我不知道他们目前的状态。

当然,其他 alternatives/competitors 到 Tomcat 正在经历同样的过渡痛苦。例如,WebTide 的 Eclipse Jetty 11 uses the new package naming while Jetty 10 is in parallel development with an identical feature set, as explained in this post。如果使用 Jetty 进行 Vaadin 开发或部署,您将使用 Jetty 10 而不是 11。

Servlet 3.1

今天 (2021-05) 的所有 Vaadin 版本都是根据 Servlet 3.1 规范构建的,而不是 Servlet 4 或 Servlet 5。请参阅文档页面,Apache Tomcat Versions 对于 table 其中 Tomcat 支持哪个 Servlet 规范。

所以在这方面甚至不需要 Tomcat 9。 Tomcat 8.5 支持 Servlet 3.1,因此对于当前的 Vaadin 应用程序来说已经足够了。仅供参考,Tomcat 8.5 最初是从 Tomcat 9 早期派生出来的,并且包含大部分相同的功能。