2

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

有没有办法使用 tomee 及其所有托管依赖项但覆盖 tomcat 版本进行部署?

部署环境是通过 docker 进行的,所以理想情况下,我只需在 dockerfile 中添加几行来拉取一个较新的 tomcat 并覆盖 tomee 使用的那个。这听起来很简单还是有什么技巧?

4

1 回答 1

4

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

  • 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.xx (EE 7)

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

但是,有时需要替换 Tomcat 发行版中的某些类才能从头开始构建完整的 TomEE 发行版。您可以在相关的 Maven 构建文件中查看详细信息。此外,其他一些文件和属性也是“引导的”。相关内容包含在Installer.java和相关的web.xml中。

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

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

选择

您还可以使用插入式 TomEE webapp 将 Tomcat“升级”为 TomEE。但是,有一个已知的限制:如果您的 webapp 在“tomee”webapp 之前启动,则集成将不得不对您的 webapp 进行单独的取消部署/重新部署,这很笨重。此外,需要一些“魔法”才能将tomee webapp 的内容加载到Tomcat 服务器类加载器中。从目前的邮件列表讨论来看,这个 web 应用程序将在不久的将来退役。

于 2021-04-22T13:54:30.713 回答