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



我想知道当前版本7/8的VAADIN和tomcat 10 之间是否存在任何兼容性问题

tl;dr

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

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

jakarta.*

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

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

随着Oracle将Java EE技术的责任转移到Eclipse基金会,这些技术的命名已从Java EE更改为Jakarta EEava™是Oracle的商标(。作为转换的一部分,Jakarta EE技术中定义的接口和类的包名称正在从javax.*更改为jakarta.*

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

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

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

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

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

如果正在启动一个绿地项目,并且您只使用更改了包名称的库,那么您可以选择使用Tomcat10。

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

➥因此,目前,您的Vaadin项目应该使用Tomcat的9版本运行,而不是使用10版本。这里没有损失,因为Tomcat 9和10本质上是相同的。

目前还没有迫切需要使javax.*jakarta.*过渡。最终,我预计我们将看到Vaadin的发布过渡到新的包命名。瓦丁阵营和更广泛的雅加达EE世界都有关于帮助实现这一变革的工具的讨论,尽管我不知道他们目前的状况。

当然,Tomcat的其他替代品/竞争对手也在经历同样的转型阵痛。例如,Eclipse Jetty 11使用了新的包命名,而Jetty 10正在使用相同的特性集进行并行开发,正如WebTide在本文中所解释的那样。如果使用Jetty进行Vaadin的开发或部署,那么您将使用Jetty 10而不是11。

Servlet 3.1

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

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

相关内容

最新更新