是否可以将 tomee 与比出厂时更新的 tomcat 版本一起使用?

Is it possible to use tomee with a newer version of tomcat than it was shipped with?

我正在维护一个基于 Tomee 的遗留服务器。 Tomee 版本落后于 tomcat 版本几个月。我们需要在我的公司遵守严格的安全政策,即使是最新的 Tomee 版本也因存在未修补的安全问题而引发安全标志。

有没有一种方法可以使用 tomee 及其所有托管依赖项,但要覆盖 tomcat 版本进行部署?

部署环境是通过 docker,所以理想情况下我会在 docker 文件中添加几行以拉出更新的 tomcat 并覆盖 tomee 使用的那个。是不是像听起来那么简单,还是有什么技巧?

基本上,您需要遵守以下约定:

  • Tomcat 10.0.x -> TomEE 9.0.X (EE 9)
  • Tomcat 9.0.x -> TomEE 8.0.x (EE 8)
  • Tomcat 8.0.x -> TomEE 7.x.x (EE 7)

在 Tomcat 主要版本之间切换 并不 容易。在相应的 TomEE 版本中修补次要 Tomcat 版本更新是可能的。

但是,有时需要替换 Tomcat 发行版中的某些 类 以从头开始构建完整的 TomEE 发行版。您可以在 related Maven build file. In addition, some other files and properties are "bootstrapped" too. The relevant content is contained in Installer.java and in the related web.xml.

中查看详细信息

如果我需要修补 Tomcat 的版本并且发布周期对我的需求来说太慢,我会采用以下路径:

  1. 查看最新发布标签
  2. 修改父POM中Tomcat的版本
  3. 从头开始构建 mvn clean install -Dskip.tests=true(需要 Java 8 + Maven)
  4. tomee/apache-tomee/target 文件夹中获取最新的 TAR.GZ / ZIP。
  5. 把它放进我的容器里。 1.) 到 4.) 可能在单独的 docker 构建映像/容器中进行,然后转移到目标容器构建。

备选

您还可以使用嵌入式 TomEE 网络应用程序将 Tomcat“升级”为 TomEE。 但是,有一个已知的限制:如果您的网络应用程序在“tomee”网络应用程序之前启动,则集成将不得不对您的网络应用程序进行单独的 undeploy/redeploy,这很笨重。此外,需要一些“魔法”才能将 tomee webapp 的内容加载到 Tomcat 服务器类加载器中。 From current mailing list discussions,此 Web 应用程序将在不久的将来 停用