`
baallee
  • 浏览: 11876 次
  • 性别: Icon_minigender_1
  • 来自: zh
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Spring 2.x jmx 及应用(2)mbean注册方式

阅读更多
spring提供了灵活的MBean方式
除了之前介绍过的Annotation

还有Metadata方式,类似于Annotation
这种方式在创建javadoc时候会给予警告但不会影响doc的创建
package com.xmlasia.spring.test.jmx;

/**
 * @@org.springframework.jmx.export.metadata.ManagedResource 
 * (description="My Managed Bean",objectName="spring:bean=test")
 *
 */
public class CommentMBeanManager {
	private int clientStatus;

	/**
	 * @@org.springframework.jmx.export.metadata.ManagedOperation 
	 * (description="pause a single proccess")
	 * 
	 */
	public void pause(String n) {
		System.out.println("pause");
	}

	/**
	 * @@org.springframework.jmx.export.metadata.ManagedOperation 
	 * (description="shut down the proccess")
	 */
	public void monitor() {
		System.out.println("shutting down...");
	}

	public void publicMessage() {
		System.out.println("publicMessage");
	}

	/**
	 * @@org.springframework.jmx.export.metadata.ManagedAttribute 
	 * (description="client status")
	 */
	public int getClientStatus() {
		return clientStatus;
	}

	public void setClientStatus(int clientStatus) {
		this.clientStatus = clientStatus;
	}
}

使用这种方式需要改变attributeSource的实现类
<?xml version="1.0" encoding="UTF-8"?>
<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.0.xsd">

	<!-- mbean -->
	<bean id="mbeanManager"
		class="com.xmlasia.spring.test.jmx.CommentMBeanManager" />


	<!-- JMX configuration -->
	<bean id="mbeanServer"
		class="org.springframework.jmx.support.MBeanServerFactoryBean">
	</bean>

	<!-- 注意这里将更换为AttributesJmxAttributeSource -->
	<bean id="attributeSource"
               class="org.springframework.jmx.export.metadata.AttributesJmxAttributeSource">
		<property name="attributes">
			<bean
			class="org.springframework.metadata.commons.CommonsAttributes" />
		</property>
	</bean>

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

	<bean id="mBeanExporter"
		class="org.springframework.jmx.export.MBeanExporter">
		<property name="server" ref="mbeanServer" />
		<property name="assembler" ref="assembler" />
		 <property name="beans">  
            <!-- 将mbean注册到mBeanExporter -->
            <map>
            	<entry key="mbean:name=testBean"
            		value-ref="mbeanManager" />
            </map>
		 </property>  
	</bean>
</beans>

其他照旧不需修改

如果你有很多mbean spring也提供了很好的解决方法
你只需在修改mBeanExporter的属性autodetect=true
<bean id="mBeanExporter"
		class="org.springframework.jmx.export.MBeanExporter">
		<property name="server" ref="mbeanServer" />
		<property name="assembler" ref="assembler" />
		<property name="autodetect" value="true" />
	</bean>

spring会搜索context中所有被ManagedResource标记的mbean自动进行注册


另一种方式类似于标准的jmx mbean实现,用interface来定义将要暴露的Attribute和Operation
<?xml version="1.0" encoding="UTF-8"?>
<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.0.xsd">

	<!-- mbean -->
	<bean id="mbeanManager"
		class="com.xmlasia.spring.test.jmx.CommentMBeanManager" />


	<!-- JMX configuration -->
	<bean id="mbeanServer"
		class="org.springframework.jmx.support.MBeanServerFactoryBean">
	</bean>

	<!--使用接口来描述mbean-->
	<bean id="assembler"
                class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
		<property name="managedInterfaces">
			<value>
				com.xmlasia.spring.test.jmx.ICommentMBeanManager
			</value>
		</property>
	</bean>

	<bean id="mBeanExporter"
		class="org.springframework.jmx.export.MBeanExporter">
		<property name="server" ref="mbeanServer" />
		<property name="assembler" ref="assembler" />
		<property name="beans">
			<!-- 将mbean注册到mBeanExporter -->
			<map>
				<entry key="mbean:name=testBean"
					value-ref="mbeanManager" />
			</map>
		</property>
	</bean>
</beans>

我们可以通过refactor快速的将CommentMBeanManager的方法和属性抽取到ICommentMBeanManager中。
注意managedInterfaces是一个Class[]的类型不用担心很多接口的问题。

最后注册mbean是有3种行为的分别是
REGISTRATION_FAIL_ON_EXISTING mbean已经存在将会抛出InstanceAlreadyExistsException异常
REGISTRATION_IGNORE_EXISTING 忽视后来注册的mbean
REGISTRATION_REPLACE_EXISTING 覆盖掉之前注册的mbean
通过MBeanExporter的registrationBehaviorName属性进行设定
 <bean id="mBeanExporter" class="org.springframework.jmx.export.MBeanExporter">  
        <property name="server" ref="mbeanServer"/>  
        <property name="assembler" ref="assembler"/>   
        <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/> 
    </bean>  


同样用jconsole进行测试

要了解springjmx前还是要需要掌握jdk对jmx定义,jmx在维护application方法是有很好的应用的。
继续挖掘中
分享到:
评论
1 楼 SINCE1978 2011-11-22  
为何我的spring-context-3.0.3.RELEASE.jar包相应目录下没有AttributesJmxAttributeSource类?
但是2.5.6版本的spring则有。难道spring在2版本和3版本之间变了吗?

相关推荐

    spring框架下jmx入门例子

    在Spring中集成JMX(Java Management Extensions)技术,可以使我们能够远程管理和监控应用中的对象,比如动态修改服务端的属性,这对于调试和性能优化非常有帮助。本教程将引导你入门Spring框架下的JMX应用。 首先...

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

    2. 注册MBean:在Spring配置文件中,使用`&lt;bean&gt;`标签定义MBean,并使用`&lt;jmx:mbean&gt;`和`&lt;jmx:mbean-server&gt;`标签将MBean注册到JMX服务器。 3. 使用Spring的JMX支持:Spring提供了`...

    JMX与Spring 结合

    1. **JMX与Spring 结合实例**:在Spring应用中,可以通过配置或者编程方式来注册MBeans(Managed Beans),这些MBeans代表了应用中的特定组件或服务。Spring 提供了`PlatformMBeanServer`的自动配置,可以方便地将...

    JMX.rar_jmx_osgi

    8. **JMX与Spring**:Spring框架集成了JMX,使得在Spring应用中使用JMX变得简单。Spring的`@ManagedResource`注解可以自动将bean暴露为MBean,而`@ManagedAttribute`和`@ManagedOperation`可以分别标记可管理的属性...

    jmx所需的jar

    JMX可以与其他Java技术结合使用,如Spring框架中的Spring JMX,它提供了更方便的集成方式。此外,许多开源工具和应用服务器,如JConsole、VisualVM等,都利用JMX来提供可视化的监控界面。 总的来说,`jmx-1_2_1-ri....

    spring jmx

    这份文档通常会详细讲解Spring JMX的配置、MBean的创建、MBeanServer的使用,以及如何在Spring应用中集成和利用JMX进行监控和管理。通过阅读这份资料,你将能够理解Spring JMX的全貌,掌握如何在实际项目中有效地...

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

    首先,**Spring对JMX的支持**使得在Spring应用中注册MBeans(Managed Beans)变得简单。MBeans是JMX的核心组件,它们是可管理的对象,提供了对特定资源或服务的访问和控制。Spring通过`MBeanServer`接口和`...

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

    总的来说,JMX和MBean Server提供了一种标准、灵活的管理方式,使得Java应用的管理和监控变得更加便捷。通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。

    spring-boot-reference.pdf

    20.5.2. Remote Update 21. Packaging Your Application for Production 22. What to Read Next IV. Spring Boot features 23. SpringApplication 23.1. Startup Failure 23.2. Customizing the Banner 23.3. ...

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

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签...

    JMX小例子以及介绍

    mbs.registerMBean(mbean, mbean.getObjectName()); // 现在可以在JConsole或其他JMX客户端中找到并管理这个MBean } ``` 在这个例子中,我们创建了一个名为`MyManagedBean`的MBean,它有一个计数器属性。然后,...

    spring chm文档

    13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: RequestToViewNameTranslator 13.12. 其它资源 14. 集成视图技术 14.1. 简介 14.2. JSP和JSTL 14.2.1. 视图解析器 14.2.2. 'Plain-...

    JMX SPRING

    Spring通过`MBeanExporter`类将Spring Bean注册到MBean服务器,这些Bean可以是标准的JMX MBean,也可以是自动转换的Spring Bean。此外,Spring还支持自定义的MBean信息,如MBean的名称、描述、属性和操作。 **JMX的...

    Spring 2.0 开发参考手册

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. ...

    springboot参考指南

    23.6.2. 在Spring环境中使用YAML暴露属性 iii. 23.6.3. Multi-profile YAML文档 iv. 23.6.4. YAML缺点 vii. 23.7. 类型安全的配置属性 i. 23.7.1. 第三方配置 ii. 23.7.2. 松散的绑定(Relaxed binding) iii. 23.7...

    Spring中文帮助文档

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons标签 13.9.8. password标签 13.9.9. select标签 13.9.10. option标签 ...

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

    2. **Spring与JMX整合**: - **Spring的MBeanExporter**:Spring提供的工具类,负责将Spring容器中的bean注册为MBeans。 - **@ManagedResource**:Spring提供的注解,用于标记一个类为MBean,定义其管理属性和操作...

    Spring API

    11.7.2. 处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中...

    JAVA JMX 学习资料

    学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何利用JMX进行应用性能调优。对于开发者而言,JMX是提高应用可维护性和可管理性的重要工具。通过深入学习和...

    mx4j管理jmx的jar与spring结合使用

    2. **创建MBean**:定义一个Java类,该类遵循JMX规范,实现MBean接口或扩展MBean基类。MBean是JMX中的管理实体,可以暴露应用程序的状态和操作。 3. **注册MBean**:Spring通过`MBeanExporter` bean来注册MBean。在...

Global site tag (gtag.js) - Google Analytics