首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

精通 Grails 在企业中使用 Grails(2)

精通 Grails 在企业中使用 Grails(2)

启用远程 JMX 代理不要在工作时尝试这个操作永远不要在生产中使用这个配置。出于演示目的,我关闭了所有身份验证和加密。要了解如何保护 JMX 代理的远程管理,请参阅 。

要设置 JMX 代理以接受远程连接,需要向 JVM 传递另外几个与 JMX 相关的标志。这几个标志打开一个管理端口并配置安全设置(或本例中的 )。
向 Grails 启动脚本添加三个新行,如清单 4 所示:
清单 4. 在 Grails 启动脚本中启用远程 JMX 监控
1
2
3
4
5
export JAVA_OPTS="-Dcom.sun.management.jmxremote"   
export JAVA_OPTS=" $JAVA_OPTS -Djava.rmi.server.hostname=localhost"
export JAVA_OPTS=" $JAVA_OPTS -Dcom.sun.management.jmxremote.port=9004"
export JAVA_OPTS=" $JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
export JAVA_OPTS=" $JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"




使用这些设置重新启动 Grails。还要重新启动 JConsole。这次,单击 Remote 选项卡并连接到端口 9004上的 localhost,如图 3 所示:
图 3. 在 JConsole 中连接到远程 JMX 代理这是一种验证是否连接上远程 JVM(即使它在同一系统上运行)的快速方法。单击 MBeans 选项卡。展开左边的 java.lang 树。单击 Runtime元素。然后在屏幕右侧的属性窗口中双击 InputArguments。您应该看到所有远程 JMX 设置,如图 4 所示:
图 4. 传递给 JVM 的 JMX 远程代理标志让这个窗口保持打开。单击 Connection 菜单打开一个新的连接。单击 Remote 选项卡,这次接受默认值(端口 0上的 localhost)。展开 Runtime MBean 的 InputArguments。注意这里没有远程 JMX 标志(如图 5 所示):
图 5. 监控两个不同的 JMX 代理如果标题栏(监控本身)的提示不够清楚,注意您刚打开的第二个 JConsole 窗口,它监控 JConsole 应用程序本身。
现在您启动了 JConsole 并监控 Grails 应用程序,此时应该使用它进行一些实际操作了,比如调整登录设置,不过在进行该操作之前,必须先理解最后一个 JMX 难点:MBean 服务器。
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 基础设施
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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 的基础设施。mbeanServerbean 保存一个到现有 MBean 服务器的引用。mbeanServerbean 被注入到 exporterbean —将 MBean 列表呈现给 JMX 客户机(比如 JConsole)的类。现在仅需将 MBean 添加到 exporterbean 内部的 bean 映射中,以注册它。下一小节将进行此操作。
返回列表