JMX
JMX (Java Management Extension) は JSR-003 で策定された、アプリケーション管理のためのフレームワークの仕様です。開発者は、アプリケーションの管理を行うために MBean と呼ばれる、アプリケーションを管理するためのコンポーネントを作成します。 JMX に準拠したアプリケーション サーバは、 MBean に様々な手段でアクセスする方法を提供します (HTML ブラウザ、管理コンソールなど) 。
MBean には種類があります。
Standard MBean は以下のルールで構成されます。
例えば、
というクラスを管理クラスとすると、
MBeanServer#createMBean メソッドを呼び出すことで、 MBean サーバ内に MBean が作成されます。
MBean が公開するプロパティにアクセスするには、 MBeanServer#getAttribute 、 MBeanServer#setAttribute メソッドを呼び出します。
MBean が公開するメソッドを呼び出すには MBeanServer#invoke メソッドを呼び出します。
MX4J は JMX 実装の 1 つです。 MX4J は HTTP ベースの管理コンソールを提供しています。それは HttpAdaptor という MBean です。以下に、これを使用する方法を示します。
独自の MBean を作成する
MBean には種類があります。
Standard MBean | インターフェイスが静的な MBean 。 |
Dynamic MBean | インターフェイスが動的な MBean 。 ModelMBean 、 OpenMBean という 2 つのサブクラスがあります。 |
Stadard MBean
Standard MBean は以下のルールで構成されます。
- 管理クラスが公開するプロパティ (にアクセスする setter/getter メソッド) 、メソッドを定義したインターフェイスを作成する。
- 名前は「管理クラス + MBean」。
- 管理クラスを作成する。
- public なデフォルト コンストラクタを持つ。
- インターフェイスを実装する (implements する) 必要はない。同じメソッドを持てば良い。
例えば、
--------------- Foo --------------- + name : String --------------- + say() : void ---------------
というクラスを管理クラスとすると、
- インターフェイス
public interface FooMBean { String getName(); void setName(String name); void say(); }
- 管理クラス (実際は FooMBean を implements する必要はありません)
public class Foo implements FooMBean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void say() { System.out.println("hello, jmx world!"); } }
作成した MBean を使用する
MBeanServer#createMBean メソッドを呼び出すことで、 MBean サーバ内に MBean が作成されます。
ObjectName nm = new ObjectName("MBean:name=Foo"); server.createMBean("jp.gr.java_conf.uguu.sample_jmx_for_mx4j.Foo", nm, null);
MBean が公開するプロパティにアクセスするには、 MBeanServer#getAttribute 、 MBeanServer#setAttribute メソッドを呼び出します。
Object value = server.getAttribute(nm, "name");
server.setAttribute(nm, new Attribute("name", "foo"));
MBean が公開するメソッドを呼び出すには MBeanServer#invoke メソッドを呼び出します。
server.invoke(nm, "say", null, null);
MX4J の HttpAdaptor を使用する
MX4J は JMX 実装の 1 つです。 MX4J は HTTP ベースの管理コンソールを提供しています。それは HttpAdaptor という MBean です。以下に、これを使用する方法を示します。
package jp.gr.java_conf.uguu.sample_jmx_for_mx4j; import java.io.IOException; import javax.management.Attribute; import javax.management.AttributeNotFoundException; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.InvalidAttributeValueException; import javax.management.MBeanException; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import javax.management.ReflectionException; public class JMXMain { public static void main(String[] args) throws MalformedObjectNameException, InstanceAlreadyExistsException, NotCompliantMBeanException, InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException, IOException { MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName fooName = new ObjectName("MBean:name=Foo"); server.createMBean("jp.gr.java_conf.uguu.sample_jmx_for_mx4j.Foo", fooName, null); ObjectName xsltName = new ObjectName("Server:name=XSLTProcessor"); server.createMBean("mx4j.tools.adaptor.http.XSLTProcessor", xsltName, null); ObjectName httpName = new ObjectName("Server:name=HttpAdaptor"); server.createMBean("mx4j.tools.adaptor.http.HttpAdaptor", httpName, null); server.setAttribute(httpName, new Attribute("Port", new Integer(8888))); server.setAttribute(httpName, new Attribute("ProcessorName", xsltName)); server.invoke(httpName, "start", null, null); } }
参照
2005年12月07日(水) 22:28:03 Modified by uguuxp