tomcat服务器中的几个webapps实例化a
JCS 2.1 CompositeCacheManager
个实例到CompositeCacheManager#getUnconfiguredInstance()
。此方法注册了一个JMX bean(JCSAdminBean
),并且当bean已经注册时,由于InstanceAlreadyExistsException异常而引发警告:
2017-09-06 11:34:08,296 WARN CompositeCacheManager : Could not register JMX bean. javax.management.InstanceAlreadyExistsException: org.apache.commons.jcs:type=JCSAdminBean at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) at org.apache.commons.jcs.engine.control.CompositeCacheManager.initialize(CompositeCacheManager.java:271) at org.apache.commons.jcs.engine.control.CompositeCacheManager.getUnconfiguredInstance(CompositeCacheManager.java:218)
如何摆脱这些警告?我需要在几个webapps中进行缓存,但我不一定需要这个管理bean。
答案 0 :(得分:0)
我也碰到了这个,我在谷歌上找不到任何东西。因此,经过一些黑客攻击后,我发现每个缓存只能调用一次JCS.getInstance()。即它需要在静态变量中设置。
遵循Joshua Bloch关于单身人士的最佳做法,并确保可以从多个类访问缓存,我们为此目的使用枚举。 JCS.getInstance只会在整个生命周期中被调用一次。
public enum Cache
{
INSTANCE;
CacheAccess<String, Map<String, STVLang>> stvLangCache;
Cache()
{
stvLangCache = JCS.getInstance("stvlang");
}
public CacheAccess<String, Map<String, STVLang>> getLangCache()
{
return stvLangCache;
}
}