4.3 Guice與JMX
Guice官方提供一個JMX的插件guice-jmx-2.0.jar。在這個插件中我們可以很方便的將我們的服務(wù)發(fā)不成JMX可管理的MBean。本教程中我們繼續(xù)探討這個話題。
老套了,我們的HelloWorld服務(wù),注意這個服務(wù)為了滿足JMX的規(guī)范,接口名稱以MBean結(jié)尾,而實現(xiàn)類必須不帶MBean。
1 public interface HelloWorldMBean {
2 String sayHello();
3 }
然后是實現(xiàn)類HelloWorld。
1 public class HelloWorld implements HelloWorldMBean {
2
3 @Override
4 public String sayHello() {
5 return "Hello, guice";
6 }
7 @Inject
8 public void register(MBeanServer server) {
9 try {
10 server.registerMBean(this, new ObjectName("xylz guice demo:type=HelloWorld"));
11 } catch (Exception e) {
12 e.printStackTrace();
13 }
14 }
15 }
16
這里比較關(guān)鍵的是我們要將我們的服務(wù)注入到JMX服務(wù)器中。
然后寫一個JMX的服務(wù)端例子。
1 public class JMXDemo {
2
3 public static void main(String[] args) throws Exception{
4 Injector inj= Guice.createInjector(new Module() {
5 @Override
6 public void configure(Binder binder) {
7 binder.bind(MBeanServer.class).toInstance(ManagementFactory.getPlatformMBeanServer());
8 binder.bind(HelloWorldMBean.class).to(HelloWorld.class);
9 }
10 });
11 //
12 Manager.manage("guice-jmx-demo", inj);
13 //
14 Thread.sleep(10000*600);//sleep for ten minute
15 }
16
17 }
18
在這個例子中我們綁定MBeanServer到Guice中,然后通過Guice的JMX插件將我們的HelloWorldMBean服務(wù)到JMX中。最后暫停10分鐘阻止我們的程序立即退出,當(dāng)然你可以寫一個while的死循環(huán)。
特別注意,在eclipse中需要設(shè)置JVM的參數(shù)才能正確啟動我們的JMX服務(wù)。見下面。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=4321
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
然后使用我們的jconsole來查看我們的JMX服務(wù)。
在這里我們就可以看到我們的JMXDemo的進程了。然后選擇連接。
下面的圖顯示了我們執(zhí)行sayHello方法的結(jié)果。
當(dāng)然了我們可以自己寫一個client的程序來處理我們的服務(wù)。
1 public class JMXClientDemo {
2
3 public static void main(String[] args) throws Exception{
4 JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:4321/jmxrmi");
5 JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
6 MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
7 //
8 ObjectName mbeanName = new ObjectName("xylz guice demo:type=HelloWorld");
9 //
10 HelloWorldMBean helloWorld = JMX.newMBeanProxy(mbsc, mbeanName, HelloWorldMBean.class, true);
11 String msg=helloWorld.sayHello();
12 System.out.println(msg);
13 }
14
15 }
16
上一篇:
Google Guice 入門教程07 - 整合第三方組件(1)
下一篇:待續(xù)
©2009-2014 IMXYLZ
|求賢若渴