「Java」JMX さわってみた
JMX さわってみたので、その時のメモ。
[ 環境情報 ]
Windows 7 SP1
Java SE 7 Update 45
オラクルからは以下のドキュメントが提供されてます。
・Trail: Java Management Extensions (JMX) (The Java Tutorials)
http://docs.oracle.com/javase/tutorial/jmx/index.html
上記のドキュメントから辿れますが、以下あたりにサンプルコードが載ってます。
・Standard MBeans (The Java Tutorials > Java Management Extensions (JMX) > Introducing MBeans)
http://docs.oracle.com/javase/tutorial/jmx/mbeans/standard.html
やることとしては、
-----
1. MBean インタフェースの作成
2. インタフェースの実装クラスの作成
3. JMX Agent の作成
-----
って感じみたいです。
サンプルコード参考にさっそくやってみました。
1. MBean インタフェースの作成
■ HelloMBean.java
package com.example; public interface HelloMBean { public String getHello(); public void sayHello(); }
2. インタフェースの実装クラスの作成
■ Hello.java
package com.example; public class Hello implements HelloMBean { public void sayHello() { System.out.println("sayHello !!"); } public String getHello() { return "getHello !!"; } }
3. JMX Agent の作成
■ JMXAgent.java
package com.example; import java.lang.management.ManagementFactory; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; public class JMXAgent { public static void main(String[] args) { try { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("com.example:type=Hello"); Hello mbean = new Hello(); mbs.registerMBean(mbean, name); System.out.println("Waiting forever..."); Thread.sleep(Long.MAX_VALUE); } catch (MalformedObjectNameException e) { e.printStackTrace(); } catch (NotCompliantMBeanException e) { e.printStackTrace(); } catch (MBeanRegistrationException e) { e.printStackTrace(); } catch (InstanceAlreadyExistsException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
上記で MBean の登録まで完了です。
jconsole を起動して [ MBean ] タブを見ると登録した MBean が確認できます。
jconsole で確認するのもいいのですが、せっかくなんでコードから Mbean の情報取得したいなと。
なので調べてみました。
・Creating a Custom JMX Client (The Java Tutorials > Java Management Extensions (JMX) > Remote Management)
http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html
※「jmx_examples.zip」クリックするとダウンロードできる "Client.java" を参考に。
■ JMXClient.java
package com.example; import java.io.IOException; import javax.management.JMX; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; public class JMXClient { public static void main(String[] args) { try { JMXConnector jmxc = JMXConnectorFactory.connect(new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://:9999/jmxrmi")); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName mbeanName = new ObjectName("com.example:type=Hello"); HelloMBean mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, HelloMBean.class, true); String hello = mbeanProxy.getHello(); System.out.println(hello); } catch (IOException e) { e.printStackTrace(); } catch (MalformedObjectNameException e) { e.printStackTrace(); } } }
JMXAgent.java は以下のオプション付けて起動しておく。
-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
JMXClient.java を実行するとコンソールに
getHello !!
が出力される。MBean の情報取得できてますね。
以上です。