blob: 18897574498a8cc4d2554288d7313a1bcc8d6da5 [file] [log] [blame]
//
// 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 管理扩展 (JMX) 管理器并连接到远程 JMX 代理
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 开发 Java 管理扩展 (JMX) 管理器并连接到远程 JMX 代理 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 开发 Java 管理扩展 (JMX) 管理器并连接到远程 JMX 代理
*预计时间:30 分钟*
NetBeans JMX 向导模块将 JMX 技术集成到 NetBeans IDE 中的工作流。此模块允许您快速开发管理应用程序,向现有应用程序添加管理,开发管理器应用程序,以及监视虚拟机的状态。
本教程将向您演示如何执行以下操作:
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 开发工具包 (JDK)+] |版本 7 或 8
|JMX 插件 |可从 NetBeans 更新中心获得
|JConsole 插件 |可从 NetBeans 更新中心获得
|===
要安装 *JMX* *JConsole* 插件,请选择“工具”>“插件”,然后从 NetBeans 更新中心下载模块。
=== 资源
== 创建管理样例 Anagram 项目
本练习的目标是创建一个管理器应用程序可连接到的 JMX 代理。JMX 插件包括 JMX 代理样例 Java 项目。在此练习中,您将创建此样例项目,而不是从头开始编写 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)"]
. 单击 "Next"(下一步)。无需更改已有的默认项目名称和位置值。确认选中 "Set as Main Project"(设置为主项目),然后单击 "Finish"(完成)。
== 运行代理
本练习的目标是启动一个启用了 JMX 远程管理的 Java 应用程序。远程管理允许客户端应用程序(JMX 管理器)连接到应用程序(JMX 代理)并可视化管理和监视信息。
*注:*基于 JDK 1.5JDK 1.6 JDK 1.7 运行的任何应用程序均是您可为其启用远程管理的 JMX 代理。
1. 确认 JMXAnagramGame 项目处于选中状态且设置为主项目。
2. 右键单击 "JMXAnagramGame" 项目,然后选择 "Properties"(属性)。
3. 在项目的 "Properties"(属性)对话框中选择 *Monitoring and Management*(监视和管理)类别。
4. 取消选择 *Attach JConsole to Project*(将 JConsole 附加到项目)。
5. 选择 *Enable RMI Remote Access*(启用 RMI 远程访问)。单击 "OK"(确定)。
image::images/jmx-properties1.png[title="项目 &quot;Properties&quot;(属性)对话框中的 &quot;Monitoring and Management&quot;(监视和管理)类别"]
可以提供代理用于等待传入的 JMX 请求的端口。在本教程中,我们只保留默认端口 (1099)。如果您提供了其他端口号,则必须在本教程的每一部分进行适当的更改。另外,在本教程中,我们不指定属性文件。(针对您自己的应用程序,我们将提供一个向导来帮助您创建管理属性文件。)
. 从主菜单中选择 "Debug"(调试)> "Run Main Project with Monitoring and Management"(通过监视和管理运行主项目)以启动 Anagram Game 应用程序。
或者,单击工具栏中的 "Run Main Project with Monitoring and Management"(通过监视和管理运行主项目)按钮 (image::images/run-project24.png[title="&quot;Run Main Project with Monitoring and Management&quot;(通过监视和管理运行主项目)按钮"])。
当您运行该应用程序时,"Anagram Game" 窗口将打开。JVM 在本地主机端口 1099 上监听 RMI 访问。JMX 代理正在运行并等待管理器发送管理请求。
image::images/jmx-anagram.png[title="Anagram Game"]
您可以最小化 Anagram 窗口,但不退出应用程序。
== 创建管理器项目
在此练习中,您将创建一个名为 ``JMXAnagramManager`` Java 应用程序项目,然后使用向导创建可运行的管理器类。
=== 创建项目
1. 选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键)。
2. 选择 "Java" 类别中的 "Java Application"Java 应用程序)。单击 "Next"(下一步)。
image::images/jmx-newjavaproject.png[title="&quot;New Java Project&quot;(新建 Java 项目)向导"]
. 键入 *JMXAnagramManager* 作为项目名称。
. 选择 "Set as Main Project"(设置为主项目)(如果未选中)并取消选择 "Create Main Class"(创建主类)。单击 "Finish"(完成)。
*注:*您将在下一个练习中使用 JMX 管理器向导生成可运行的主类。
单击 "Finish"(完成)后,新项目将添加到 "Projects"(项目)树中。请注意,JMX 管理器项目就像任何其他 Java 应用程序项目一样。
=== 创建可运行的管理器类
在此练习中,您将了解如何使用 JMX 管理器向导生成可运行的管理器类。
1. 确认将 JMXAnagramManager 项目设置为主项目。
2. 选择 "File"(文件)> "New File"(新建文件)(Ctrl-N 组合键;在 Mac 上为 ⌘-N 组合键),然后在 "JMX" 类别中选择 "JMX Manager"JMX 管理器)。单击 "Next"(下一步)。
image::images/jmx-newjmxmanager.png[title="&quot;New File&quot;(新建文件)向导中的 JMX 管理器模板"]
. 键入 *AnagramsManager* 作为类名。
. 键入 *com.toys.anagrams.manager* 作为包名称。
. 确认选中 "Generate Main Method"(生成 main 方法)、"Set as Project Main Class"(设置为项目主类)和 "Generate Sample MBean Discovery Code"(生成样例 MBean 发现代码)。单击 "Next"(下一步)。
. 单击 "Edit"(编辑)以输入要连接到的 JMX 代理 URL
. 接受 "RMI JMX Agent URL"RMI JMX 代理 URL)对话框中的默认值。单击 "OK"(确定)。
"RMI JMX Agent URL"RMI JMX 代理 URL)对话框将帮助您输入有效的 JMX URL(由协议、主机、端口和 URL 路径组成)。
image::images/jmx-jmxagenturl.png[title="&quot;RMI JMX Agent URL&quot;(RMI JMX 代理 URL)对话框中的默认值"]
在协议下拉列表中提供单个元素。"Protocol"(协议)字段是可写的,您可以在该字段中输入自己的协议。默认协议 "RMI JVM Agent"RMI JVM 代理)是用于连接到 JDK JMX 代理的 RMI 协议。您先前在本教程中启动的代理具备此性质。
您需要使用默认主机和端口值,因为代理正在监听 ``localhost:1099`` "URL Path"URL 路径)字段是只读的,并显示如何为 RMI JVM 代理构造路径。自动使用主机和端口值更新 "URL Path"URL 路径)。
单击 "OK"(确定)后,将根据 "RMI JMX Agent URL"RMI JMX 代理 URL)对话框中指定的详细信息使用完整 URL 更新 "JMX Agent URL"JMX 代理 URL)字段。
. 确认选中 "Authenticated Connection"(已验证连接)和 "Generate Sample Code for Authenticated Connection"(为已验证连接生成样例代码)。单击 "Finish"(完成)。
[.feature]
--
image::images/jmx-jmxagenturl2-sm.png[role="left", link="images/jmx-jmxagenturl2.png"]
--
与代理的连接未经过验证,因为您在启动代理时未提供任何验证配置。
单击 "Finish"(完成)后,IDE 将创建管理器类并在编辑器中打开文件。您可以看到 IDE 生成了一些样例代码以生成经过验证的连接。
== 运行管理器
在此练习中,您将了解如何运行管理器并发现 MBean
1. AnagramsManager.java 文件中,取消注释位于 main 方法中的 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.");
}
----
. 在编辑器中右键单击,然后选择“修复导入”(Alt-Shift-I 组合键;在 Mac 上为 ⌘-Shift-I 组合键),以生成所有必要的 import 语句( ``java.util.Set`` ``java.util.Iterator`` )。保存所做的更改。
. 从主菜单中选择“运行”>“运行主项目”。
或者,在“项目”窗口中右键单击 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 管理扩展 (JMX) 分析添加到 Java 应用程序中+]