1 <!-- 2 Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. 3 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 5 This code is free software; you can redistribute it and/or modify it 6 under the terms of the GNU General Public License version 2 only, as 7 published by the Free Software Foundation. Oracle designates this 8 particular file as subject to the "Classpath" exception as provided 9 by Oracle in the LICENSE file that accompanied this code. 10 11 This code is distributed in the hope that it will be useful, but WITHOUT 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 version 2 for more details (a copy is included in the LICENSE file that 15 accompanied this code). 16 17 You should have received a copy of the GNU General Public License version 18 2 along with this work; if not, write to the Free Software Foundation, 19 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 21 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 or visit www.oracle.com if you need additional information or have any 23 questions. 24 --> 25 26 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 27 <html> 28 <body bgcolor="white"> 29 30 Provides the management interface for monitoring and management of the 31 Java virtual machine as well as the operating system on which the 32 Java virtual machine is running. It allows both local and remote 33 monitoring and management of the running Java virtual machine. 34 35 <h4>Platform MXBeans</h4> 36 37 This package defines the management interface of the following 38 components: 39 40 <blockquote> 41 <table cellspacing=1 summary="Description of the MBeans"> 42 <tr> 43 <th><p align="left">Management Interface</p></th> 44 <th><p align="left">Description</p></th> 45 </tr> 46 <tr> 47 <td> <tt>{@link java.lang.management.ClassLoadingMXBean}</tt> </td> 48 <td> Class loading system of the Java virtual machine.</td> 49 </tr> 50 <tr> 51 <td> <tt>{@link java.lang.management.CompilationMXBean}</tt> </td> 52 <td> Compilation system of the Java virtual machine.</td> 53 </tr> 54 <tr> 55 <td> <tt>{@link java.lang.management.MemoryMXBean}</tt> </td> 56 <td> Memory system of the Java virtual machine.</td> 57 </tr> 58 <tr> 59 <td> <tt>{@link java.lang.management.ThreadMXBean}</tt> </td> 60 <td> Threads system of the Java virtual machine.</td> 61 </tr> 62 <tr> 63 <td> <tt>{@link java.lang.management.RuntimeMXBean}</tt> </td> 64 <td> Runtime system of the Java virtual machine.</td> 65 </tr> 66 <tr> 67 <td> <tt>{@link java.lang.management.OperatingSystemMXBean}</tt> </td> 68 <td> Operating system on which the Java virtual machine is running.</td> 69 </tr> 70 <tr> 71 <td> <tt>{@link java.lang.management.GarbageCollectorMXBean}</tt> </td> 72 <td> Garbage collector in the Java virtual machine.</td> 73 </tr> 74 <tr> 75 <td> <tt>{@link java.lang.management.MemoryManagerMXBean}</tt> </td> 76 <td> Memory manager in the Java virtual machine.</td> 77 </tr> 78 <tr> 79 <td> <tt>{@link java.lang.management.MemoryPoolMXBean}</tt> </td> 80 <td> Memory pool in the Java virtual machine.</td> 81 </tr> 82 </table> 83 </blockquote> 84 85 <p> 86 A platform MXBean is a <i>managed bean</i> that defines the management 87 interface for one component for the platform and is specified in the 88 <a href="ManagementFactory.html#MXBean"> 89 ManagementFactory</a> class. 90 91 <p>An application can monitor the instrumentation of the 92 Java virtual machine and manage certain characteristics in 93 the following ways: 94 <ul> 95 <li><i>Direct access to an MXBean interface</i> 96 <ol type="a"> 97 <li>Get the MXBean instance through the static factory method 98 and access the MXBean interface locally of the running 99 virtual machine.</li> 100 <li>Construct an MXBean proxy instance that 101 forwards the method calls to a given 102 {@link javax.management.MBeanServer MBeanServer} 103 by calling 104 {@link java.lang.management.ManagementFactory#newPlatformMXBeanProxy 105 ManagementFactory.newPlatformMXBeanProxy}. 106 A proxy is typically constructed to remotely access 107 an MXBean of another running virtual machine.</li> 108 </ol></li> 109 <li><i>Indirect access via {@link javax.management.MBeanServer MBeanServer} 110 interface</i> 111 <ol type="a"> 112 <li>Go through the 113 {@link java.lang.management.ManagementFactory#getPlatformMBeanServer 114 platform MBeanServer} to access MXBeans locally or 115 a specific <tt>MBeanServerConnection</tt> to access 116 MXBeans remotely. 117 The attributes and operations of an MXBean use only 118 <em>JMX open types</em> which include basic data types, 119 {@link javax.management.openmbean.CompositeData CompositeData}, 120 and {@link javax.management.openmbean.TabularData TabularData} 121 defined in {@link javax.management.openmbean.OpenType OpenType}. 122 </li> 123 </ol></li> 124 </ul> 125 126 Below shows a few <a href="#examples">examples</a> of different 127 ways to access MXBeans. 128 129 <h4>ManagementFactory</h4> 130 131 The {@link java.lang.management.ManagementFactory} class is the management 132 factory class for the Java platform. This class provides a set of 133 static factory methods to obtain the MXBeans for the Java platform 134 to allow an application to access the MXBeans directly. 135 136 <p>A <em>platform MBeanServer</em> can be accessed with the 137 {@link java.lang.management.ManagementFactory#getPlatformMBeanServer 138 getPlatformMBeanServer} method. On the first call to this method, 139 it creates the platform MBeanServer and registers all platform MXBeans 140 including platform MXBeans defined in other packages such as 141 {@link java.util.logging.LoggingMXBean}. 142 Each platform MXBean is registered with a unique name defined in the 143 {@link java.lang.management.ManagementFactory ManagementFactory} class 144 for constructing {@link javax.management.ObjectName ObjectName}. 145 This is a single MBeanServer that can be shared by different managed 146 components running within the same Java virtual machine. 147 148 <h4>Interoperability</h4> 149 150 A management application and a platform MBeanServer of a running 151 virtual machine can interoperate 152 without requiring classes used by the platform MXBean interfaces. 153 The data types being transmitted between the JMX connector 154 server and the connector client are JMX 155 {@link javax.management.openmbean.OpenType open types} and 156 this allows interoperation across versions. 157 158 <p>A data type used by the MXBean interfaces are mapped to 159 an open type when being accessed via MBeanServer interface. 160 The data type mapping is specified in the 161 {@link java.lang.management.ManagementFactory ManagementFactory} class. 162 163 <h4><a name="examples">Ways to Access MXBeans</a></h4> 164 165 There are three different ways to access the management interfaces. 166 167 <p> 168 <ol> 169 <li>Call the methods in the MXBean directly within the same 170 Java virtual machine. 171 <blockquote><pre> 172 RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); 173 174 // Get the standard attribute "VmVendor" 175 String vendor = mxbean.getVmVendor(); 176 177 </pre> 178 </blockquote> 179 </li> 180 181 <li>Go through a <tt>MBeanServerConnection</tt> connecting 182 to the <tt>platform MBeanServer</tt> of a running virtual machine.</li> 183 <blockquote><pre> 184 MBeanServerConnection mbs; 185 186 // Connect to a running JVM (or itself) and get MBeanServerConnection 187 // that has the JVM MXBeans registered in it 188 ... 189 190 try { 191 // Assuming the RuntimeMXBean has been registered in mbs 192 ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 193 194 // Get standard attribute "VmVendor" 195 String vendor = (String) mbs.getAttribute(oname, "VmVendor"); 196 } catch (....) { 197 // Catch the exceptions thrown by ObjectName constructor 198 // and MBeanServer.getAttribute method 199 ... 200 } 201 202 </pre></blockquote> 203 204 <li>Use MXBean proxy.</li> 205 <blockquote><pre> 206 MBeanServerConnection mbs; 207 208 // Connect to a running JVM (or itself) and get MBeanServerConnection 209 // that has the JVM MBeans registered in it 210 ... 211 212 // Get a MBean proxy for RuntimeMXBean interface 213 RuntimeMXBean proxy = 214 ManagementFactory.newPlatformMXBeanProxy(mbs, 215 ManagementFactory.RUNTIME_MXBEAN_NAME, 216 RuntimeMXBean.class); 217 // Get standard attribute "VmVendor" 218 String vendor = proxy.getVmVendor(); 219 </pre></blockquote> 220 </ol> 221 222 223 <h4><a name="extension">Platform Extension</a></h4> 224 225 A Java virtual machine implementation may add its platform extension to 226 the management interface by defining platform-dependent 227 interfaces that extend the standard management interfaces to include 228 platform-specific metrics and management operations. 229 The static factory methods in the <tt>ManagementFactory</tt> class will 230 return the MBeans with the platform extension. 231 232 <p> 233 It is recommended to name the platform-specific attributes with 234 a vendor-specific prefix such as the vendor's name to 235 avoid collisions of the attribute name between the future extension 236 to the standard management interface and the platform extension. 237 If the future extension to the standard management interface defines 238 a new attribute for a management interface and the attribute name 239 is happened to be same as some vendor-specific attribute's name, 240 the applications accessing that vendor-specific attribute would have 241 to be modified to cope with versioning and compatibility issues. 242 243 <p>Below is an example showing how to access a platform-specific 244 attribute from Sun's implementation of the <tt>RuntimeMXBean</tt>. 245 246 <p> 247 1) Direct access to the Sun-specific MXBean interface 248 <blockquote><pre> 249 com.sun.management.RuntimeMXBean mxbean = 250 (com.sun.management.RuntimeMXBean) ManagementFactory.getRuntimeMXBean(); 251 252 // Get the standard attribute "VmVendor" 253 String vendor = mxbean.getVmVendor(); 254 255 // Get the platform-specific attribute "Bar" 256 BarType bar = mxbean.getBar(); 257 258 </pre> 259 </blockquote> 260 261 <p> 262 2) Access the Sun-specific MXBean interface via <tt>MBeanServer</tt> 263 264 <blockquote><pre> 265 MBeanServerConnection mbs; 266 267 // Connect to a running JVM (or itself) and get MBeanServerConnection 268 // that has the JVM MXBeans registered in it 269 ... 270 271 try { 272 // Assuming the RuntimeMXBean has been registered in mbs 273 ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 274 275 // Get standard attribute "VmVendor" 276 String vendor = (String) mbs.getAttribute(oname, "VmVendor"); 277 278 // Check if this MXBean contains Sun's extension 279 if (mbs.isInstanceOf(oname, "com.sun.management.RuntimeMXBean")) { 280 // Get platform-specific attribute "Bar" 281 BarType bar = (String) mbs.getAttribute(oname, "Bar"); 282 } 283 } catch (....) { 284 // Catch the exceptions thrown by ObjectName constructor 285 // and MBeanServer methods 286 ... 287 } 288 289 </pre></blockquote> 290 291 <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor 292 or method in any class or interface in this package will cause a {@link 293 java.lang.NullPointerException NullPointerException} to be thrown. 294 295 <p> The java.lang.management API is thread-safe. 296 297 @see <a href="../../../javax/management/package-summary.html"> 298 JMX Specification.</a> 299 300 @author Mandy Chung 301 @since 1.5 302 303 </body> 304 </html>