package com.neverwinterdp.module; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.management.MBeanServer; import javax.management.ObjectName; import org.junit.Assert; import org.junit.Test; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; import com.google.inject.Stage; import com.google.inject.name.Named; import com.mycila.guice.ext.closeable.CloseableInjector; import com.mycila.guice.ext.closeable.CloseableModule; import com.mycila.guice.ext.jsr250.Jsr250Module; import com.mycila.jmx.annotation.JmxBean; import com.mycila.jmx.annotation.JmxField; import com.mycila.jmx.annotation.JmxMethod; import com.mycila.jmx.annotation.JmxParam; import com.mycila.jmx.annotation.JmxProperty; public class AppModuleUnitTest { @Test public void testModuleMapping() throws Exception { Map<String, String> props = new HashMap<String, String>() ; props.put("hello", "Hello Property") ; props.put("registry.connect", "127.0.0.1:2181") ; props.put("registry.db-domain", "/scribengin/v2") ; Injector container1 = Guice.createInjector(Stage.PRODUCTION, new CloseableModule(), new Jsr250Module(), new MycilaJmxModuleExt("test-domain"), new AppModule(props)); Hello hello = container1.getInstance(Hello.class); hello.sayHello(); MycilaJMXService service = container1.getInstance(MycilaJMXService.class); service.increment(1); //MycilaJMXService service2 = container2.getInstance(MycilaJMXService.class); //service2.increment(1); Assert.assertTrue(container1.getInstance(Pojo.class) == container1.getInstance(Pojo.class)); Pojo pojo = container1.getInstance(Pojo.class) ; Assert.assertEquals("127.0.0.1:2181", pojo.getConnect()); Assert.assertEquals("/scribengin/v2", pojo.getDbDomain()); container1.getInstance(CloseableInjector.class).close(); } public interface HelloMBean { public void sayHello() ; } @Singleton static public class Hello implements HelloMBean { @Inject @Named("hello") private String hello ; @Inject public void registerMBean(MBeanServer server) throws Exception { ObjectName oname = new ObjectName("com.neverwinterdp:type=HelloMBean,name=scribengin.Hello"); server.registerMBean(this, oname); System.out.println("Init mbean..................."); } @Override public void sayHello() { System.out.println("Say hello: " + hello); } } @Singleton static public class Pojo { @Inject @Named("registry.connect") private String connect; @Inject @Named("registry.db-domain") private String dbDomain; @PostConstruct public void onInit() { System.out.println("onInit() ..........................................") ; } @PreDestroy public void onDestroy() { System.out.println("onDestroy() ..........................................") ; } public String getConnect() { return connect;} public void setConnect(String connect) { this.connect = connect; } public String getDbDomain() { return dbDomain; } public void setDbDomain(String dbDomain) { this.dbDomain = dbDomain; } } @JmxBean("category=category, subcategory=sub-category, type=test, name=main") static public final class MycilaJMXService { private String name; @JmxField private int internalField = 10; @JmxProperty public String getName() { return name; } public void setName(String name) { this.name = name; } @JmxMethod(parameters = { @JmxParam(value = "number", description = "put a big number please !") }) void increment(int n) { internalField += n; } } }