您的位置:首页 > 产品设计 > UI/UE

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

2013-12-30 17:05 363 查看
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服务。

 


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

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

 


当然了我们可以自己写一个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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: