Merged gcj-eclipse branch to trunk.
From-SVN: r120621
This commit is contained in:
parent
c648dedbde
commit
97b8365caf
17478 changed files with 606493 additions and 100744 deletions
|
@ -50,9 +50,18 @@ import gnu.java.lang.management.RuntimeMXBeanImpl;
|
|||
import gnu.java.lang.management.ThreadMXBeanImpl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import java.util.logging.LogManager;
|
||||
|
||||
import javax.management.InstanceAlreadyExistsException;
|
||||
import javax.management.MBeanRegistrationException;
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.MBeanServerFactory;
|
||||
import javax.management.MalformedObjectNameException;
|
||||
import javax.management.NotCompliantMBeanException;
|
||||
import javax.management.ObjectName;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -66,7 +75,55 @@ import javax.management.NotCompliantMBeanException;
|
|||
* <ol>
|
||||
* <li>Calling the appropriate static method of this factory.
|
||||
* </li>
|
||||
* <li>Using the platform {@link javax.management.MBeanServer}
|
||||
* to access the beans locally, or an
|
||||
* {@link javax.management.MBeanServerConnection} for remote
|
||||
* access. The attributes and operations use the limited
|
||||
* range of data types specified below.</li>
|
||||
* </ol>
|
||||
* <h2>Open Data Types</h2>
|
||||
* <p>
|
||||
* The data types used by the management beans are restricted
|
||||
* to <emph>open</emph> data types to aid interoperability. This
|
||||
* allows the beans to be accessed remotely, including from non-Java
|
||||
* clients. Below is a table which lists the types used by the beans
|
||||
* on the left, and the types they are converted to when returned via
|
||||
* a bean server on the right. Type information is provided for each
|
||||
* bean by obtaining its instance of {@link javax.management.MBeanInfo}.
|
||||
* </p>
|
||||
* <table>
|
||||
* <th><td>Data Type Used</td><td>Data Type Returned</td></th>
|
||||
* <tr>
|
||||
* <td>Primitive types (<code>int</code>, <code>char</code>, etc.)</td>
|
||||
* <td>Same</td>
|
||||
* </tr><tr>
|
||||
* <td>Wrapper classes ({@link{java.lang.Integer},
|
||||
* @link{java.lang.Character}, etc.)</td>
|
||||
* <td>Same</td>
|
||||
* </tr><tr>
|
||||
* <td>An {@link java.lang.Enum}</td>
|
||||
* <td>The <code>name</code> of the enumeration constant</td>
|
||||
* </tr><tr>
|
||||
* <td>An array of type <code>E</code></td>
|
||||
* <td>An array of the same dimensions with this mapping applied
|
||||
* to <code>E</code>.</td>
|
||||
* </tr><tr>
|
||||
* <td>A class with `getter' methods and a
|
||||
* <code>from({@link javax.management.openmbean.CompositeData})</code>
|
||||
* method.</td>
|
||||
* <td>The equivalent {@link javax.management.openmbean.CompositeData}
|
||||
* instance, specified by the <code>from</code> method.</td>
|
||||
* </tr><tr>
|
||||
* <td>A map with keys of type <code>K</code> and values of
|
||||
* type <code>V</code>.</td>
|
||||
* <td>A {@link javax.management.openmbean.TabularData} instance,
|
||||
* with the row type containing two items, <code>"key"</code> and
|
||||
* <code>"value"</code> with the types <code>K</code> and <code>V</code>
|
||||
* respectively (with translation applied).</td>
|
||||
* </tr><tr>
|
||||
* <td>A list of type <code>E</code>.</td>
|
||||
* <td>An array with this mapping applied to <code>E</code>.</td>
|
||||
* </tr></table>
|
||||
*
|
||||
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||
* @since 1.5
|
||||
|
@ -74,6 +131,60 @@ import javax.management.NotCompliantMBeanException;
|
|||
public class ManagementFactory
|
||||
{
|
||||
|
||||
/**
|
||||
* The object name for the class loading bean.
|
||||
*/
|
||||
public static final String CLASS_LOADING_MXBEAN_NAME =
|
||||
"java.lang:type=ClassLoading";
|
||||
|
||||
/**
|
||||
* The object name for the compilation bean.
|
||||
*/
|
||||
public static final String COMPILATION_MXBEAN_NAME =
|
||||
"java.lang:type=Compilation";
|
||||
|
||||
/**
|
||||
* The domain for the garbage collecting beans.
|
||||
*/
|
||||
public static final String GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE =
|
||||
"java.lang:type=GarbageCollector";
|
||||
|
||||
/**
|
||||
* The domain for the memory manager beans.
|
||||
*/
|
||||
public static final String MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE =
|
||||
"java.lang:type=MemoryManager";
|
||||
|
||||
/**
|
||||
* The object name for the memory bean.
|
||||
*/
|
||||
public static final String MEMORY_MXBEAN_NAME =
|
||||
"java.lang:type=Memory";
|
||||
|
||||
/**
|
||||
* The domain for the memory pool beans.
|
||||
*/
|
||||
public static final String MEMORY_POOL_MXBEAN_DOMAIN_TYPE =
|
||||
"java.lang:type=MemoryPool";
|
||||
|
||||
/**
|
||||
* The object name for the operating system bean.
|
||||
*/
|
||||
public static final String OPERATING_SYSTEM_MXBEAN_NAME =
|
||||
"java.lang:type=OperatingSystem";
|
||||
|
||||
/**
|
||||
* The object name for the runtime bean.
|
||||
*/
|
||||
public static final String RUNTIME_MXBEAN_NAME =
|
||||
"java.lang:type=Runtime";
|
||||
|
||||
/**
|
||||
* The object name for the threading bean.
|
||||
*/
|
||||
public static final String THREAD_MXBEAN_NAME =
|
||||
"java.lang:type=Threading";
|
||||
|
||||
/**
|
||||
* The operating system management bean.
|
||||
*/
|
||||
|
@ -104,6 +215,11 @@ public class ManagementFactory
|
|||
*/
|
||||
private static CompilationMXBean compilationBean;
|
||||
|
||||
/**
|
||||
* The platform server.
|
||||
*/
|
||||
private static MBeanServer platformServer;
|
||||
|
||||
/**
|
||||
* Private constructor to prevent instance creation.
|
||||
*/
|
||||
|
@ -258,9 +374,10 @@ public class ManagementFactory
|
|||
*
|
||||
* @return a list of memory pool beans, one for each pool.
|
||||
*/
|
||||
public static List getMemoryPoolMXBeans()
|
||||
public static List<MemoryPoolMXBean> getMemoryPoolMXBeans()
|
||||
{
|
||||
List poolBeans = new ArrayList();
|
||||
List<MemoryPoolMXBean> poolBeans =
|
||||
new ArrayList<MemoryPoolMXBean>();
|
||||
String[] names = VMManagementFactory.getMemoryPoolNames();
|
||||
for (int a = 0; a < names.length; ++a)
|
||||
try
|
||||
|
@ -283,9 +400,10 @@ public class ManagementFactory
|
|||
*
|
||||
* @return a list of memory manager beans, one for each manager.
|
||||
*/
|
||||
public static List getMemoryManagerMXBeans()
|
||||
public static List<MemoryManagerMXBean> getMemoryManagerMXBeans()
|
||||
{
|
||||
List managerBeans = new ArrayList();
|
||||
List<MemoryManagerMXBean> managerBeans =
|
||||
new ArrayList<MemoryManagerMXBean>();
|
||||
String[] names = VMManagementFactory.getMemoryManagerNames();
|
||||
for (int a = 0; a < names.length; ++a)
|
||||
try
|
||||
|
@ -309,9 +427,10 @@ public class ManagementFactory
|
|||
*
|
||||
* @return a list of garbage collector beans, one for each pool.
|
||||
*/
|
||||
public static List getGarbageCollectorMXBeans()
|
||||
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans()
|
||||
{
|
||||
List gcBeans = new ArrayList();
|
||||
List<GarbageCollectorMXBean> gcBeans =
|
||||
new ArrayList<GarbageCollectorMXBean>();
|
||||
String[] names = VMManagementFactory.getGarbageCollectorNames();
|
||||
for (int a = 0; a < names.length; ++a)
|
||||
try
|
||||
|
@ -328,4 +447,106 @@ public class ManagementFactory
|
|||
return gcBeans;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Returns the platform {@link javax.management.MBeanServer}. On the
|
||||
* first call to this method, a server instance is retrieved from
|
||||
* the {@link javax.management.MBeanServerFactory} and each of the
|
||||
* beans are registered with it. Subsequent calls return the existing
|
||||
* instance. If the property <code>javax.management.builder.initial</code>
|
||||
* is set, its value will be used as the name of the class which is used
|
||||
* to provide the server instance.
|
||||
* </p>
|
||||
* <p>
|
||||
* It is recommended that the platform server is used for other beans as
|
||||
* well, in order to simplify their discovery and publication. Name conflicts
|
||||
* should be avoided.
|
||||
* </p>
|
||||
*
|
||||
* @return the platform {@link javax.management.MBeanServer}
|
||||
* @throws SecurityException if a security manager exists and the
|
||||
* caller's permissions don't imply {@link
|
||||
* MBeanServerPermission(String)}("createMBeanServer")
|
||||
* @see javax.management.MBeanServerFactory
|
||||
* @see javax.management.MBeanServerFactory#createMBeanServer()
|
||||
*/
|
||||
public static MBeanServer getPlatformMBeanServer()
|
||||
{
|
||||
if (platformServer == null)
|
||||
{
|
||||
platformServer = MBeanServerFactory.createMBeanServer();
|
||||
try
|
||||
{
|
||||
platformServer.registerMBean(getOperatingSystemMXBean(),
|
||||
new ObjectName(OPERATING_SYSTEM_MXBEAN_NAME));
|
||||
platformServer.registerMBean(getRuntimeMXBean(),
|
||||
new ObjectName(RUNTIME_MXBEAN_NAME));
|
||||
platformServer.registerMBean(getClassLoadingMXBean(),
|
||||
new ObjectName(CLASS_LOADING_MXBEAN_NAME));
|
||||
platformServer.registerMBean(getThreadMXBean(),
|
||||
new ObjectName(THREAD_MXBEAN_NAME));
|
||||
platformServer.registerMBean(getMemoryMXBean(),
|
||||
new ObjectName(MEMORY_MXBEAN_NAME));
|
||||
CompilationMXBean compBean = getCompilationMXBean();
|
||||
if (compBean != null)
|
||||
platformServer.registerMBean(compBean,
|
||||
new ObjectName(COMPILATION_MXBEAN_NAME));
|
||||
Iterator beans = getMemoryPoolMXBeans().iterator();
|
||||
while (beans.hasNext())
|
||||
{
|
||||
MemoryPoolMXBean bean = (MemoryPoolMXBean) beans.next();
|
||||
platformServer.registerMBean(bean,
|
||||
new ObjectName(MEMORY_POOL_MXBEAN_DOMAIN_TYPE +
|
||||
",name=" +
|
||||
bean.getName()));
|
||||
}
|
||||
beans = getMemoryManagerMXBeans().iterator();
|
||||
while (beans.hasNext())
|
||||
{
|
||||
MemoryManagerMXBean bean = (MemoryManagerMXBean) beans.next();
|
||||
platformServer.registerMBean(bean,
|
||||
new ObjectName(MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE +
|
||||
",name=" +
|
||||
bean.getName()));
|
||||
}
|
||||
beans = getGarbageCollectorMXBeans().iterator();
|
||||
while (beans.hasNext())
|
||||
{
|
||||
GarbageCollectorMXBean bean = (GarbageCollectorMXBean) beans.next();
|
||||
platformServer.registerMBean(bean,
|
||||
new ObjectName(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE +
|
||||
",name=" +
|
||||
bean.getName()));
|
||||
}
|
||||
platformServer.registerMBean(LogManager.getLoggingMXBean(),
|
||||
new ObjectName(LogManager.LOGGING_MXBEAN_NAME));
|
||||
}
|
||||
catch (InstanceAlreadyExistsException e)
|
||||
{
|
||||
throw (Error)
|
||||
(new InternalError("One of the management beans is " +
|
||||
"already registered.").initCause(e));
|
||||
}
|
||||
catch (MBeanRegistrationException e)
|
||||
{
|
||||
throw (Error)
|
||||
(new InternalError("One of the management beans' preRegister " +
|
||||
"methods threw an exception.").initCause(e));
|
||||
}
|
||||
catch (NotCompliantMBeanException e)
|
||||
{
|
||||
throw (Error)
|
||||
(new InternalError("One of the management beans is " +
|
||||
"not compliant.").initCause(e));
|
||||
}
|
||||
catch (MalformedObjectNameException e)
|
||||
{
|
||||
throw (Error)
|
||||
(new InternalError("The object name of a management bean is " +
|
||||
"not compliant.").initCause(e));
|
||||
}
|
||||
}
|
||||
return platformServer;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue