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