Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/classes/java/lang/management/ManagementFactory.java
          +++ new/src/share/classes/java/lang/management/ManagementFactory.java
   1    1  /*
   2      - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
        2 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
   3    3   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4    4   *
   5    5   * This code is free software; you can redistribute it and/or modify it
   6    6   * under the terms of the GNU General Public License version 2 only, as
   7    7   * published by the Free Software Foundation.  Oracle designates this
   8    8   * particular file as subject to the "Classpath" exception as provided
   9    9   * by Oracle in the LICENSE file that accompanied this code.
  10   10   *
  11   11   * This code is distributed in the hope that it will be useful, but WITHOUT
  12   12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
↓ open down ↓ 9 lines elided ↑ open up ↑
  22   22   * or visit www.oracle.com if you need additional information or have any
  23   23   * questions.
  24   24   */
  25   25  
  26   26  package java.lang.management;
  27   27  import javax.management.DynamicMBean;
  28   28  import javax.management.MBeanServer;
  29   29  import javax.management.MBeanServerConnection;
  30   30  import javax.management.MBeanServerFactory;
  31   31  import javax.management.MBeanServerPermission;
       32 +import javax.management.MXBean;
  32   33  import javax.management.NotificationEmitter;
  33   34  import javax.management.ObjectInstance;
  34   35  import javax.management.ObjectName;
  35   36  import javax.management.InstanceAlreadyExistsException;
  36   37  import javax.management.InstanceNotFoundException;
  37   38  import javax.management.MalformedObjectNameException;
  38   39  import javax.management.MBeanRegistrationException;
  39   40  import javax.management.NotCompliantMBeanException;
  40   41  import javax.management.StandardEmitterMBean;
  41   42  import javax.management.StandardMBean;
  42   43  import java.util.Collections;
  43   44  import java.util.List;
  44   45  import java.util.Set;
       46 +import java.util.HashMap;
  45   47  import java.util.HashSet;
  46   48  import java.security.AccessController;
  47   49  import java.security.Permission;
  48   50  import java.security.PrivilegedAction;
  49   51  import java.security.PrivilegedActionException;
  50   52  import java.security.PrivilegedExceptionAction;
  51   53  import javax.management.JMX;
  52   54  import sun.management.ManagementFactoryHelper;
  53   55  
  54   56  /**
↓ open down ↓ 420 lines elided ↑ open up ↑
 475  477                      // the MXBean instances for another platform component.
 476  478                      // e.g. com.sun.management.GarbageCollectorMXBean
 477  479                      //
 478  480                      // So need to check if an MXBean instance is registered
 479  481                      // before registering into the platform MBeanServer
 480  482                      if (!platformMBeanServer.isRegistered(o.getObjectName())) {
 481  483                          addMXBean(platformMBeanServer, o);
 482  484                      }
 483  485                  }
 484  486              }
      487 +            HashMap<ObjectName, DynamicMBean> dynmbeans =
      488 +                    ManagementFactoryHelper.getPlatformDynamicMBeans();
      489 +            for (ObjectName on : dynmbeans.keySet()) {
      490 +                addDynamicMBean(platformMBeanServer, dynmbeans.get(on), on);
      491 +            }
 485  492          }
 486  493          return platformMBeanServer;
 487  494      }
 488  495  
 489  496      /**
 490  497       * Returns a proxy for a platform MXBean interface of a
 491  498       * given <a href="#MXBeanNames">MXBean name</a>
 492  499       * that forwards its method calls through the given
 493  500       * <tt>MBeanServerConnection</tt>.
 494  501       *
↓ open down ↓ 323 lines elided ↑ open up ↑
 818  825  
 819  826                      mbs.registerMBean(dmbean, pmo.getObjectName());
 820  827                      return null;
 821  828                  }
 822  829              });
 823  830          } catch (PrivilegedActionException e) {
 824  831              throw new RuntimeException(e.getException());
 825  832          }
 826  833      }
 827  834  
      835 +    /**
      836 +     * Registers a DynamicMBean.
      837 +     */
      838 +    private static void addDynamicMBean(final MBeanServer mbs,
      839 +                                        final DynamicMBean dmbean,
      840 +                                        final ObjectName on) {
      841 +        try {
      842 +            AccessController.doPrivileged(new PrivilegedExceptionAction<Void>() {
      843 +                @Override
      844 +                public Void run() throws InstanceAlreadyExistsException,
      845 +                                         MBeanRegistrationException,
      846 +                                         NotCompliantMBeanException {
      847 +                    mbs.registerMBean(dmbean, on);
      848 +                    return null;
      849 +                }
      850 +            });
      851 +        } catch (PrivilegedActionException e) {
      852 +            throw new RuntimeException(e.getException());
      853 +        }
      854 +    }
 828  855  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX