@Inject(optional=true) synchronized void setMBeanServer(MBeanServer server) { Preconditions.checkArgument(server != null, "null MBeanServer"); if (this.server != server) { currentExports.clear(); } this.server = server; try { exportConfig(); } catch (JMException e) { LOG.error("Unable to export configuration tree to JMX", e); } for (Entry<? extends Class<?>, Object> e : delayedBeanExports) { export(e.getKey(), e.getValue()); } }
@Before public void setUp() { config = Config.getEmptyConfig(); server = new TestingMBeanServer(); exporter = new ConfigJmxExporter(config); exporter.setMBeanServer(server); provider = (ConfigProvider<MyBean>) ConfigProvider.of(MyBean.class); }
private void tryExport() { if (exporter != null && configBean != null) { exporter.export(clazz, configBean); } }
synchronized void export(Class<?> realClass, Object configBean) { MBeanServer server = this.server; if (server == null) { delayedBeanExports.add(Maps.immutableEntry(realClass, configBean)); return; } final String mungedName = munge(realClass.getName()); if (!currentExports.add(mungedName)) { return; // Already exported } try { server.registerMBean(new ConfigMagicDynamicMBean(realClass.getName(), configBean), new ObjectName(mungedName)); } catch (Exception e) { LOG.error("Unable to export config bean " + configBean.getClass().getName(), e); } }
@Test public void doTest() throws Exception { exporter.setMBeanServer(server); ObjectName beanName = new ObjectName("com.nesscomputing.config:n0=com,n1=nesscomputing,n2=config,n3=LateJmxExporterTest$MyBean"); Assert.assertEquals("foo", server.getAttribute(beanName, "x")); Assert.assertEquals("3", server.getAttribute(beanName, "y")); Assert.assertEquals("10s", server.getAttribute(beanName, "z")); } }