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
