| // |
| // 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=""New Project"(新建项目)向导中的 "Anagram Game Managed with JMX"(使用 JMX 管理的 Anagram Game)"] |
| |
| |
| . 单击 "Next"(下一步)。无需更改已有的默认项目名称和位置值。确认选中 "Set as Main Project"(设置为主项目),然后单击 "Finish"(完成)。 |
| |
| |
| == 运行代理 |
| |
| 本练习的目标是启动一个启用了 JMX 远程管理的 Java 应用程序。远程管理允许客户端应用程序(JMX 管理器)连接到应用程序(JMX 代理)并可视化管理和监视信息。 |
| |
| *注:*基于 JDK 1.5、JDK 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="项目 "Properties"(属性)对话框中的 "Monitoring and Management"(监视和管理)类别"] |
| |
| 可以提供代理用于等待传入的 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=""Run Main Project with Monitoring and Management"(通过监视和管理运行主项目)按钮"])。 |
| |
| 当您运行该应用程序时,"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=""New Java Project"(新建 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=""New File"(新建文件)向导中的 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=""RMI JMX Agent URL"(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 应用程序中+] |