You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Spring Boot项目到JBoss EAP7.4时遇UploadedFileCleanerListener异常

解决JBoss EAP 7.4部署PrimeFaces 13 Jakarta版本的异常问题

问题根源

JBoss EAP 7.4基于Jakarta EE 8规范,依赖javax.servlet包下的Servlet API;而你升级的PrimeFaces 13.0.2 Jakarta版本适配的是Jakarta EE 9+,使用的是jakarta.servlet包空间。org.primefaces.webapp.UploadedFileCleanerListener实现的是Jakarta EE9+的监听器接口,但EAP7.4的Undertow容器仅识别javax.servlet下的监听器接口,因此判定该类未实现合法接口,抛出异常。

可行解决方案

方案1:切换PrimeFaces为兼容Jakarta EE8的版本

PrimeFaces 12.x系列的Jakarta版本适配Jakarta EE8,与JBoss EAP7.4的API完全匹配,直接调整依赖即可:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>12.0.0</version>
    <classifier>jakarta</classifier>
</dependency>

方案2:禁用PrimeFaces自带监听器并自定义适配类

若必须保留PrimeFaces13,可通过以下步骤规避冲突:

  1. 在web.xml中关闭自动注册的清理监听器:
<context-param>
    <param-name>primefaces.UPLOADER_CLEANER_LISTENER_ENABLED</param-name>
    <param-value>false</param-value>
</context-param>
  1. 自定义兼容EAP7.4的监听器类,实现javax.servlet.ServletContextListener并调用PrimeFaces的清理逻辑:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.primefaces.webapp.UploadedFileCleaner;

public class EAPCompatibleUploadCleanerListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        UploadedFileCleaner.initialize();
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        UploadedFileCleaner.destroy();
    }
}
  1. 在web.xml中注册自定义监听器:
<listener>
    <listener-class>com.yourpackage.EAPCompatibleUploadCleanerListener</listener-class>
</listener>

方案3:升级JBoss EAP至支持Jakarta EE9+的版本

JBoss EAP 8.x原生支持Jakarta EE9.1,可完全兼容PrimeFaces13的Jakarta版本,若业务允许,这是最彻底的解决方式。

内容的提问来源于stack exchange,提问作者Cristian Ruiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:32:49