部署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,可通过以下步骤规避冲突:
- 在
web.xml中关闭自动注册的清理监听器:
<context-param> <param-name>primefaces.UPLOADER_CLEANER_LISTENER_ENABLED</param-name> <param-value>false</param-value> </context-param>
- 自定义兼容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(); } }
- 在
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
相关产品推荐
相关产品推荐

