`
longgangbai
  • 浏览: 7311055 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring JMX的总结学习(二) 注解实现MBean

阅读更多

    本文采用Spring JMX 和MX4J开发的JMX,

备注必须的类库为:ms4j-tools-3.0.1.jar,mx4j-3.0.2.jar   

  具体要实现JMX MBean的 注解类:

package com.easyway.jboss.jmx.spring.service;

import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedOperationParameter;
import org.springframework.jmx.export.annotation.ManagedOperationParameters;
import org.springframework.jmx.export.annotation.ManagedResource;
/**
 * 采用Spring的注解方式实现JMX的开发
 * @author longgangbai
*正如你所见,除了元数据定义的语法外只有很少的变动。这个方法在后台启动时会有一点缓慢,
*因为要在类中使用Commons Attributes转换JDK5.0的注解。不过,这仅仅是一次性的开销并
*且JDK5.0的注解为你带来编译时检查的好处。 
*
 */
@ManagedResource
public class JMXAnonationMBeanManager {
	
	private int clientStatus;
	@ManagedOperation(description = "pause a single proccess")   
    @ManagedOperationParameters( { @ManagedOperationParameter(name = "Name of proccess instance", description = "Mandatory") })   
    public void pause(String n) {   
        System.out.println("pause");   
    }   
   
    @ManagedOperation(description = "shut down the proccess")   
    public void monitor() {   
        System.out.println("shutting down…");   
    }   
   
    public void publicMessage() {   
        System.out.println("public Message to monitor server");   
    }   
   
    @ManagedAttribute(description = "client status")   
    public int getClientStatus() {   
        return clientStatus;   
    }   
   
    @ManagedAttribute(description = "client status")   
    public void setClientStatus(int clientStatus) {   
        this.clientStatus = clientStatus;   
    }   
}   

 

 

配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 <!-- 
        要在管理接口定义中使用JDK5.0的注解,Spring提供了一个注解集镜像到Commons Attribute参数类和一个JMX的实现来支持JmxAttributeSource, 
        AnnotationsJmxAttributeSource并允许MbeanInfoAssembler读取它们。
  -->
 <!-- 创建相关的Bean对象并设置参数 -->
 <bean id="monitorMBeanManager" class="com.easyway.jboss.jmx.spring.service.JMXAnonationMBeanManager"/>
 
 
<!-- 创建一个MBeanServer对象,
  
 -->
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
</bean>

<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>


<bean id="assembler"  class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
   <property name="attributeSource">
     <ref local="jmxAttributeSource"/>
   </property>
</bean>

<bean id="httpAdaptor" class="mx4j.tools.adaptor.http.HttpAdaptor">
    <property name="processor">
         <bean id="xsltProcessor" class="mx4j.tools.adaptor.http.XSLTProcessor"/>
    </property>
    <property name="port">
       <value>8000</value>
    </property>
</bean>

<!--一个由 MBeanServerFactoryBean 创建的 MBeanServer 实例,它通过属性server提供给了 MBeanExporter。 
当你提供了你自己的 MBeanServer 实例后,MBeanExporter 将使用该实例,且不再查找一个运行中的 MBeanServer。
  设置相关的Bean的暴露为JMX
   关系最大的是 exporter Bean。beans 属性使得 MBeanExporter 知道要将哪个Bean输出到JMX的 MBeanServer 上去。 
   缺省配置中,beans 里的 Map 中的条目的key被用作相应条目值所引用的Bean的 ObjectName。
  -->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
      <property name="assembler">
          <ref local="assembler"/>
      </property>
     <property name="beans">
       <map>
          <entry key="bean:name=monitorMBeanManager" value-ref="monitorMBeanManager">
          </entry>
          <entry key="mx4j:name=HttpAdaptor" value-ref="httpAdaptor">
          </entry>
       </map>
    </property>
     <property name="server" ref="mbeanServer"/>
</bean>

</beans>

 

测试代码如下:

package com.easyway.jboss.jmx.spring.service;

import java.io.IOException;

import mx4j.tools.adaptor.http.HttpAdaptor;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 采用Mx4j测试JMX
 * @author longgangbai
 *
 */
public class JBossJMXServiceClient {
  public static void main(String[] args) throws IOException {
	  ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext-jmx-annotation.xml");
	  HttpAdaptor httpAdaptor=(HttpAdaptor)ctx.getBean("httpAdaptor");
	  httpAdaptor.start();
}
}

 

 

在浏览器中输入:

说明:applicationContext.xml配置文件中已经设置httpAdaptor端口号为8000,运行JBossJMXServiceClient 后,通过web浏览器登录http://localhost:8000 ,点击bean:name=monitorMBeanManager进入页面,就可以访问或者通过暴露的接口操作JMXAnonationMBeanManager 了。

 

 

分享到:
评论

相关推荐

    spring jmx

    为了更深入地学习Spring JMX,可以参考压缩包中的"SpringJMX.pdf"文件。这份文档通常会详细讲解Spring JMX的配置、MBean的创建、MBeanServer的使用,以及如何在Spring应用中集成和利用JMX进行监控和管理。通过阅读这...

    JMX与Spring 结合

    注解方式则是Spring提供的简化方式,可以直接在Bean上使用`@ManagedResource`,在属性和方法上使用`@ManagedAttribute`和`@ManagedOperation`,Spring会自动处理MBean的注册和暴露。 4. **发布通知,处理通知及配置...

    基于Spring+JMX+Tomcat实现资源动态管理

    3. 使用Spring的JMX支持:Spring提供了`PlatformMBeanServerBeanPostProcessor`,它可以自动检测带有MBean注解的bean并将其注册到MBean服务器。 4. 连接和管理:通过JConsole或其他JMX客户端工具,如VisualVM或JMC...

    spring框架下jmx入门例子

    通常,我们需要定义一个bean,该bean实现了MBean接口或者使用了`@ManagedResource`注解,使得它成为JMX管理的对象。例如,你可能会看到如下配置: ```xml &lt;jmx:managed /&gt; ``` 这里的`jmx:managed`标签表示将`...

    JMX (三)--------spring整合JMX

    2. **定义MBeans**:MBeans可以通过两种方式创建:使用标准的`@ManagedResource`注解标记Spring Bean,或者通过实现`MBean`接口。使用注解的方式更加便捷,因为它可以自动暴露属性和操作。 3. **注册MBeans**:...

    JMX(一)-------MBean server

    **JMX(一)——MBean Server** Java Management Extensions (JMX) 是Java平台上的一个标准,用于管理和监控应用程序、设备...通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。

    jmx开发例子,包括与spring结合例子

    Spring支持JMX,可以让你通过JMX接口管理Spring容器中的bean,实现远程监控和管理。 下面我们将详细探讨JMX和Spring的结合使用: 1. **JMX基础**: - **MBeans**:JMX的核心组件,是可管理的Java对象,代表了被...

    JMX学习资料

    Spring的`MBeanExporter`和`@ManagedResource`注解是实现这一目标的关键。 综上所述,JMX是一个强大的工具,它为Java应用程序提供了全面的管理能力。通过理解并掌握JMX的核心概念和技术,开发者可以更好地监控和...

    JMX.rar_jmx_osgi

    Spring的`@ManagedResource`注解可以自动将bean暴露为MBean,而`@ManagedAttribute`和`@ManagedOperation`可以分别标记可管理的属性和操作。 9. **JMX与OSGi的集成**:在OSGi环境中,可以通过实现特定的服务接口...

    Spring2.5-Reference_zh_CN.txt

    - **AOP实现**:Spring支持基于XML和注解的方式定义AOP切面,并提供了强大的切入点表达式语言。 - **@AspectJ支持**:Spring 2.5还支持使用@AspectJ注解编写切面类,这种方式更加灵活。 #### 六、数据访问支持 - **...

    Spring攻略(第二版 中文高清版).part1

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    Spring in Action(第二版 中文高清版).part2

    12.4 使用JMX管理Spring Bean 12.4.1 将Spring Bean输出为MBean 12.4.2 远程访问MBean 12.4.3 处理通知 12.5 小结 第三部分 Spring客户端 第13章 处理Web请求 13.1 开始Spring MVC之旅 13.1.1 请求生命中的...

    Spring攻略(第二版 中文高清版).part2

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    SpringJMX.pdf

    通过本次讨论,我们深入了解了**软件监控与管理**的重要性,学习了**JMX**的基本概念和发展历程,并探讨了不同类型的MBeans以及它们的应用场景。特别是结合**Spring**框架的使用,让JMX的管理和配置变得更加简单高效...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring API

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring 2.0 开发参考手册

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    spring-core-4.3.15.RELEASE.jar

    在本文中,我们将详细探讨Spring Core 4.3.15.RELEASE版本中的关键概念、功能和实现机制。 1. **依赖注入(Dependency Injection, DI)** - 依赖注入是Spring的核心特性之一,它允许开发者在运行时将对象之间的...

    spring chm文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

Global site tag (gtag.js) - Google Analytics