`
swanky_yao
  • 浏览: 31779 次
  • 性别: 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的源码~~

 

分享到:
评论

相关推荐

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

    - 配置Spring:在Spring配置文件中,使用`&lt;jmx:mbean-export&gt;`或`&lt;bean class="org.springframework.jmx.export.MBeanExporter"&gt;`来导出MBeans。 - 注册MBeans:指定要导出的bean及其在MBeanServer中的ObjectName...

    Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解完整版

    此外,Spring 3.0.5 对 JDBC、JMS、JMX 等多种技术提供了支持,是企业级应用开发的强大工具。 9、MyBatis3.0.4 简介MyBatis 是一个轻量级的持久层框架,它将 SQL 语句与 Java 代码分离,通过 XML 或注解配置,将...

    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. 为...

    spring源码注释中文

    3. **Web**:该模块包含 Spring MVC(模型-视图-控制器)框架,用于构建 Web 应用程序。Spring MVC 提供了一个灵活的架构,支持多种视图技术,如 JSP、FreeMarker 和 Velocity。 4. **AOP(面向切面编程)**:...

    spring3.0最新lib包

    1. **模块化设计**:Spring 3.0引入了模块化结构,将核心功能和其他特定领域的功能分开,如AOP(面向切面编程)、ORM(对象关系映射)、Web、JDBC等,使得开发者可以根据项目需求选择相应的模块,降低了依赖的复杂度...

    spring4.3.12源码包

    9. **JMX(Java Management Extensions)支持**:Spring允许注册bean到JMX管理器,方便监控和管理应用程序。 10. **异步处理和任务调度**:Spring提供了异步方法执行和任务调度的能力,通过`@Async`注解可以实现...

    Spring与java计划任务项目,本人亲切可用。

    5. **Spring注解驱动**: 除了传统的XML配置,Spring还提供了注解驱动的方式来声明和调度任务。通过`@Scheduled`注解,可以直接在方法上声明一个定时任务,简化了配置。 6. **监控和管理**: Quartz提供了Web界面(如...

    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 ...

    在web项目中新增或者添加webservice服务

    在Web项目中添加Web服务(Web Service)是一项常见的任务,特别是在构建分布式系统或者需要不同应用程序之间进行数据交换时。Web服务允许不同的应用平台通过统一的标准(如SOAP、RESTful等)进行通信。以下是一个...

    spring-boot-2.7.0.zip源码

    当我们深入研究Spring Boot 2.7.0的源码时,可以更深刻地理解其工作原理,提升我们的开发技能,并有助于解决实际项目中遇到的问题。本文将围绕Spring Boot 2.7.0的源码展开,探讨其中的关键技术和设计模式。 1. **...

    spring 3.0 jar spring最新开发包

    1. **配置文件**:虽然Spring 3.0支持注解配置,但传统的XML配置文件仍然可用,可以根据项目需求选择合适的方式。 2. **Bean的创建与管理**:使用`@Component`注解标记类为Spring Bean,然后通过`@Autowired`自动...

    spring3.0 jar包

    在“lib”文件夹中,可能包含了Spring 3.0所需的一系列jar包,如spring-context、spring-beans、spring-webmvc等,这些jar包分别对应Spring框架的不同组件和服务。正确导入这些库文件,开发者就可以利用Spring 3.0的...

    spring jar 包详解

    ### Spring JAR包详解 Spring框架作为Java企业级开发中不可或缺的一部分,其强大的功能和灵活的配置机制使得它成为...开发者在实际项目中,应根据具体需求选择合适的JAR包进行集成,以充分发挥Spring框架的强大功能。

    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 ...

    Spring3.0Jar包

    12. **Web Flow**:Spring Web Flow 是 Spring 3.0 中的一个子项目,用于构建复杂的 Web 流程和状态管理,特别适用于创建如表单提交、审批流程等。 13. **JMX 支持**:Spring 3.0 提供了 JMX(Java Management ...

    Spring Boot是一个基于Spring框架的开源项目,旨在简化Spring应用的初始搭建以及开发过程 以下是对Spring

    这种自动化配置机制是基于 Spring 的条件化配置(`@Conditional` 注解)来实现的,通过分析项目的类路径、存在的 Bean 和环境属性等信息来决定哪些配置是合适的。 #### 三、内嵌 Servlet 容器 **支持内嵌 Servlet ...

    spring-framework-4.3.24.RELEASE-dist.zip

    5. **Spring Boot**:虽然不是4.3.24.RELEASE的直接部分,但Spring Boot与Spring Framework紧密集成,它极大地简化了Spring应用的初始搭建和配置过程,通过自动配置和起步依赖,使得开发快速启动项目变得可能。...

    Spring in action 3.0

    Spring 3.0版本引入了许多新的功能和增强,包括对Java EE 6的支持、对RESTful Web服务的全面支持、增强的AOP(面向切面编程)功能、对JMS(Java消息服务)和JMX(Java管理扩展)的改进,以及对动态语言的支持等。...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    这里提到的是一组完整的Spring库,包括`spring-core`、`spring-context`、`spring-webmvc`、`spring-web`、`spring-beans`、`spring-test`、`spring-jdbc`、`spring-orm`、`spring-aop`和`spring-tx`,它们都是3.2.0...

    Spring2.0jar包

    Spring 2.0的这些jar包共同构建了一个强大而灵活的框架,支持了J2EE项目中的各种需求,包括依赖注入、面向切面编程、Web开发以及与多种技术的集成。通过这些模块,开发者可以更专注于业务逻辑,而非基础设施的搭建。...

Global site tag (gtag.js) - Google Analytics