技术开发 频道

精通 Grails: 在企业中使用 Grails

  MBean 服务器、Grails 和 Spring

  您在 JConsole 上单击的 Runtime 元素是一个 MBean。为了让 MBean 呈现给 JMX 客户机,必须使用一个内部运行有 JMX 代理的 MBean 服务器注册它。有些人将术语 “JMX 代理” 等同于 “MBean 服务器”,但从技术上讲,MBean 服务器是在 JMX 代理内部运行的众多组件中的一个。

  要以编程方式注册 MBean,需调用 MBeanServer.registerMBean()。不过,在 Grails 中,更准确地说,这是由一个配置文件(一个 Spring 配置文件)管理的。

  Spring 是 Grails 的核心。它是控制所有类如何交互的依赖项注入框架(有关 Spring 的更多信息,请参阅 参考资料)。

  从 JMX 角度,您可能会想:我在用 MBean 服务器注册这个 MBean。但从 Spring 角度,您应该这样考虑:我在将 MBean 注入到 MBean 服务器中。动作对象可能不同,但最终结果是一样的:MBean 变为对 JMX 客户机是可视的。

  首先在 grails-app/conf/spring 中创建一个名为 resources.xml 的文件(在本文后面,您将明白 resources.groovy 和 resources.xml 的关系)。设置 resources.xml,如清单 5 所示:

  清单 5. 在 resources.xml 中设置 Spring/JMX 基础设施

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation
="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  
<bean id="mbeanServer"
        class
="org.springframework.jmx.support.MBeanServerFactoryBean">
      
<property name="locateExistingServerIfPossible" value="true" />
  
</bean>
  
  
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">    
    
<property name="server" ref="mbeanServer"/>
    
<property name="beans">
      
<map>
      
</map>
    
</property>
  
</bean>  
</beans>

  如果想确保基本配置是正确的,那么现在可重新启动 Grails,但只解决问题的一半:您有了一台 MBean 服务器,但是没有任何 MBean。此时看到的两个 bean(mbeanServer 和 exporter)是需要注册 MBean 的基础设施。mbeanServer bean 保存一个到现有 MBean 服务器的引用。mbeanServer bean 被注入到 exporter bean — 将 MBean 列表呈现给 JMX 客户机(比如 JConsole)的类。现在仅需将 MBean 添加到 exporter bean 内部的 bean 映射中,以注册它。下一小节将进行此操作。

0
相关文章