Google Guice 入门教程08 - 整合第三方组件(2)

Google Guice 入门教程08 - 整合第三方组件(2)

4.3 Guice与JMX

Guice官方提供一个JMX的插件guice-jmx-2.0.jar。在这个插件中我们可以很方便的将我们的服务发不成JMX可管理的MBean。本教程中我们继续探讨这个话题。

老套了,我们的HelloWorld服务,注意这个服务为了满足JMX的规范,接口名称以MBean结尾,而实现类必须不带MBean。

1  public   interface  HelloWorldMBean {
2      String sayHello();
3  }

 

然后是实现类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 

这里比较关键的是我们要将我们的服务注入到JMX服务器中。

然后写一个JMX的服务端例子。


 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服务到JMX中。最后暂停10分钟阻止我们的程序立即退出,当然你可以写一个while的死循环。

特别注意,在eclipse中需要设置JVM的参数才能正确启动我们的JMX服务。见下面。

- Dcom.sun.management.jmxremote
- Dcom.sun.management.jmxremote.port = 4321
- Dcom.sun.management.jmxremote.authenticate = false
- Dcom.sun.management.jmxremote.ssl = false

然后使用我们的jconsole来查看我们的JMX服务。

image

在这里我们就可以看到我们的JMXDemo的进程了。然后选择连接。

下面的图显示了我们执行sayHello方法的结果。

image

当然了我们可以自己写一个client的程序来处理我们的服务。


 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)
下一篇:待续

©2009-2014 IMXYLZ
imxylz.com
| 求贤若渴

你可能感兴趣的:(Google Guice 入门教程08 - 整合第三方组件(2))