2012-02-17 41 views
0

我有下面的代码,只是列出了在平台MBean服务器中的所有MBean的名称:如何初始化的JRockit的MBean树

public static void main(final String[] args) throws Exception { 

    initJMX(); 

    } 

    @SuppressWarnings("unchecked") 
    private static void initJMX() throws IOException, MalformedURLException, AttributeNotFoundException, 
     InstanceNotFoundException, MalformedObjectNameException, MBeanException, ReflectionException, 
     NullPointerException { 
    JMXConnector jmxc = null; 
    final Map<String, String> map = new HashMap<String, String>(); 
    jmxc = JMXConnectorFactory.newJMXConnector(createConnectionURL("localhost", 7788), map); 
    jmxc.connect(); 
    final MBeanServerConnection connection = jmxc.getMBeanServerConnection(); 
    final String[] domains = connection.getDomains(); 
    for (final String domain : domains) { 
     final Set<ObjectName> mBeans = connection.queryNames(new ObjectName(domain + ":*"), null); 
     for (final ObjectName name : mBeans) { 
     System.out.println(name); 
     } 
    } 
    jmxc.close(); 
    } 

当我尝试使用的JRockit 1.5.0_4.0.1与以下运行这段代码参数:

-Xmanagement:ssl=false,authenticate=false,autodiscovery=false,port=7788 

而且它打印以下列表:

[INFO ][mgmnt ] Remote JMX connector started at address localhost:7788 
[INFO ][mgmnt ] Local JMX connector started 
com.oracle.jrockit:type=FlightRecorder 
java.util.logging:type=Logging 
JMImplementation:type=MBeanServerDelegate 
java.lang:type=Compilation 
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Young Collector 
java.lang:type=MemoryManager,name=Class Manager 
java.lang:type=MemoryPool,name=ClassBlock Memory 
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Old Collector 
java.lang:type=Runtime 
java.lang:type=MemoryPool,name=Nursery 
java.lang:type=ClassLoading 
java.lang:type=Threading 
java.lang:type=MemoryPool,name=Class Memory 
java.lang:type=OperatingSystem 
java.lang:type=Memory 
java.lang:type=MemoryPool,name=Old Space 

但是,如果我把一个breakpoi NT之前initJMX方法,并在该点呼叫连接到与JRMC该JVM,然后JRMC显示更多的MBean还后,我继续执行程序也打印其中包含了更多的JRockit有关MBean的不同的列表:

[INFO ][mgmnt ] Remote JMX connector started at address T500W7AAD:7788 
[INFO ][mgmnt ] Local JMX connector started 
com.oracle.jrockit:type=FlightRecorder 
oracle.jrockit.management:type=PerfCounters 
oracle.jrockit.management:type=Compilation 
oracle.jrockit.management:type=Log 
oracle.jrockit.management:type=Profiler 
oracle.jrockit.management:type=MemLeak 
oracle.jrockit.management:type=JRockitConsole 
oracle.jrockit.management:type=GarbageCollector 
oracle.jrockit.management:type=Runtime 
oracle.jrockit.management:type=Threading 
oracle.jrockit.management:type=DiagnosticCommand 
oracle.jrockit.management:type=Memory 
java.util.logging:type=Logging 
JMImplementation:type=MBeanServerDelegate 
java.lang:type=Compilation 
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Young Collector 
java.lang:type=MemoryManager,name=Class Manager 
java.lang:type=MemoryPool,name=ClassBlock Memory 
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Old Collector 
java.lang:type=Runtime 
java.lang:type=MemoryPool,name=Nursery 
java.lang:type=ClassLoading 
java.lang:type=Threading 
java.lang:type=MemoryPool,name=Class Memory 
java.lang:type=OperatingSystem 
java.lang:type=Memory 
java.lang:type=MemoryPool,name=Old Space 

有没有办法让JRockit在JVM启动时自动初始化这些bean,而不需要明确的JRMC连接?问题是我正在尝试编写一些重用这些MBean的代码,但在我连接到JRMC之前它们不可用。

UPDATE:这似乎是JRockit jdk1.5.0_4.0.1的问题。由于相同的代码在JRockit jdk6.0_4.1.0上按预期工作。

+0

请注意不支持oracle *和com.oracle * mbeans在JRMC之外访问。 – staffan 2012-02-17 16:26:34

回答

1

这似乎是与Windows版本的JRockit的,我用了一个问题:

java version "1.5.0_24" 
Java(TM) Platform, Standard Edition for Business (build 1.5.0_24-b02) 
Oracle JRockit(R) (build R28.0.1-21-133393-1.5.0_24-20100512-2131-windows-x86_64, compiled mode) 

相同的代码工作的最新的JRockit如预期的JDK 1.6.0在Windows上:

java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Oracle JRockit(R) (build R28.2.2-7-148152-1.6.0_29-20111221-2104-windows-x86_64, compiled mode) 

和相同的JRockit版本,但对于Linux:

java version "1.5.0_24" 
Java(TM) Platform, Standard Edition for Business (build 1.5.0_24-b02) 
Oracle JRockit(R) (build R28.1.0-123-138454-1.5.0_24-20101014-1350-linux-x86_64, compiled mode) 
0

尝试查询与*:*

final Set<ObjectName> mBeans = connection.queryNames(new ObjectName("*:*"), 

对象名称可能有不止一个的MBeanServer,该JRMC查找所有MBeanServers的JRockit的。

+0

它给出了相同的结果。除了上面的代码,我已经遍历所有可用的域。 – 2012-02-17 09:01:22