OpenAM 9.5.3中AMIdentity.store()抛MissingResourceException求助
解决OpenAM 9.5.3调用
AMIdentity.store()时的MissingResourceException问题 结合你提供的异常栈和场景(运行数天后突发,重启可临时解决),这个问题的核心是LDAP插件无法找到错误码-1对应的资源消息,而-1并非标准LDAP错误码,大概率是LDAP连接池耗尽或连接异常导致的间接报错。下面是无需升级版本的可行解决方案:
1. 补全缺失的资源条目先缓解异常
异常直接触发点是LDAPv3Bundle.getString(-1)找不到对应资源,我们可以先补全这个条目避免服务崩溃:
- 找到OpenAM部署目录下的
WEB-INF/classes/com/sun/identity/idm/plugins/ldapv3/ldapv3.properties文件 - 在文件末尾添加一行:
-1=LDAP Connection Failure (Unknown Error Code -1) - 重启OpenAM服务,这样即使再出现
-1错误,也会返回明确的错误消息,不会抛出MissingResourceException,同时能帮你在日志中定位更底层的问题。
2. 排查LDAP连接池配置问题
运行数天后才出现问题,很大概率是LDAP连接池资源耗尽,导致新请求无法获取有效连接,返回了非标准的-1错误码:
- 登录OpenAM控制台,进入你配置的LDAP数据存储页面
- 检查并调整以下参数:
Max Connections:如果设置过小,高并发场景下容易耗尽,建议根据业务量适当调大(比如从默认的10调整到20-30)Idle Timeout:设置空闲连接的超时时间(比如300秒),让连接池自动回收闲置连接Connection Timeout:缩短连接超时时间,避免无效连接长期占用池资源
- 保存配置后重启服务,观察问题是否重现。
3. 开启LDAP插件调试日志定位连接泄漏
如果调整连接池参数后问题依旧,可能是代码中存在LDAP连接泄漏,需要通过日志排查:
- 在OpenAM控制台的
Configuration > Servers and Sites > [你的服务器] > Debug页面 - 找到
com.sun.identity.idm.plugins.ldapv3模块,将调试级别设为Message或All - 运行服务直到问题重现,查看调试日志中连接的
getConnection和releaseConnection记录,确认是否有连接未被正确归还到池里 - 检查你的业务代码,确保调用
AMIdentity.store()后,相关的IDM上下文或资源被正确释放(比如关闭AMIdentity相关会话)
4. 定时清理IDM缓存缓解积累问题
OpenAM的IDM缓存如果长期未清理,可能会积累无效的连接或用户数据,导致后续操作异常:
- 可以通过OpenAM控制台的
Configuration > System > Cache页面,手动清理IDM相关缓存 - 或者通过JMX调用
com.sun.identity.idm.server.IdCachedServicesImpl的clearCache方法,定时执行缓存清理(比如每天一次),避免缓存积累引发的问题
内容的提问来源于stack exchange,提问作者Saurabh Batra
相关产品推荐
相关产品推荐

