WildFly 27/28集成嵌入式Infinispan模块问题求助
在WildFly 27/28中集成嵌入式Infinispan(Jakarta迁移解决方案)
核心前提
WildFly 27+基于Jakarta EE 10,所有依赖必须切换到Jakarta命名空间,不能再使用javax版本的Infinispan包。
具体解决方案
1. 选择正确的Infinispan Jakarta兼容包
Infinispan从14.x版本开始提供Jakarta专属artifact,需替换依赖:
- 放弃原有的
infinispan-core,改用infinispan-core-jakarta(对应稳定版本如14.0.19.Final) - 若用到其他组件(如JCache、查询模块),同理替换为
infinispan-jcache-jakarta、infinispan-query-jakarta等后缀为-jakarta的artifact
2. 手动构建WildFly模块(针对无官方模块的情况)
如果官方没有提供现成的WildFly模块包,可自行构建:
- 下载
infinispan-core-jakarta及其依赖包(如infinispan-commons-jakarta) - 在WildFly的
modules/system/layers/base/org/infinispan/main目录下,替换原有jar文件为jakarta版本 - 修改
module.xml:- 将所有
javax.*的依赖替换为WildFly自带的Jakarta模块,例如:- 把
javax.annotation改为jakarta.annotation.api - 把
javax.transaction改为jakarta.transaction.api
- 把
- 确保模块的
resources节点指向新的jakarta版本jar
- 将所有
3. 应用代码与依赖调整
- 项目依赖配置(以Maven为例):
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-core-jakarta</artifactId> <version>14.0.19.Final</version> <scope>provided</scope> </dependency> - 代码中替换所有javax相关的import:
- 将
javax.cache.*改为jakarta.cache.* - 将
org.infinispan.jcache.*改为org.infinispan.jcache.jakarta.*(若使用JCache)
- 将
4. 利用WildFly自带的Infinispan模块(推荐)
WildFly 27/28本身集成了兼容Jakarta的Infinispan版本,可直接复用容器提供的模块:
- 无需手动下载外部包,直接在应用中依赖
providedscope的Infinispan核心包 - 检查WildFly的
modules/system/layers/base/org/infinispan/main目录,确认已有jakarta版本的jar和正确的module.xml
排错技巧
- 启动WildFly时查看
server.log,重点排查ClassNotFoundException,确认是jakarta类而非javax类未找到 - 若出现模块依赖冲突,使用WildFly的
jboss-deployment-structure.xml排除不必要的javax版本模块,强制使用jakarta版本 - 验证Infinispan配置文件(如
infinispan.xml)中的命名空间,确保没有引用javax相关的schema
内容的提问来源于stack exchange,提问作者thoredge
相关产品推荐
相关产品推荐

