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 }
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 }
相关文章推荐
- Google Guice 入门教程07 - 整合第三方组件(1)
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析
- ActiveMQ入门教程(六) - ActiveMQ与Spring整合-MessageListener
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- SkinUI入门教程(三) SkinUI视图组件和界面编程
- 5、ActiveMQ入门教程(五)--Spring和ActiveMQ整合
- React入门教程 - 组件生命周期
- Angular 4入门教程系列:5:Tour Of Heroes之组件复用
- 第三方程序完美整合phpwind8的UC用户中心-教程加P8
- 【OpenCV入门教程之二】 OpenCV 2.4.8组件结构全解析
- [转]Ultra Fractal教程系列08——快速入门教程05——打开保存的分形
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- ExtJs 入门教程三[窗体:Window组件]
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- DWZ(JUI) 教程 中如何整合第三方jQuery插件
- 6、ActiveMQ入门教程(六)Spring与ActiveMQ整合
- Angular2入门教程之模块和组件详解
- Spring Boot入门教程(7)---整合jpa,Shiro进行权限管理(附源码)
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析