部署Java JSF+WebLogic项目遇Coherence存储节点缺失异常求助
RequestPolicyException问题 你的Web应用虽能部署运行,但多个页面因Coherence缓存的异常无法正常工作——核心问题是抛出了com.tangosol.net.RequestPolicyException: No storage-enabled nodes exist for service PartitionedCache,下面给你一步步排查和解决的方案:
问题根源说明
这个异常的核心含义是:Coherence的PartitionedCache分布式缓存服务,找不到任何启用了存储功能的节点。分布式缓存需要至少一个节点来承载缓存数据的存储,没有这样的节点,缓存写入操作就会直接失败,进而影响依赖该缓存的页面功能。
具体解决步骤
1. 检查Coherence核心配置
打开你的Coherence配置文件(比如tangosol-coherence.xml或自定义的tangosol-coherence-override.xml),找到PartitionedCache服务的配置段,确保明确开启存储功能:
<service-config> <service-name>PartitionedCache</service-name> <service-type>PartitionedCache</service-type> <instance-name>PartitionedCache</instance-name> <storage-enabled>true</storage-enabled> <!-- 必须设为true,开启节点存储能力 --> <!-- 其他配置项 --> </service-config>
从你的日志看,当前加载的是开发环境默认配置tangosol-coherence-override-dev.xml,这类默认配置通常会关闭本地存储,需要手动开启。
2. 配置WebLogic服务器的Coherence存储节点
如果是在WebLogic集群环境中部署:
- 登录WebLogic控制台,找到目标Managed Server
- 进入Configuration > Coherence标签页
- 勾选Local Storage Enabled选项,保存后重启服务器
- 确保至少有一个Managed Server开启该选项,作为Coherence的存储节点
3. 验证应用缓存的配置
检查应用中AplOperConfig缓存对应的配置(通常在cache-config.xml里),确保缓存使用的是支持存储的分布式scheme:
<cache-mapping> <cache-name>AplOperConfig</cache-name> <scheme-name>distributed</scheme-name> <!-- 必须使用分布式scheme --> </cache-mapping> <distributed-scheme> <scheme-name>distributed</scheme-name> <service-name>PartitionedCache</service-name> <!-- 对应上述开启存储的服务 --> <!-- 其他配置项 --> </distributed-scheme>
如果误用了<remote-scheme>,会导致缓存请求转发到不存在的存储节点,同样触发该异常。
4. 本地开发环境快速修复
如果你是本地开发测试,不需要集群,可以通过设置系统属性强制开启本地存储:
- 在WebLogic启动脚本中添加参数:
-Dtangosol.coherence.localstorage=true - 或者在代码初始化缓存前设置:
System.setProperty("tangosol.coherence.localstorage", "true");
验证解决方案
修改配置后,重启WebLogic和应用,访问之前异常的页面,检查日志是否还有RequestPolicyException,同时确认AplOperConfig缓存能正常初始化和读写。
内容的提问来源于stack exchange,提问作者Süleyman Karakus

