1 <html> 2 <head> 3 <title>javax.management package</title> 4 <!-- 5 Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. 6 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 7 8 This code is free software; you can redistribute it and/or modify it 9 under the terms of the GNU General Public License version 2 only, as 10 published by the Free Software Foundation. Oracle designates this 11 particular file as subject to the "Classpath" exception as provided 12 by Oracle in the LICENSE file that accompanied this code. 13 14 This code is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17 version 2 for more details (a copy is included in the LICENSE file that 18 accompanied this code). 19 20 You should have received a copy of the GNU General Public License version 21 2 along with this work; if not, write to the Free Software Foundation, 22 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 23 24 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 25 or visit www.oracle.com if you need additional information or have any 26 questions. 27 --> 28 </head> 29 <body bgcolor="white"> 30 <p>Provides the core classes for the Java Management Extensions.</p> 31 32 <p>The Java Management Extensions 33 (JMX<sup><font size="-1">TM</font></sup>) API is a standard 34 API for management and monitoring. Typical uses include:</p> 35 36 <ul> 37 <li>consulting and changing application configuration</li> 38 39 <li>accumulating statistics about application behavior and 40 making them available</li> 41 42 <li>notifying of state changes and erroneous conditions.</li> 43 </ul> 44 45 <p>The JMX API can also be used as part of a solution for 46 managing systems, networks, and so on.</p> 47 48 <p>The API includes remote access, so a remote management 49 program can interact with a running application for these 50 purposes.</p> 51 52 <h2>MBeans</h2> 53 54 <p>The fundamental notion of the JMX API is the <em>MBean</em>. 55 An MBean is a named <em>managed object</em> representing a 56 resource. It has a <em id="mgIface">management interface</em> 57 which must be <em>public</em> and consist of:</p> 58 59 <ul> 60 <li>named and typed attributes that can be read and/or 61 written</li> 62 63 <li>named and typed operations that can be invoked</li> 64 65 <li>typed notifications that can be emitted by the MBean.</li> 66 </ul> 67 68 <p>For example, an MBean representing an application's 69 configuration could have attributes representing the different 70 configuration items. Reading the <code>CacheSize</code> 71 attribute would return the current value of that item. 72 Writing it would update the item, potentially changing the 73 behavior of the running application. An operation such as 74 <code>save</code> could store the current configuration 75 persistently. A notification such as 76 <code>ConfigurationChangedNotification</code> could be sent 77 every time the configuration is changed.</p> 78 79 <p>In the standard usage of the JMX API, MBeans are implemented 80 as Java objects. However, as explained below, these objects are 81 not usually referenced directly.</p> 82 83 84 <h3>Standard MBeans</h3> 85 86 <p>To make MBean implementation simple, the JMX API includes the 87 notion of <em>Standard MBeans</em>. A Standard MBean is one 88 whose attributes and operations are deduced from a Java 89 interface using certain naming patterns, similar to those used 90 by JavaBeans<sup><font size="-1">TM</font></sup>. For 91 example, consider an interface like this:</p> 92 93 <pre> 94 public interface ConfigurationMBean { 95 public int getCacheSize(); 96 public void setCacheSize(int size); 97 public long getLastChangedTime(); 98 public void save(); 99 } 100 </pre> 101 102 <p>The methods <code>getCacheSize</code> and 103 <code>setCacheSize</code> define a read-write attribute of 104 type <code>int</code> called <code>CacheSize</code> (with an 105 initial capital, unlike the JavaBeans convention).</p> 106 107 <p>The method <code>getLastChangedTime</code> defines an 108 attribute of type <code>long</code> called 109 <code>LastChangedTime</code>. This is a read-only attribute, 110 since there is no method <code>setLastChangedTime</code>.</p> 111 112 <p>The method <code>save</code> defines an operation called 113 <code>save</code>. It is not an attribute, since its name 114 does not begin with <code>get</code>, <code>set</code>, or 115 <code>is</code>.</p> 116 117 <p>The exact naming patterns for Standard MBeans are detailed in 118 the <a href="#spec">JMX Specification</a>.</p> 119 120 <p>There are two ways to make a Java object that is an MBean 121 with this management interface. One is for the object to be 122 of a class that has exactly the same name as the Java 123 interface but without the <code>MBean</code> suffix. So in 124 the example the object would be of the class 125 <code>Configuration</code>, in the same Java package as 126 <code>ConfigurationMBean</code>. The second way is to use the 127 {@link javax.management.StandardMBean StandardMBean} 128 class.</p> 129 130 131 <h3>MXBeans</h3> 132 133 <p>An <em>MXBean</em> is a variant of Standard MBean where complex 134 types are mapped to a standard set of types defined in the 135 {@link javax.management.openmbean} package. MXBeans are appropriate 136 if you would otherwise need to reference application-specific 137 classes in your MBean interface. They are described in detail 138 in the specification for {@link javax.management.MXBean MXBean}.</p> 139 140 141 <h3>Dynamic MBeans</h3> 142 143 <p>A <em>Dynamic MBean</em> is an MBean that defines its 144 management interface at run-time. For example, a configuration 145 MBean could determine the names and types of the attributes it 146 exposes by parsing an XML file.</p> 147 148 <p>Any Java object of a class that implements the {@link 149 javax.management.DynamicMBean DynamicMBean} interface is a 150 Dynamic MBean.</p> 151 152 153 <h3>Open MBeans</h3> 154 155 <p>An <em>Open MBean</em> is a kind of Dynamic MBean where the 156 types of attributes and of operation parameters and return 157 values are built using a small set of predefined Java classes. 158 Open MBeans facilitate operation with remote management programs 159 that do not necessarily have access to application-specific 160 types, including non-Java programs. Open MBeans are defined by 161 the package <a href="openmbean/package-summary.html"><code> 162 javax.management.openmbean</code></a>.</p> 163 164 165 <h3>Model MBeans</h3> 166 167 <p>A <em>Model MBean</em> is a kind of Dynamic MBean that acts 168 as a bridge between the management interface and the 169 underlying managed resource. Both the management interface and 170 the managed resource are specified as Java objects. The same 171 Model MBean implementation can be reused many times with 172 different management interfaces and managed resources, and it can 173 provide common functionality such as persistence and caching. 174 Model MBeans are defined by the package 175 <a href="modelmbean/package-summary.html"><code> 176 javax.management.modelmbean</code></a>.</p> 177 178 179 <h2>MBean Server</h2> 180 181 <p>To be useful, an MBean must be registered in an <em>MBean 182 Server</em>. An MBean Server is a repository of MBeans. 183 Usually the only access to the MBeans is through the MBean 184 Server. In other words, code no longer accesses the Java 185 object implementing the MBean directly, but instead accesses 186 the MBean by name through the MBean Server. Each MBean has a 187 unique name within the MBean Server, defined by the {@link 188 javax.management.ObjectName ObjectName} class.</p> 189 190 <p>An MBean Server is an object implementing the interface 191 {@link javax.management.MBeanServer MBeanServer}. 192 The most convenient MBean Server to use is the 193 <em>Platform MBean Server</em>. This is a 194 single MBean Server that can be shared by different managed 195 components running within the same Java Virtual Machine. The 196 Platform MBean Server is accessed with the method {@link 197 java.lang.management.ManagementFactory#getPlatformMBeanServer()}.</p> 198 199 <p>Application code can also create a new MBean Server, or 200 access already-created MBean Servers, using the {@link 201 javax.management.MBeanServerFactory MBeanServerFactory} class.</p> 202 203 204 <h3>Creating MBeans in the MBean Server</h3> 205 206 <p>There are two ways to create an MBean. One is to construct a 207 Java object that will be the MBean, then use the {@link 208 javax.management.MBeanServer#registerMBean registerMBean} 209 method to register it in the MBean Server. The other is to 210 create and register the MBean in a single operation using one 211 of the {@link javax.management.MBeanServer#createMBean(String, 212 javax.management.ObjectName) createMBean} methods.</p> 213 214 <p>The <code>registerMBean</code> method is simpler for local 215 use, but cannot be used remotely. The 216 <code>createMBean</code> method can be used remotely, but 217 sometimes requires attention to class loading issues.</p> 218 219 <p>An MBean can perform actions when it is registered in or 220 unregistered from an MBean Server if it implements the {@link 221 javax.management.MBeanRegistration MBeanRegistration} 222 interface.</p> 223 224 225 <h3>Accessing MBeans in the MBean Server</h3> 226 227 <p>Given an <code>ObjectName</code> <code>name</code> and an 228 <code>MBeanServer</code> <code>mbs</code>, you can access 229 attributes and operations as in this example:</p> 230 231 <pre> 232 int cacheSize = mbs.getAttribute(name, "CacheSize"); 233 {@link javax.management.Attribute Attribute} newCacheSize = 234 new Attribute("CacheSize", new Integer(2000)); 235 mbs.setAttribute(name, newCacheSize); 236 mbs.invoke(name, "save", new Object[0], new Class[0]); 237 </pre> 238 239 <p id="proxy">Alternatively, if you have a Java interface that 240 corresponds to the management interface for the MBean, you can use an 241 <em>MBean proxy</em> like this:</p> 242 243 <pre> 244 ConfigurationMBean conf = 245 {@link javax.management.JMX#newMBeanProxy 246 JMX.newMBeanProxy}(mbs, name, ConfigurationMBean.class); 247 int cacheSize = conf.getCacheSize(); 248 conf.setCacheSize(2000); 249 conf.save(); 250 </pre> 251 252 <p>Using an MBean proxy is just a convenience. The second 253 example ends up calling the same <code>MBeanServer</code> 254 operations as the first one.</p> 255 256 <p>An MBean Server can be queried for MBeans whose names match 257 certain patterns and/or whose attributes meet certain 258 constraints. Name patterns are constructed using the {@link 259 javax.management.ObjectName ObjectName} class and constraints 260 are constructed using the {@link javax.management.Query Query} 261 class. The methods {@link 262 javax.management.MBeanServer#queryNames queryNames} and {@link 263 javax.management.MBeanServer#queryMBeans queryMBeans} then 264 perform the query.</p> 265 266 267 <h3>MBean lifecycle</h3> 268 269 <p>An MBean can implement the {@link javax.management.MBeanRegistration 270 MBeanRegistration} interface in order to be told when it is registered 271 and unregistered in the MBean Server. Additionally, the {@link 272 javax.management.MBeanRegistration#preRegister preRegister} method 273 allows the MBean to get a reference to the <code>MBeanServer</code> 274 object and to get its <code>ObjectName</code> within the MBean 275 Server.</p> 276 277 278 <h2>Notifications</h2> 279 280 <p>A <em>notification</em> is an instance of the {@link 281 javax.management.Notification Notification} class or a 282 subclass. In addition to its Java class, it has a 283 <em>type</em> string that can distinguish it from other 284 notifications of the same class.</p> 285 286 <p>An MBean that will emit notifications must implement the 287 {@link javax.management.NotificationBroadcaster 288 NotificationBroadcaster} or {@link 289 javax.management.NotificationEmitter NotificationEmitter} 290 interface. Usually, it does this by subclassing 291 {@link javax.management.NotificationBroadcasterSupport 292 NotificationBroadcasterSupport} or delegating to an instance of 293 that class. Here is an example:</p> 294 295 <pre> 296 public class Configuration <b>extends NotificationBroadcasterSupport</b> 297 implements ConfigurationMBean { 298 ... 299 private void updated() { 300 Notification n = new Notification(...); 301 <b>{@link javax.management.NotificationBroadcasterSupport#sendNotification 302 sendNotification}(n)</b>; 303 } 304 } 305 </pre> 306 307 308 <p>Notifications can be received by a <em>listener</em>, which 309 is an object that implements the {@link 310 javax.management.NotificationListener NotificationListener} 311 interface. You can add a listener to an MBean with the method 312 {@link 313 javax.management.MBeanServer#addNotificationListener(ObjectName, 314 NotificationListener, NotificationFilter, Object)}. 315 You can optionally supply a <em>filter</em> to this method, to 316 select only notifications of interest. A filter is an object 317 that implements the {@link javax.management.NotificationFilter 318 NotificationFilter} interface.</p> 319 320 <p>An MBean can be a listener for notifications emitted by other 321 MBeans in the same MBean Server. In this case, it implements 322 {@link javax.management.NotificationListener 323 NotificationListener} and the method {@link 324 javax.management.MBeanServer#addNotificationListener(ObjectName, 325 ObjectName, NotificationFilter, Object)} is used to listen.</p> 326 327 328 <h2>Remote Access to MBeans</h2> 329 330 <p>An MBean Server can be accessed remotely through a 331 <em>connector</em>. A connector allows a remote Java 332 application to access an MBean Server in essentially the same 333 way as a local one. The package 334 <a href="remote/package-summary.html"><code> 335 javax.management.remote</code></a> defines connectors.</p> 336 337 <p>The JMX specification also defines the notion of an 338 <em>adaptor</em>. An adaptor translates between requests in a 339 protocol such as SNMP or HTML and accesses to an MBean Server. 340 So for example an SNMP GET operation might result in a 341 <code>getAttribute</code> on the MBean Server.</p> 342 343 <h3 id="interop">Interoperability between versions of the JMX 344 specification</h3> 345 346 <p>When a client connects to a server using the JMX Remote 347 API, it is possible that they do not have the same version 348 of the JMX specification. The version of the JMX 349 specification described here is version 1.4. Previous 350 versions were 1.0, 1.1, and 1.2. (There was no 1.3.) 351 The standard JMX Remote API is defined to work with version 352 1.2 onwards, so in standards-based deployment the only 353 interoperability questions that arise concern version 1.2 354 onwards.</p> 355 356 <p>Every version of the JMX specification continues to 357 implement the features of previous versions. So when the 358 client is running an earlier version than the server, there 359 should not be any interoperability concerns.</p> 360 361 <p>When the client is running a later version than the server, 362 certain newer features may not be available, as detailed in 363 the next sections. The client can determine the server's 364 version by examining the {@link 365 javax.management.MBeanServerDelegateMBean#getSpecificationVersion 366 SpecificationVersion} attribute of the {@code 367 MBeanServerDelegate}.</p> 368 369 <h4 id="interop-1.2">If the remote MBean Server is 1.2</h4> 370 371 <ul> 372 373 <li><p>You cannot use wildcards in a key property of an 374 {@link javax.management.ObjectName ObjectName}, for 375 example {@code domain:type=Foo,name=*}. Wildcards that 376 match whole properties are still allowed, for example 377 {@code *:*} or {@code *:type=Foo,*}.</p> 378 379 <li><p>You cannot use {@link 380 javax.management.Query#isInstanceOf Query.isInstanceOf} 381 in a query.</p> 382 383 <li><p>You cannot use dot syntax such as {@code 384 HeapMemoryUsage.used} in the {@linkplain 385 javax.management.monitor.Monitor#setObservedAttribute 386 observed attribute} of a monitor, as described in the 387 documentation for the {@link javax.management.monitor} 388 package.</p> 389 390 </ul> 391 392 <p id="spec"> 393 @see <a href="{@docRoot}/../technotes/guides/jmx/index.html"> 394 Java Platform documentation on JMX technology</a> 395 in particular the 396 <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> 397 JMX Specification, version 1.4(pdf).</a> 398 399 @since 1.5 400 401 </body> 402 </html>