// 
//     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.
//

= NetBeans IDE 中的 JMX 监视入门指南
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 中的 JMX 监视入门指南 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的 JMX 监视入门指南

NetBeans JMX 模块将 JMX 技术集成到 NetBeans IDE 中的工作流。此模块允许您快速开发管理应用程序，向现有应用程序添加管理，开发管理器应用程序，以及监视虚拟机的状态。

本文档已针对 JMX 向导模块版本 3.0、NetBeans IDE 6.5 及更新版本进行更新，且运行于 JDK 6 或 JDK 7 之上。可以从更新中心下载 JMX 模块。

*注：*此文档简短快速地介绍了 NetBeans IDE 的 JMX 模块。有关更详细信息，请完成 JMX 模块教程link:jmx-tutorial.html[+将 JMX 分析添加到 Java 应用程序中+]。

本入门文档概述了 JMX 模块功能：

image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]

* 用于创建 JMX MBean 和管理器的向导。
* 通过添加属性和操作，实现  ``MBeanRegistration``  接口或实现  ``NotificationEmitter``  接口更新现有 MBean 的操作。
* 根据现有 Java 类的 MBean 生成。
* 用于将 MBean 注册到 Java 平台 MBean 服务器的操作。
* 启动 Java 平台管理控制台 (JConsole) 的功能。
* 使用 JConsole 运行和调试应用程序的功能。
* 向您演示如何将 JMX 功能添加到应用程序的基于 Anagram Game 的样例应用程序。
* 用于生成管理属性文件以允许您启动可管理的安全 JVM 的向导。
* 联机帮助。
* 可从 link:../../index.html[+netbeans.org+] 站点访问的教程。


== 先决条件

本教程假定您具备以下技术的一些基本知识或编程经验。

* 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 开发工具包 (JDK)+] |版本 7 或 8 

|JMX 插件 |可从 NetBeans 更新中心获得 

|JConsole 插件 |可从 NetBeans 更新中心获得 
|===

要安装 *JMX* 和 *JConsole* 插件，请选择“工具”>“插件”，然后从 NetBeans 更新中心下载相应模块。


== 访问 JMX 向导

在安装 JMX 插件并打开您的项目之后，可以通过选择 "File"（文件）> "New File"（新建文件）（Ctrl-N 组合键）并选择 "JMX" 类别来访问 JMX 向导。然后可以从以下项中选择：

* *管理配置文件*。用于存储 JMX 管理（特别是远程连接和安全）的配置的标准 Java 属性文件。
* *几种类型的 JMX MBean*。MBean 可以表示一个设备、一个应用程序或需要托管的任何资源。MBean 公开管理界面：一组可读和/或可写属性和一组可调用操作以及自我描述。在 MBean 实例的整个生命周期内，该管理界面都不会更改。MBean 还会在发生某些定义的事件时发出通知。JMX MBean 需要注册到 MBean 服务器。
* *JMX 管理器*。JMX 管理器是连接到远程 JMX MBean 服务器的任何应用程序。
image::images/jmx-newfile.png[title="JMX 类别中的新建文件向导"]


== 更新 MBean

可以使用 JMX 上下文菜单操作（将弹出一个对话框）来向 MBean 添加属性和操作。也可以让 MBean 实现  ``NotificationEmitter``  接口。

要更新 MBean，请在 "Project"（项目）树中选择 MBean 类 Java 文件并通过右键单击相应节点来访问 JMX 弹出菜单，或者在打开了 MBean 类 Java 文件的编辑器窗口中简单右键单击并访问 JMX 弹出菜单。

在link:jmx-tutorial.html#Exercise_3[+将 JMX 分析添加到 Java 应用程序中+]教程的练习 3 中演示了这些操作。


== 注册 MBean

要远程连接到 MBean 并管理您的应用程序，需要将 MBean 注册到 MBean 服务器中。

MBean 服务器是 JMX 技术的主要的核心部分。该服务器保持引用注册到其中的所有 MBean，可以发送有关新 MBean 注册或删除操作的通知，并且可以接受远程连接以公开其注册的 MBean 的属性和操作。如果您不熟悉 MBean 服务器角色，请阅读 `` link:http://download.oracle.com/javase/6/docs/api/javax/management/MBeanServer.html[+javax.management.MBeanServer+]``  API 文档。

从 JDK 5 开始，Java 平台提供一个称为“平台 MBean 服务器”的默认 MBean 服务器。使用该服务器，您可以监视 JVM，也可以将您自己的 MBean 注册到其中。有关 Java 平台 MBean 服务器的详细信息，请阅读 `` link:http://download.oracle.com/javase/6/docs/api/java/lang/management/ManagementFactory.html[+java.lang.management.ManagementFactory +]``  API 文档。

根据逻辑，确定希望将 MBean 注册到的应用程序代码位置，通常是在主类的初始化阶段。在编辑器窗口中右键单击希望生成 MBean 注册代码的位置，选择 "JMX" 子菜单，然后选择 "Generate MBean Registration..."（生成 MBean 注册...）操作。

在link:jmx-tutorial.html#Exercise_5[+将 JMX 分析添加到 Java 应用程序中+]教程的练习 5 中演示了此操作。


== 实现并执行可管理的应用程序

JConsole 是 JMX 兼容的图形工具，用于监视 Java 虚拟机。JConsole 可以监视本地和远程 JVM，并且可以用于监视和管理 JMX 应用程序。

通常，实现并执行可管理的应用程序的工作流如下所示：

1. 生成 MBean。
2. 向 MBean 添加实现
3. 生成 MBean 的注册代码。
4. 使用 JConsole 运行或调试项目。

安装 JMX 和 JConsole 插件后，您将会看到工具栏上添加了以下按钮。也可以在主菜单中的 "Debug"（调试）菜单项下访问这些操作。

|===
|按钮 |描述 

|image::images/run-project24.png[title="&quot;Run Main Project with Monitoring and Management&quot;（通过监视和管理运行主项目）按钮"] |通过监视和管理运行主项目 

|image::images/debug-project24.png[title="&quot;Debug Main Project with Monitoring and Management&quot;（通过监视和管理调试主项目）按钮"] |通过监视和管理调试主项目 

|image::images/console24.png[title="&quot;Start JConsole Management Console&quot;（启动 JConsole 管理控制台）按钮"] |启动 JConsole 管理控制台 
|===

*注：*JConsole 是 Java 平台的一部分，可以独立于 IDE 进行使用。有关详细信息，请参阅以下资源。

* link:http://download.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html[+ ``jconsole``  手册页+]
* link:http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html[+使用 JConsole 文档+]


== 运行样例应用程序

JMX 模块包含其中内置了 JMX 监视的样例应用程序。

1. 选择 "File"（文件）> "New Project"（新建项目）。
2. 在 "Samples"（样例）中，选择 "JMX" 类别。
3. 选择 "Anagram Game Managed with JMX"（使用 JMX 管理的 Anagram Game）项目。
image::images/jmx-newproject.png[title="&quot;New Project&quot;（新建项目）向导中的 &quot;Anagram Game Managed with JMX&quot;（使用 JMX 管理的 Anagram Game）"]

[start=4]
. 单击 "Next"（下一步）。无需更改提供的默认项目名称或位置值。确认 "Set as Main Project"（设置为主项目）复选框处于选中状态。单击 "Finish"（完成）。

*注：*如果您以前未安装 JUnit 插件，则 IDE 可能会提示您安装 JUnit 库。您可以单击 "Resolve Resource Problems"（解决资源问题）对话框中的 "Resolve"（解决）启动安装程序来安装 JUnit 插件。或者，您也可以在插件管理器中安装 JUnit 插件。


[start=5]
. 创建项目并将其设置为主项目之后，通过单击 "Run Main Project with Monitoring and Management"（通过监视和管理运行主项目）JConsole 按钮使用 JConsole 运行该项目。

*注：*当 Java 监视和管理控制台尝试连接到 Anagram Game 进程时，您可能会在此控制台中看到 "Connection Failed"（连接失败）警告。对于本教程，当系统提示您授权连接时，您可以单击 "Insecure"（不安全）。

单击此按钮将启动并显示 Anagram Game：

image::images/jmx-anagram.png[title="Anagram Game"]

也将显示 "JConsole" 窗口。


[start=6]
. 在 "JConsole" 窗口中，选择 "MBean" 标签，然后在左侧的树布局中向下打开  ``anagrams.toy.com``  下的所有节点，如下所示。
image::images/jmx-jconsole1.png[title="&quot;JConsole&quot; 窗口"]

[start=7]
. 选择 "Notifications"（通知）节点，然后单击底部的 "Subscribe"（订阅）按钮，这样在 Anagram 每次得到解决时 JConsole 都将会收到新通知。

[start=8]
. 现在转到 "Anagrams Game" 窗口，然后解决前三个或前四个 Anagram（答案位于 WordLibrary 类中，而此处它们是：abstraction、ambiguous、arithmetic、backslash...）

[start=9]
. 返回 JConsole，注意它收到了四个通知。

[start=10]
. 单击 "Attributes"（属性）节点，可以看到更新了属性值：
image::images/jmx-jconsole2.png[title="显示已更新值的 &quot;JConsole&quot; 窗口"]
link:/about/contact_form.html?to=3&subject=Feedback:%20Getting%20Started%20with%20JMX%20Monitoring[+发送有关此教程的反馈意见+]



== 另请参见

此文档简短快速地介绍了 NetBeans IDE 的 JMX 模块。有关更详细信息，请参见以下 JMX 模块教程：

* link:jmx-tutorial.html[+将 JMX 分析添加到 Java 应用程序中+]
