// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Java Management Extensions (JMX)マネージャの開発およびリモートJMXエージェントへの接続
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Java Management Extensions (JMX)マネージャの開発およびリモートJMXエージェントへの接続 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Java Management Extensions (JMX)マネージャの開発およびリモートJMXエージェントへの接続

*予想される所要時間: 30分*

NetBeans JMXウィザード・モジュールは、NetBeans IDEでJMXテクノロジとワークフローを統合します。このモジュールを使用すると、管理アプリケーションの迅速な開発、既存アプリケーションへの管理の追加、マネージャ・アプリケーションの開発、仮想マシンの状態のモニターが可能になります。

このチュートリアルでは、次の処理を行う方法を示します。

1. JMXエージェントを起動し、リモートのJMXマネージャからアクセスできるようにします。
2. JMXマネージャを作成します。
3. マネージャを実行します。
4. マネージャを更新し、独自の管理ロジックを追加します。


=== チュートリアルの課題

image::images/netbeans-stamp-80-74-73.png[title="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます"]

* <<Exercise_1,管理サンプルAnagramプロジェクトの作成>>
* <<Exercise_2,エージェントの実行>>
* <<Exercise_3,マネージャ・プロジェクトの作成>>
* <<Exercise_3,プロジェクトの作成>>
* <<Exercise_4,実行可能マネージャ・クラスの作成>>
* <<Exercise_5,マネージャの実行>>


=== 前提条件

このチュートリアルは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。

* JMXテクノロジ: link:http://download.oracle.com/javase/6/docs/technotes/guides/jmx/index.html[+JMXオンライン・ドキュメント+]
* Javaテクノロジ: link:http://www.oracle.com/technetwork/java/javase/tech/index.html[+Java SEテクノロジ早見表+]
* NetBeans IDE

link:http://download.oracle.com/javase/6/docs/technotes/guides/management/index.html[+Javaプラットフォームのモニタリングおよび管理+]の内容が参考になる場合もあります。


=== チュートリアルに必要なソフトウェア

このチュートリアルでは、コンピュータに次のソフトウェアをインストールしておく必要があります。

|===
|ソフトウェアまたはリソース |必須バージョン 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2、7.3、7.4、8.0、Javaバージョン 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |バージョン7または8 

|JMXプラグイン |NetBeans更新センターから入手可能 

|JConsoleプラグイン |NetBeans更新センターから入手可能 
|===

*JMX*および*JConsole*のプラグインをインストールするには、「ツール」>「プラグイン」を選択し、NetBeansアップデート・センターからモジュールをダウンロードします。


=== リソース



== 管理サンプルAnagramプロジェクトの作成

この課題の目標は、マネージャ・アプリケーションが接続できるJMXエージェントを作成することです。JMXプラグインには、JMXエージェント・サンプルJavaプロジェクトが含まれています。この課題では、JMXエージェントを一から記述するのではなく、このサンプル・プロジェクトを作成します。

1. 「ファイル」>「新規プロジェクト」を選択します。
2. 「サンプル」でJMXカテゴリを選択します。
3. JMXで管理されたアナグラム・ゲーム・プロジェクトを選択します。
image::images/jmx-newproject.png[title="新規プロジェクト・ウィザードのJMXで管理されたアナグラム・ゲーム"]
4. 「次」をクリックします。既存のデフォルトのプロジェクト名と場所の値を変更する必要はありません。「メイン・プロジェクトとして設定」が選択されていることを確認し、「終了」をクリックします。


== エージェントの実行

この課題の目標は、JMXリモート管理を有効にしてJavaアプリケーションを起動することです。リモート管理では、クライアント・アプリケーション(JMXマネージャ)からアプリケーション(JMXエージェント)に接続し、管理およびモニタリング情報を視覚化できます。

*注意:*JDK 1.5、JDK 1.6またはJDK 1.7に基づいて実行されているアプリケーションは、リモート管理を有効にできるJMXエージェントです。

1. JMXAnagramGameプロジェクトが選択され、メイン・プロジェクトとして設定されていることを確認します。
2. JMXAnagramGameプロジェクトを右クリックし、「プロパティ」を選択します。
3. プロジェクトの「プロパティ」ダイアログで*モニタリングおよび管理*カテゴリを選択します。
4. *「JConsoleをプロジェクトにアタッチ」*を選択解除します。
5. *「RMIリモート・アクセスの有効化」*を選択します。「OK」をクリックします。
image::images/jmx-properties1.png[title="「プロジェクト・プロパティ」ダイアログの「モニタリングおよび管理」カテゴリ"]

エージェントが受信JMXリクエストを待機するポートを指定できます。このチュートリアルでは、デフォルト・ポート(1099)のままにします。別のポート番号を指定する場合は、このチュートリアルの各部分で適切な変更を行う必要があります。また、このチュートリアルでは、プロパティ・ファイルも指定しません。(独自のアプリケーションの場合、管理プロパティ・ファイルの作成に役立つウィザードが提供されます。)

6. メイン・メニューから「デバッグ」>「モニタリングと管理付きでメイン・プロジェクトを実行」を選択し、Anagram Gameアプリケーションを起動します。

あるいは、ツールバーの「モニタリングと管理付きでメイン・プロジェクトを実行」ボタン(image::images/run-project24.png[title="モニタリングおよび管理によるメイン・プロジェクトの実行のボタン"])をクリックします。

アプリケーションを実行すると、「Anagram Game」ウィンドウが開きます。JVMは、ローカル・ホスト・ポート1099でRMIアクセスをリスニングしています。JMXエージェントが実行され、マネージャから管理リクエストが送信されるのを待機しています。

image::images/jmx-anagram.png[title="アナグラム・ゲーム"]

「Anagrams」ウィンドウを最小化できますが、アプリケーションを終了しないでください。


== マネージャ・プロジェクトの作成

この課題では、 ``JMXAnagramManager`` という名前のJavaアプリケーション・プロジェクトを作成し、ウィザードを使用して実行可能なマネージャ・クラスを作成します。


=== プロジェクトの作成

1. 「ファイル」>「新規プロジェクト」([Ctrl]-[Shift]-[N])を選択します。
2. 「Java」カテゴリで「Javaアプリケーション」を選択します。「次」をクリックします。
image::images/jmx-newjavaproject.png[title="新規Javaプロジェクト・ウィザード"]
3. プロジェクト名として*「JMXAnagramManager」*と入力します。
4. 「メイン・プロジェクトとして設定」を選択し(選択されていない場合)、「メイン・クラスの作成」を選択解除します。「終了」をクリックします。

*注意:*次の課題で、JMXマネージャ・ウィザードを使用してメインの実行可能クラスを生成します。

「終了」をクリックすると、新しいプロジェクトが「プロジェクト」ツリーに追加されます。JMXマネージャ・プロジェクトは他のJavaアプリケーション・プロジェクトと変わらないことに注意してください。


=== 実行可能マネージャ・クラスの作成

この課題では、JMXマネージャ・ウィザードを使用して実行可能マネージャ・クラスを作成する方法を学習します。

1. JMXAnagramManagerプロジェクトがメイン・プロジェクトとして設定されていることを確認します。
2. 「ファイル」>「新規ファイル」([Ctrl]-[N]、Macの場合は[⌘]-N)を選択し、「JMX」カテゴリで「JMXマネージャ」を選択します。「次」をクリックします。
image::images/jmx-newjmxmanager.png[title="新規ファイル・ウィザードのJMXマネージャ・テンプレート"]
3. クラス名として*「AnagramsManager」*と入力します。
4. パッケージ名として*「com.toys.anagrams.manager」*と入力します。
5. 「mainメソッドを生成」、「プロジェクトのメイン・クラスとして設定」および「サンプルMBean検出コードの生成」が選択されていることを確認します。「次」をクリックします。
6. 「編集」をクリックして、接続するJMXエージェントURLを入力します。
7. RMI JMXエージェントURLダイアログ・ボックスでデフォルト値を受け入れます。「OK」をクリックします。

RMI JMXエージェントURLダイアログ・ボックスは、プロトコル、ホスト、ポートおよびURLパスで構成される有効なJMX URLの入力に有用です。

image::images/jmx-jmxagenturl.png[title="RMI JMXエージェントURLダイアログ・ボックスでのデフォルト値"]

「プロトコル」ドロップダウン・リストには1つの要素が表示されています。「プロトコル」フィールドは書込み可能で、独自のプロトコルを入力できます。デフォルト・プロトコルであるRMI JVMエージェントは、JDK JMXエージェントへの接続に使用されるRMIプロトコルです。このチュートリアルでこれより前に起動したエージェントは、この種のエージェントです。

エージェントは ``localhost:1099`` でリスニングしているため、デフォルトのホストとポートの値を使用します。URLパス・フィールドは読取り専用で、RMI JVMエージェントのパスの構成が表示されます。URLパスは、ホストとポートの値で自動的に更新されます。

「OK」をクリックすると、RMI JMXエージェントURLダイアログ・ボックスで指定された詳細に基づいた完全なURLでJMXエージェントURLフィールドが更新されます。

8. 「認証された接続」および「認証された接続に対するサンプル・コードの生成」が選択されていることを確認します。「終了」をクリックします。
[.feature]
--
image::images/jmx-jmxagenturl2-sm.png[role="left", link="images/jmx-jmxagenturl2.png"]
--

エージェントの起動時に認証構成を指定しなかったため、エージェントへの接続は認証されません。

「終了」をクリックすると、IDEでマネージャ・クラスが作成され、エディタでファイルが開きます。認証された接続を生成できるようにするサンプル・コードが生成されたことを確認できます。


== マネージャの実行

この課題では、マネージャを実行し、MBeanを検出する方法を学習します。

1. AnagramsManager.javaファイルで、メイン・メソッドにあるMBean検出コードのコメントを解除します。次のようなコードになります。

[source,java]
----

    public static void main(String[] args) throws Exception {
        
        //Manager instantiation and connection to the remote agent
        AnagramsManager manager = AnagramsManager.getDefault();

        // SAMPLE MBEAN NAME DISCOVERY. Uncomment following code:
          Set resultSet =
          manager.getMBeanServerConnection().queryNames(null, null);
          for(Iterator i = resultSet.iterator(); i.hasNext();) {
          System.out.println("MBean name: " + i.next());
          } 

        // Close connection
        manager.close();
        System.out.println("Connection closed.");
    }
      
----
2. エディタで右クリックして「インポートを修正」([Alt]-[Shift]-[I]、Macの場合は[⌘]-[Shift]-[I])を選択し、必要なインポート文( ``java.util.Set`` および ``java.util.Iterator`` )を生成します。変更を保存します。
3. メイン・メニューから「実行」>「メイン・プロジェクトの実行」を選択します。

または、「プロジェクト」ウィンドウでJMXAnagramManagerプロジェクト・ノードを右クリックし、「実行」を選択します。

「実行」を選択すると、JMXAnagramManagerアプリケーションが起動してリモート・エージェントに接続します。「出力」ウィンドウに検出されたMBean名を表示して、接続を閉じます。

プロジェクトがコンパイルされ、マネージャが起動されます。検出された ``ObejctNames`` が「出力」ウィンドウに表示されます。 ``AnagramsStats``  MBeanとJava VM MBeanが認められます。すべてのJava VM標準MBeanは、 ``java.lang``  JMXドメイン下にあります。

JMXAnagramManagerの実行のNetBeansの「出力」ウィンドウは次のような表示になります。


[source,java]
----

init:
deps-jar:
compile:
run:
MBean name: java.lang:type=MemoryManager,name=CodeCacheManager
MBean name: java.lang:type=Compilation
MBean name: java.lang:type=MemoryPool,name=PS Perm Gen
MBean name: com.sun.management:type=HotSpotDiagnostic
MBean name: java.lang:type=Runtime
MBean name: com.toy.anagrams.mbeans:type=AnagramsStats
MBean name: java.lang:type=ClassLoading
MBean name: java.lang:type=Threading
MBean name: java.lang:type=MemoryPool,name=PS Survivor Space
MBean name: java.util.logging:type=Logging
MBean name: java.lang:type=OperatingSystem
MBean name: java.lang:type=Memory
MBean name: java.lang:type=MemoryPool,name=Code Cache
MBean name: java.lang:type=GarbageCollector,name=PS Scavenge
MBean name: java.lang:type=MemoryPool,name=PS Eden Space
MBean name: JMImplementation:type=MBeanServerDelegate
MBean name: java.lang:type=GarbageCollector,name=PS MarkSweep
MBean name: java.lang:type=MemoryPool,name=PS Old Gen
Connection closed.
BUILD SUCCESSFUL (total time: 1 second)

----

*これで終了です。よくできました。*
このチュートリアルが、JMXによってエクスポートされた情報にアクセスするためのマネージャ・アプリケーションの開発方法の理解に役立っていれば幸いです。

link:/about/contact_form.html?to=3&subject=Feedback:%20Developing%20a%20Java%20Management%20Extensions%20Manager[+このチュートリアルに関するご意見をお寄せください+]



== 関連項目

詳細は、次を参照してください:

* link:jmx-getstart.html[+NetBeans IDEでのJMXモニタリングの開始+]
* link:jmx-tutorial.html[+JavaアプリケーションへのJava Management Extensions (JMX)インストゥルメントの追加+]
