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

Spring 2.x jmx 及应用(1)Annotation

阅读更多
现在大部分企业的应用程序都需要application提供监视程序运行的健康状况和硬件状况的功能。
举个例子,前段时间做的一个项目,需要在一台机器上监视几十台client的操作,CPU使用率,内存,硬盘等信息,当CPU,内存使用率过高时,发出通知到该client.甚至操作client的执行动作,都可用jmx做到。
今天将从简单入手结合jdk的Annotation来实践Spring对jmx的支持
<?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.MBeanManager"/>
	
	
	<!-- JMX configuration -->
	<!-- 创建一个mbeanServer -->
	<bean id="mbeanServer" 
		  class="org.springframework.jmx.support.MBeanServerFactoryBean">
	</bean>
		
	<!-- MetadataMBeanInfoAssembler是AutodetectCapableMBeanInfoAssembler 唯一实现
		spring文档中有专门介绍AutodetectCapableMBeanInfoAssembler的章节
	 -->
	<bean id="assembler"
		  class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
		<property name="attributeSource" ref="jmxAttributeSource"/>
	</bean>
	
	<!-- 解释mbean中Annotation的类,我们可以看到他给注入到assembler,被org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler包装-->
	<bean id="jmxAttributeSource"
		  class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>

         <!-- spring jmx最核心的类 -->
	<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>

以前jmx的应用需要编写很长的代码来实现,现在你只需完成以上配置就可以实现一个简单的jmx server的程序,jmx server的实现有很多,通常情况下,jmx会需要一个容器例如jboss,现在的方法是将程序本身作为server,这个方式最经典的例子就是个大apserver,我的第一次jmx体验就是在看jboss源码时发起的。实现方式不同会用到不同的协议,这里我们需要jmxremote.jar,你可在spring的lib中找到。


现在来看下我们的mbean
package com.xmlasia.spring.test.jmx;

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;

@ManagedResource
public class MBeanManager {
	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;
	}
}

我们可以到类中定义了几个方法,monitor server可以通过clientStatus了解到client的状态,publicMessage是用来主动的发送消息到monitor server,所有不需要想外界暴露。monitor server可以通过
获得信息中的ObjectName和Ip来连接到client操作mbean.

mbean在jdk的标准实现是需要实现一个以MBean结尾的interface的,其中定义向外界暴露的方法和属性
现在之需要在类前定义@ManagedResource,在属性方法前分别用@ManagedOperation或者@ManagedAttribute修饰就可以了,Annotation实在是太方便了。未来将会有更多的应用。


该测试了
public static void main(String[] args){
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/jmxContext.xml");
		
		while(true){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

现在我们只需要让Spring加载上面那段bean的定义就好了。jmx mbean server的启动是不会阻塞主线程的,所以需要保持主线程活着,不然加载完main方法就结束了,mbean server也挂了。

jdk里有个强大的monitor server那就是jconsole,不过一次只有一个连接
大家可以用jconsole来连接到mbean,调用方法或属性察看结果。

spring jmx很有多有用的功能本人正在挖掘,过段时间再放出一些心得,欢迎有兴趣的一起讨论。
分享到:
评论
2 楼 jlcon 2009-05-15  
我试着做了配置了一下,但是用jconsole却不知道怎么连接上去,不晓得选哪个链接。
1 楼 sunson468 2009-02-11  
annotation是很强大啊,呵呵!

你里面的spring的配置都可以通过注解代替,呵呵~目前学习中。

相关推荐

    spring-boot-reference.pdf

    24.6.1. Loading YAML 24.6.2. Exposing YAML as Properties in the Spring Environment 24.6.3. Multi-profile YAML Documents 24.6.4. YAML Shortcomings 24.7. Type-safe Configuration Properties 24.7.1. Third...

    spring4.3.10.rar

    9. **JMX 改进**:对 JMX(Java Management Extensions)的支持进行了增强,使得监控和管理 Spring 应用更加便捷。 10. **错误处理**:提供了统一的错误处理机制,包括 `ErrorController` 和 `ErrorAttributes`,...

    Spring中文帮助文档

    13.9.1. 配置 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. ...

    Spring API

    13.9.1. 配置 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. ...

    spring4.3.9版本jar包及开发常用jar包

    Spring框架本身并不绑定到特定的日志实现,而是通过`spring-context-support.jar`中的`org.springframework.jmx.export.annotation.AnnotationMBeanExporter`类提供对各种日志系统的支持。在实际项目中,根据需求...

    Spring3.0源码2

    5. **REST支持**:Spring 3.0增加了对RESTful服务的支持,`org.springframework.web.bind.annotation.RequestMapping`和`@ResponseBody`注解用于处理HTTP请求并返回JSON或XML响应。 6. **JSR-303/JSR-349 Bean ...

    示例代码:spring actuator添加自定义endpoint

    import org.springframework.context.annotation.Configuration; @Configuration public class ActuatorConfig { @Bean public HealthEndpointGroupCustomizer&lt;MyActuator&gt; myCustomEndpoint() { return (group...

    Springboot_endpoint

    import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; @Endpoint(id = "myendpoint") public class MyEndpoint { @ReadOperation public MyInfo info() { // 实现获取自定义信息的逻辑...

    精通Spring2.0读书笔记(1)

    Java与Java EE平台规范标准化了各种具体Java技术,比如,JDBC,JMX,Servlet,Annotation和JNDI API等,这些具体技术正是Spring2.0统一一体中的具体侧面。Spring2.0是Java和Java EE架构级框架,其依托的正是这些具体...

    spring 3.0帮助文档

    2. **注解驱动开发(Annotation-based Development)**:Spring 3.0引入了大量的注解,如@Service、@Controller、@Repository和@Transactional,减少了XML配置,提高了代码可读性。例如,@Autowired用于自动装配依赖,...

    spring-framework-master.zip

    4. AOP:面向切面编程模块,实现切面和通知的定义及应用。 5. Test:测试模块,支持对Spring应用的单元测试和集成测试。 三、核心技术 1. Dependency Injection:依赖注入是Spring的核心特性,通过XML或注解方式...

    spring MVC必备jar包

    1. **Spring Framework Core**: `spring-core.jar` 包含了Spring框架的基础类,如IoC(Inversion of Control,控制反转)容器和依赖注入(DI,Dependency Injection)的核心实现。它还提供了基本的资源处理和类型...

    Spring quartz1.6.jar(java定时任务)

    Spring Quartz 是一个强大的开源任务调度库,它允许开发者在Java应用程序中定义和执行定时任务。在Java定时任务领域,Spring Quartz 提供了高度灵活且可靠的解决方案。本篇将深入探讨Spring与Quartz的集成,以及如何...

    第十章 Spring 配置元信息(Configuration Metadata)1

    1. **Spring Bean配置元信息**:BeanDefinition是Spring中表示Bean配置的基本单元,它包含了Bean的所有元数据,如类名、初始化方法、销毁方法、依赖关系等。BeanDefinition有多种类型,如GenericBeanDefinition、...

    Spring Cache 复合缓存管理器

    在Spring框架中,Spring Cache是用于提供统一的缓存抽象层的一个重要组件,它使得开发者能够在不修改代码的情况下,方便地在应用中引入缓存机制,以提高性能和响应速度。"Spring Cache 复合缓存管理器"指的是通过...

    spring源码

    1. Spring IoC 容器:Spring的核心在于其Inversion of Control(控制反转)容器,它负责管理对象的生命周期和依赖关系。在Spring2.5中,IoC容器通过使用注解(Annotation)进一步简化了配置,例如`@Component`、`@...

    ApacheMina典型例子分析参考.pdf

    2.0.x是当前在SVN trunk上的活跃版本,设计上有重大更新,包括对Spring等IoC容器的简化集成、基于OGNL的JMX远程管理支持,以及使用Java Annotation的全新状态机API。这些改进提升了效率,比如基于Apache APR的基础I/...

    xdoclet应用

    《xdoclet应用详解》 在软件开发领域,xdoclet是一个非常实用的工具,尤其在Java企业级应用中,它扮演着自动化代码生成的角色,极大地提升了开发效率。本文将深入探讨xdoclet的原理、功能及其在实际项目中的应用。 ...

    深入体验Java+Web开发内幕-高级特性.pdf 高级的 张孝祥 的第二本好书源码

    - **Struts2或Spring Boot**:其他流行的Web开发框架,Struts2基于Action和Interceptor,Spring Boot则简化了Spring应用的启动和配置。 4. **数据库交互**: - **JDBC**:Java数据库连接,用于与各种数据库进行...

    java面试经验及其笔试题目大全

    知道注解在Spring框架、编译器插件和运行时处理等方面的应用。 10. **设计模式**:至少熟悉并能应用单例、工厂、抽象工厂、建造者、适配器、装饰器、代理、观察者、策略、模板方法、访问者等常见设计模式。 11. **...

Global site tag (gtag.js) - Google Analytics