`
swanky_yao
  • 浏览: 30785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring注解JMX(非Web项目)遇到的问题

阅读更多

    在Web项目中使用Spring对JMX的支持非常方便,通过简单的配置即可创建MBeanServer和注册一个普通的JavaBean为MBean。如下所示配置:

        <!-- Annotation配置 -->
	<context:annotation-config />

	<!-- 扫描包 -->
	<context:component-scan base-package="com.hehe.ad" />

       <context:mbean-export server="mbeanServer" />

	<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
		<property name="locateExistingServerIfPossible" value="false" />
	</bean>

    因为是Web项目,所以直接通过org.springframework.web.context.ContextLoaderListener初始化Spring的配置,非常方便,但是我们的Agent端是一个普通的Java项目,而我们也希望使用Spring对JMX的支持,于是我使用如下方式去加载xml文件:

                SpringContainer.appContext = new GenericApplicationContext(
				"spring-context.xml");

		server.agentMbeanServer = (MBeanServer) SpringContainer.appContext
				.getBean("agentMbeanServer");

    启动后,通过JConsole看到xml声明的MBeanServer生成了,而且我们手动注册了一个MBean也已经在那棵JMX树上了,注册方式如下:

ObjectName mletName = null;
		try {
			mletName = new ObjectName("Agent:name=mlet");
			server.createMBean("javax.management.loading.MLet", mletName);
		} catch (Exception e) {
			e.printStackTrace();
		}

    一切顺利!

 

    下面我们开始写一个普通的Spring的Bean对象,通过注解,看看能不能注册到MBeanServer。代码如下:

@Component
@ManagedResource(objectName = "Agent:name=tomcat", description = "Tomcat Operations.", log = true, logFile = "jmx.log")
public class TomcatMbean {
	@ManagedOperation(description = "Start Tomcat.")
	@ManagedOperationParameters( { @ManagedOperationParameter(name = "tomcatInfo", description = "tomcatInfo.") })
	public ResultInfo start(TomcatInfo tomcatInfo) {
		ResultInfo result = new ResultInfo();
		ASService asService = new ASService(tomcatInfo);
		CmdExecutor executor = ExecutorFactory
				.getExecutor(EXECUTOR_TYPE.SCRIPT_EXECUTOR.getTypeCode(),
						tomcatInfo.getId());
		asService.setExecutor(executor);
		if (asService.start()) {
			result.setSuccess(true);
			return result;
		} else {
			result.setErrorInfo("启动Tomcat失败!");
			result.setSuccess(false);
			return result;
		}
	}

    我们通过@Component将这个TomcatMbean注册为Spring的Bean注册为Spring的一个Bean,然后通过JMX的注解来声明这个MBean,如果这些注解看不懂的话,可以参考Spring的官方文档。

    奇怪的事情发生了~~

    通过调试发现,这个Spring的MBean已经被注册上了,也就是说那个@Component注解生效了,但是这个JMX的注解死活不行,然后各种查文档、采用xml方式、各种使用Spring的官方文档的配置方式,反正,就是不行!

    最后,将GenericApplicationContext 改成了ClassPathXmlApplicationContext ,万事ok!!郁闷死~~

    其实一开始也想到这点了,但是觉得不可能就绕过去了,哎,回头还得继续读读Spring的源码~~

 

分享到:
评论

相关推荐

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

    7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 小结 279 第8章 Spring @MVC 280 8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 ...

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

    7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 小结 279 第8章 Spring @MVC 280 8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 ...

    Spring 2.0 开发参考手册

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    Spring中文帮助文档

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 ...

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

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. ...

    Spring API

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...

    spring chm文档

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...

    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 in Action(第二版 中文高清版).part1

    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 请求生命中的...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...

    Spring in Action(第2版)中文版

    12.4使用jmx管理springbean 12.4.1将springbean输出为mbean 12.4.2远程访问mbean 12.4.3处理通知 12.5小结 第三部分spring客户端 第13章处理web请求 13.1开始springmvc之旅 13.1.1请求生命中的一天 13.1.2...

    springboot参考指南

    创建一个非web(non-web)应用 ii. 63. 属性&配置 i. 63.1. 外部化SpringApplication配置 ii. 63.2. 改变应用程序外部配置文件的位置 iii. 63.3. 使用'short'命令行参数 iv. 63.4. 使用YAML配置外部属性 v. 63.5. ...

    Spring @Enable模块驱动原理及使用实例

    Spring @Enable 模块概览 框架实现 @Enable注解模块 激活模块 Spring Framework @EnableWebMvc Web MVC 模块 @EnableTransactionManagement 事务管理模块 @EnableCaching Caching 模块 @...

    fallback:在 tomcat 上运行的 spring 框架项目的良好基础。 使用简单的配置来突出人们期望从 Java 应用程序服务器中获得的许多功能

    fallback 提供了一个很好的示例 Web 应用程序存档(war),用于集成 Spring/Hibernate/JMX/JPA/Ehcache。 为了提出这种干净的集成,您必须筛选大量相互冲突的博客帖子和文档。 我的目标是为您完成这项工作,并提供...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

Global site tag (gtag.js) - Google Analytics