質問
を探しています:
- JMX とは何ですか。
- 良いJMXチュートリアルを見つけることができます。
- JMXがJava EEプログラマーとして私に提供できるもの。
- 私が知っておくべき他の何か。
解決
JMXは、アプリケーションの実行時の状態を表示および操作する方法です。それが助け場合は、SNMPの概念と多少似ています。 IMO、それは監視およびログファイルへの書き込みのほか、他のユーザーインターフェイスを持っていない可能性があり、サーバー型のアプリケーションを理解するために不可欠です。
基本的なアプローチは、その後、実際に利用可能なインタフェースで定義されたものを作るた(その後、「MBeanServerの」と、そのクラスのインスタンスを登録し、クラスがインタフェースを実装していて、監視したいもののためのインタフェースを作成することです)のjconsoleなどのJMX監視アプリケーションにます。
ここだ些細な - しかし、作業 - 例:
(私は、Java 5以上を想定しています)。
TestServerMBean.java
public interface TestServerMBean
{
public long getUptimeMillis();
public long getFooCount();
public void setFooCount(long val);
public void printStuff(String stuff);
}
TestServer.java:
import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;
import javax.management.ObjectName;
// If jconsole doesn't see this app automatically, invoke the application with the following java flags, and connect
// 'remotely' via jconsole.
//
// -Dcom.sun.management.jmxremote
// -Dcom.sun.management.jmxremote.port=2222 (or whatever)
// -Dcom.sun.management.jmxremote.authenticate=false
// -Dcom.sun.management.jmxremote.ssl=false
public class TestServer implements TestServerMBean
{
private final AtomicLong m_counter = new AtomicLong(0L);
private final long m_startTimeMillis = System.currentTimeMillis();
public void run() throws InterruptedException {
while (true) {
m_counter.incrementAndGet();
Thread.sleep(5000);
}
}
public long getFooCount() {
return m_counter.get();
}
public void setFooCount(long val) {
m_counter.set(val);
}
public long getUptimeMillis() {
return System.currentTimeMillis() - m_startTimeMillis;
}
public void printStuff(String stuff) {
System.out.println(stuff);
}
public static void main(String[] args) throws Exception {
TestServer ts = new TestServer();
ManagementFactory.getPlatformMBeanServer().registerMBean(ts, new ObjectName("myapp:service=MyServer"));
ts.run();
}
}
コンパイルし、実行TestServer.classをいつものように、jconsole
を起動し、(それが自動的に表示されます、他に上記のコード内のコメントを参照してください)TESTSERVERに接続し、その後、「MBeanの」タブを見て、あなたは私たちわかりますインスタンスがmyapp:service=MyServer
命名します。あなたは、現在の「稼働時間」を表示し、5秒ごとにFooCounter
増分を見ることができます。また、あなたが好きな(長い)の値にFooCounterを設定し、任意の文字列引数でprintStuff
メソッドを呼び出すことができます。
これは明らかにばかげた「サーバ」ですが、うまくいけば簡単な作業例を持つことは、全体的な概念を示し役立ちます。実行中のアプリを覗いて操作することができることを
があり、追加機能とのMBeanの異なる種類の多くがありますが、ちょうど上に示したバニラJMXはIMO、長い道のりを行く。
他のヒント
は、簡単に言えばJMXでリモートメソッドを呼び出すか、実行しているJVMの内部から露出データを表示することを可能にします。アプリケーションの多くは、一種のリモート管理を提供するために、その実行中のJVMにリモートダッシュボードを接続するためにJMXを使用します。
あなたはJMXで、マシン上で実行しているアプリケーションサーバーを持っていた場合は、たとえば、リモートからそのサーバに関する公開情報を閲覧することが可能です。あなたのアプリケーション内の任意の変数やメソッドを公開することができ、独自のJMX MBeanをコーディングすることも可能です。曝露変数はその後、遠隔地について、あなたは知りたいのですが、特定の条件をテストするために、「ポーリング」することができます。
JMXについてのもう一つの便利なところは、リモートからその場で変数を変更することができるということです。あなたは最大合計量が設定プールのいくつかの並べ替えを持っている場合たとえば、この最大量は、アプリケーションサーバー上の任意のコンフィギュレーションファイルを再起動するか、変更することなくリモートで変更することができます。
jconsole
は、簡単に自分のクライアントソリューションをコーディングすることなく、リモートでMBeanを表示できるようにするJavaとSunが提供されます。あなたはまた、あなたの優れた柔軟性を与えることができるカスタムソリューションでMBeanを消費する可能性があります。
また、カップルに名前を付け、これを行う。Zenossとアプリケーションマネージャ8に建てられたJMX MBeanの監視が付属していくつかの監視ソフトウェア、既に存在します。
を追加:の
JMXを利用してソフトウェアの多くは、すでに存在しています。 Tomcatは、jconsoleを経由してアクセス可能である情報を公開するので、JBossアプリケーションサーバが行います。
たぶん、JSR 262はまた、ここで言及される価値がある。
「JSR 262は、リモートでのJMX計測機器を使用できるようにするには、Webサービスを使用して、JMXリモートAPI用のコネクタを定義します。クライアントはJavaアプリケーションである必要はありませんが、することができます。」
JSR 262は、次のバージョンのJava(Javaの7)の一部になる可能性が非常に高いです。
依存 JMX WSコネクタのjava.netプロジェクトがありますワイズマンプロジェクトの上。ワイズマンは、WS-Managementの標準のオープンソースのJava実装です。
ここにいくつかの適切な Web リソースがあります。
これらは、最初のJMX上に読み込むときに、私は読んで2つです。
日チュートリアル: http://java.sun.com/ドキュメント/書籍/チュートリアル/ JMX / index.htmlをする
春2.5 / JMX:ます。http://静的。 springframework.org/spring/docs/2.5.x/reference/jmx.htmlする
それとも、私がリストに数日前にそれを更新し、右ここにStackOverflow上こののJMXタグのwikiを見に行くことができますほとんど何を聞くと、いくつかの貢献追加情報: