Spring Framework 的 JMX 和 MBean

WebSphere® Application Server Version 6.1 和更高版本支持 Spring Java™ 管理扩展 (JMX) MBean。

JMX 和 MBean

要使用对 Spring JMX MBean 的支持,必须向应用程序服务器中容器管理器的 MBeanServer 实例注册 JMX MBean。 如果未对 MBean 指定服务器属性,那么 MBeanExporter 对象会尝试检测正在运行的 MBeanServer 实例。 因此,对于应用程序服务器中运行的应用程序,Spring Framework 将查找容器的 MBeanServer 实例。

请不要使用 MBeanServerFactory 类来实例化 MBeanServer 实例并将该实例注入到 MBeanExporter 对象中。 并且,不要使用 Spring Framework 的 ConnectorServerFactoryBean 或 JMXConnectorServer 类来通过打开入站 JMX 端口对客户机显示本地 MBeanServer 实例。

在应用程序服务器中注册 Spring MBean

在应用程序服务器中注册 MBean 时,将通过标准对象名 javax.management.ObjectName 来标识该 MBean。 例如:
WebSphere:cell=99T73GDNode01Cell,name=JmxTestBean,node=99T73GDNode01,process=server1,type=JmxTestBeanImpl 
注销 MBean 时,必须使用相同的标准名称来查询该 MBean,而不只是使用该 MBean 的名称属性。 管理此操作的最佳方法是实现 org.springframework.jmx.export.naming.ObjectNamingStrategy 接口。 ObjectNamingStrategy 接口封装了 ObjectName 对象的创建过程,该接口由 MBeanExporter 类用于在注册 Bean 时获取 ObjectName。 可以将 ObjectNamingStrategy 实例添加到您注册的 Bean,以便在卸载应用程序时正确注销 MBean。 例如:
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
  lazy-init="false">
  <property name="beans">
    <map> <entry key="JmxTestBean" value-ref="testBean" /> </map>
  </property>
  <property name="namingStrategy" ref="websphereNamingStrategy" />
...
</bean>

MBean 和通知

要使用通知,建议为 MBean 定义完整的对象名,因为 MBean 在 WebSphere Application Server中注册时由标准对象名标识。 例如:
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" 
  lazy-init="false">
  <property name="beans">
    <map>
      <entry key="JmxTestBean" value-ref="testBean" />
    </map>
  </property>
  <property name="namingStrategy" ref="websphereNamingStrategy" />
  <property name="notificationListenerMappings">
    <map>
      <entry key="WebSphere:cell=99T73GDNode01Cell, name=JmxTestBean,
			node=99T73GDNode01, process=server1, type=JmxTestBeanImpl">
        <bean class="client.MBeanListener" />
      </entry>
    </map>
  </property>
</bean>
[z/OS]

z/OS® 中的 Spring JMX 和 multicall 方法

WebSphere Application Server V 6.1 或更高版本支持多服务方区域服务器上的 Spring JMX。 然而,部署选项将受到限制,这是因为您无法使用 Spring Framework 在 MBean 描述符中指定特定于平台的字段。 应用程序服务器在缺省情况下将使用单一调用策略,以便在单个不确定服务方区域中仅要求 MBean 的一个实例来运行请求。 在某些情况下,此行为是合适的,但在更多的情况下,应用程序需要声明多重调用方法和单一调用方法的组合,并且需要包括一些聚集逻辑。