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

配置CacheResultInterceptor导致WildFly部署错误求助

问题原因及解决方案

核心原因

  1. 依赖版本不兼容:你使用的是Jakarta EE 10(Wildfly 34.0.0.Final),但引入的是Java EE时代旧版JSR-107的缓存注解RI,对应的拦截器类org.jsr107.ri.annotations.cdi.CacheResultInterceptor属于javax命名空间,和Jakarta EE的jakarta命名空间不匹配,容器无法识别该类为合法的CDI拦截器。
  2. 拦截器不符合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:18:18