配置CacheResultInterceptor导致WildFly部署错误求助
问题原因及解决方案
核心原因
- 依赖版本不兼容:你使用的是Jakarta EE 10(Wildfly 34.0.0.Final),但引入的是Java EE时代旧版JSR-107的缓存注解RI,对应的拦截器类
org.jsr107.ri.annotations.cdi.CacheResultInterceptor属于javax命名空间,和Jakarta EE的jakarta命名空间不匹配,容器无法识别该类为合法的CDI拦截器。 - 拦截器不符合CDI规范要求:旧版拦截器类未适配Jakarta CDI规范,要么未正确标注
@Interceptor注解,要么未通过Jakarta CDI可移植扩展完成注册,导致Weld容器无法将其识别为有效的拦截器Bean。
解决步骤
1. 替换为Jakarta兼容的缓存依赖
将pom.xml中旧的javax.cache相关依赖替换为Jakarta EE适配版本,示例如下:
<dependency> <groupId>jakarta.cache</groupId> <artifactId>jakarta.cache-api</artifactId> <version>2.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache-cdi</artifactId> <version>3.10.8</version> <scope>runtime</scope> </dependency>
注:Wildfly 34已内置Jakarta Cache API,因此
jakarta.cache-api可设为provided;Ehcache作为缓存实现,自带CDI拦截器支持。
2. 移除beans.xml中的手动拦截器配置
Jakarta版本的缓存注解拦截器会通过CDI可移植扩展自动注册,无需在beans.xml中手动声明。删除以下配置:
<interceptors> <class>org.jsr107.ri.annotations.cdi.CacheResultInterceptor</class> </interceptors>
3. 使用Jakarta命名空间的缓存注解
代码中替换为Jakarta规范的注解:
import jakarta.cache.annotation.CacheResult; public class SampleService { @CacheResult(cacheName = "sampleCache") public String getCachedValue(String key) { // 业务逻辑实现 return "cached-" + key; } }
4. 重新验证部署
执行mvn clean verify,Wildfly会自动识别并启用Jakarta缓存注解的拦截器,无需额外配置。
内容的提问来源于stack exchange,提问作者dkalna
相关产品推荐
相关产品推荐

