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

标签 java vaadin vaadin7 tomcat10

我想知道目前VAADIN 7/8版本与tomcat 10之间是否存在兼容性问题

最佳答案

tl;博士

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

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

Jakarta 。*

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

Vaadin 仍然按照构建它的 Java EE 技术的 javax.* 包命名进行编码。这包括 Servlet技术。

Oracle将 Java EE 技术的责任转移给 Eclipse Foundation ,这些技术的命名已从 Java EE 更改为 Jakarta EE (Java™ 是 Oracle 的 trademark)。作为该过渡的一部分,Jakarta EE 技术中定义的接口(interface)和类的包名称将从 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 项目应该使用 Tomcat 版本 9 运行,而不是 10。这里没有损失,因为 Tomcat 9 和 10 本质上是相同的。

目前还没有迫切需要进行 javax.*jakarta.* 的转换。最终,我预计我们将看到 Vaadin 的版本过渡到新的包命名。在 Vaadin 阵营以及更广泛的 Jakarta EE 世界中,都在讨论使用工具来帮助实现这一变化,但我不知道它们目前的状态。

当然,Tomcat 的其他替代品/竞争对手正在经历同样的过渡痛苦。例如,Eclipse Jetty 11 uses the new package naming而 Jetty 10 正在并行开发,具有相同的功能集,如 this post 中所述。由 WebTide 提供。如果使用 Jetty 进行 Vaadin 开发或部署,您将使用 Jetty 10 而不是 11。

Servlet 3.1

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

因此在这方面甚至不需要 Tomcat 9。 Tomcat 8.5 支持 Servlet 3.1,因此足以满足当前的 Vaadin 应用程序。仅供引用,Tomcat 8.5 最初是从早期 Tomcat 9 fork 出来的,并且包含大部分相同的功能。

关于java - 在已发布的 Tomcat 10 上运行 Vaadin 7/8 Web 应用程序是否存在任何已知的兼容性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67628471/

相关文章:

java - Vaadin 在填充后设置组合框值

vaadin - 在消息框外单击时关闭 Vaadin 通知

java - Vaadin 异常 : java. lang.ClassCastException : com. example.view.ForecastInputs$2 无法转换为 com.example.view.ForecastInputs

java - 传递引用改变java中的代码

使用 Maven 的 JavaScript 缩小工作流

java - Hibernate 和 InterruptedException

java - 有时,Vaadin 不会在 "Session timeout"消息后使 session 无效

java - 使用兼容性 API

java - 在 JScrollPane 中更新 JPanel 不起作用

java - Tomcat 8.0.21 中的 Vaadin UI.access()