技术开发 频道

精通 Grails: 在企业中使用 Grails

  这个脚本中有趣的部分来自 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) java.lang.String VmVendor
  (r) java.lang.String ClassPath
  (r) java.lang.String SpecVersion
  (r) java.lang.String Name
  (r)
boolean BootClassPathSupported

  是否还记得本文前面提到的 InputArguments?它们是传递给 JVM 的所有 -D 参数。使用这些参数来确认您确实连接到了远程 JMX 代理。再添加两行代码(如清单 18 所示)以输出 String[]:

  清单 18. 从运行时 MBean 获取 InputArguments

println "\nHere are the InputArguments:"
mbean.InputArguments.each{println it}

  如果看到清单 19 所示的输出,就说明您圆满完成了所有任务:

  清单 19. 显示 InputArguments

Here are the InputArguments:
-Xserver
-Xmx512M
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.port=9004
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dprogram.name=grails
-Dgroovy.starter.conf=/opt/grails/conf/groovy-starter.conf
-Dgrails.home=/opt/grails
-Dbase.dir=.
-Dtools.jar=/Library/Java/Home/lib/tools.jar
0
相关文章