2012-02-17 38 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