你能举一个例子吗,我如何通过JMX调用WroConfiguration.reloadCache()
方法?我使用Wildfly,单例启动ejb,以备不时之需。
JMX打开:jmxEnabled=true
以下是Java EE环境中的一个示例和要求:
- 在wro.properties中,将应用以下属性:
cacheUpdatePeriod=0 modelUpdatePeriod=0 debug=false disableCache=true jmxEnabled=true ...
- 不要试图用在初始方法中应用的@Singleton/@Startup注释和应用的@PostConstruct注释来更新ejb bean中的wro缓存模型。Wro MBean还没有注册,所以,它不会起作用
- 示例本身:
try { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("wro4j-ROOT:type=WroConfiguration"); mbs.invoke(name, "reloadCache", null, null); mbs.invoke(name, "reloadModel", null, null); } catch (InstanceNotFoundException e) { logger.warn("Could not find wro4j MBean. It has not been initiated yet"); } catch (Exception e) { logger.error(e); }
当jmxEnabled配置设置为true时,MBean将自动注册。如果打开jconsole,应该会看到一个名为"wro4j ROOT"的MBean(MBean名称是基于应用程序上下文名称的动态名称)。在那里,您应该可以找到名为reloadModel&reloadCache,可以通过JMX触发。
除了使用JMX之外,我还建议使用以下配置:resourceWatcherUpdatePeriod(将此值设置为大于0的值)。这在开发过程中很有用,因为在指定的时间间隔内,任何更改都会被开箱即用地检测到。