是否可以将 tomee 与更新版本的 tomcat 一起使用?
Posted
技术标签:
【中文标题】是否可以将 tomee 与更新版本的 tomcat 一起使用?【英文标题】:Is it possible to use tomee with a newer version of tomcat than it was shipped with? 【发布时间】:2021-04-19 13:25:38 【问题描述】:我正在维护基于 Tomee 构建的旧版服务器。 Tomee 的发布落后于 tomcat 的发布几个月。我们需要在我的公司遵守严格的安全政策,即使是最新的 Tomee 版本也会因为存在未修补的安全问题而引发安全标志。
有没有办法使用 tomee 及其所有托管依赖项,但要覆盖 tomcat 版本进行部署?
部署环境是通过 docker 进行的,所以理想情况下,我只需在 dockerfile 中添加几行来拉取更新的 tomcat 并覆盖 tomee 使用的那个。这听起来很简单还是有什么技巧?
【问题讨论】:
【参考方案1】:基本上,您需要遵守以下约定:
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 文件中查看详细信息。此外,其他一些文件和属性也是“引导的”。相关内容包含在Installer.java和相关的web.xml中。
如果我需要修补 Tomcat 的版本并且发布周期太慢而无法满足我的需要,我会采用以下路径:
-
查看最新发布标签
修改父POM中Tomcat的版本
从头开始构建
mvn clean install -Dskip.tests=true
(需要 Java 8 + Maven)
从tomee/apache-tomee/
的target
文件夹中获取最新的TAR.GZ / ZIP。
把它放进我的容器里。 1.) 到 4.) 可以在单独的 docker build 镜像/容器中进行,然后转移到目标容器构建。
替代方案
您还可以使用插入式 TomEE Web 应用程序将 Tomcat “升级”为 TomEE。 但是,有一个已知限制:如果您的 webapp 在“tomee”webapp 之前启动,则集成将不得不对您的 webapp 进行单独的取消部署/重新部署,这很笨重。此外,需要一些“魔法”才能将tomee webapp 的内容加载到Tomcat 服务器类加载器中。 From current mailing list discussions,此 web 应用将在不久的将来停用。
【讨论】:
以上是关于是否可以将 tomee 与更新版本的 tomcat 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
TomEE 中的 Spring Durable JMS 订阅者(不允许在使用的连接上设置 clientID)
TomEE PolicyConfigurationFactory & TransactionManagerImpl 错误