ains.each{println it}
println "\nRegistered MBeans:"
server.queryNames(null, null).each{println it}
如果 Grails 正在运行,应该可以看到如清单 14 所示的输出:
清单 14. testJmx.groovy 脚本的输出
$ groovy testJmx.groovy
Number of registered MBeans: 20
Registered Domains:
java.util.logging
JMImplementation
java.lang
log4j
Registered MBeans:
java.lang:type=MemoryManager,name=CodeCacheManager
java.lang:type=Compilation
java.lang:type=GarbageCollector,name=Copy
java.lang:type=MemoryPool,name=Eden Space
log4j:appender=stdout
java.lang:type=Runtime
log4j:hierarchy=default
log4j:logger=root
log4j:appender=stdout,layout=org.apache.log4j.PatternLayout
java.lang:type=ClassLoading
java.lang:type=MemoryPool,name=Survivor Space
java.lang:type=Threading
java.lang:type=GarbageCollector,name=MarkSweepCompact
java.util.logging:type=Logging
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=MemoryPool,name=Code Cache
java.lang:type=MemoryPool,name=Tenured Gen
java.lang:type=MemoryPool,name=Perm Gen
JMImplementation:type=MBeanServerDelegate
精通Grails: 在企业中使用Grails(11)
时间:2011-08-02 IBM Scott Davis
警告
testJmx.groovy 脚本可能会抛出一条类似清单 15 所示的 groovy.lang.MissingMethodException:
清单 15. 可能抛出的 JMX 异常
Caught: groovy.lang.MissingMethodException: No signature of method:
javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.queryNames()
is applicable for argument types: (java.lang.String, null)
如果发生这种情况,请从 $GROOVY_HOME/lib 中删除 mx4j-3.0.2.jar。它包含在 Groovy 发布版中, 以通过 JMX 支持 1.4 JDK,但它与 Java 平台的更高版本冲突。
这个脚本中有趣的部分来自 javax.management.MBeanServer,javax.management.MBeanServer 是调 用 connector.mBeanServerConnection 时返回的(记住,Java 中的 getFoo() 方法调用在 Groovy 中可 以简写为 foo)。调用 server.mBeanCount 返回已注册 MBean 的数量。调用 server.domains 返回一个 由域名组成的 String[]。域名是 MBean 标识符的第一部分 — 用逗号分隔的名/值对列表完全限定名称 。调用 server.queryNames(null, null) 返回一个由所有已注册 MBean 组成的 Set。
为了获得某个特定 MBean,请将清单 16 中的代码添加到脚本底部:
清单 16. 获得一个 MBean
println "\nHere is the Runtime MBean:"
def mbean = new GroovyMBean(server, "java.lang:type=Runtime")
println mbean
有了一个到 MBean 服务器的连接并知道 MBean 的名称后,使用一行即可获取一个新的 GroovyMBean 。清单 17 显示了脚本输出:
清单 17. GroovyMBean 输出
Here is the Runtime MBean:
MBean Name:
java.lang:type=Runtime
Attributes:
(r) javax.management.openmbean.TabularData SystemProperties
(r) java.lang.String VmVersion
(r) java.lang.String VmName
(r) java.lang.String SpecName
(r) [Ljava.lang.String; InputArguments
(r) java.lang.String ManagementSpecVersion
(r) java.lang.String SpecVendor
(r) long Uptime
(r) long StartTime
(r) java.lang.String LibraryPath
(r) java.lang.String BootClassPath
(r) j
|