技术开发 频道

精通 Grails: 在企业中使用 Grails

  Groovy 中的 JMX

  我最后要向您展示的是如何以编程方式调试 JMX MBean。JConsole GUI 非常漂亮,能够从 Groovy 脚本进行更改更是增加了它的魅力。

  开始之前,创建一个名为 testJmx.groovy 的文件,将清单 13 中的代码添加到该文件中:

  清单 13. 在 Groovy 中调用一个远程 JMX 代理

import javax.management.MBeanServerConnection
import javax.management.remote.JMXConnectorFactory
import javax.management.remote.JMXServiceURL

def agentUrl
= "service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi"
def connector
= JMXConnectorFactory.connect(new JMXServiceURL(agentUrl))
def server
= connector.mBeanServerConnection

println
"Number of registered MBeans: ${server.mBeanCount}"

println
"\nRegistered Domains:"
server.domains.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

  警告

  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 平台的更高版本冲突。  

0
相关文章