Spring JMX 注入的一些问题和说明
来源:互联网 发布:centos启动mysql服务 编辑:程序博客网 时间:2024/05/24 07:23
项目中使用Spring JMX来直接把Bean 暴露成MBean,发现用<context:mbean-export />简洁标签会一直报Jndi的错误,初步猜测是从远端查找。
首先,看了http://www.springframework.org/schema/context/spring-context-3.1.xsd
其中一段:
<xsd:attribute name="server" type="xsd:string"><xsd:annotation><xsd:documentation><![CDATA[The bean name of the MBeanServer to which MBeans should be exported. Default is to use the platform's default MBeanServer (autodetecting WebLogic 9+, WebSphere 5.1+ and the JDK 1.5+ platform MBeanServer).]]></xsd:documentation></xsd:annotation></xsd:attribute>对容器做了特殊处理。
查看标签对应的解析类MBeanServerBeanDefinitionParser.java,果然如此。
private static final boolean weblogicPresent = ClassUtils.isPresent("weblogic.management.Helper", MBeanServerBeanDefinitionParser.class.getClassLoader());private static final boolean webspherePresent = ClassUtils.isPresent("com.ibm.websphere.management.AdminServiceFactory", MBeanServerBeanDefinitionParser.class.getClassLoader());static AbstractBeanDefinition findServerForSpecialEnvironment() {if (weblogicPresent) {RootBeanDefinition bd = new RootBeanDefinition(JndiObjectFactoryBean.class);bd.getPropertyValues().add("jndiName", "java:comp/env/jmx/runtime");return bd;}else if (webspherePresent) {return new RootBeanDefinition(WebSphereMBeanServerFactoryBean.class);}else {return null;}}
MBeanExportBeanDefinitionParser.java
if (StringUtils.hasText(serverBeanName)) {builder.addPropertyReference("server", serverBeanName);}else {AbstractBeanDefinition specialServer = MBeanServerBeanDefinitionParser.findServerForSpecialEnvironment();if (specialServer != null) {builder.addPropertyValue("server", specialServer);}}String registration = element.getAttribute(REGISTRATION_ATTRIBUTE);int registrationBehavior = MBeanRegistrationSupport.REGISTRATION_FAIL_ON_EXISTING;if (REGISTRATION_IGNORE_EXISTING.equals(registration)) {registrationBehavior = MBeanRegistrationSupport.REGISTRATION_IGNORE_EXISTING;}else if (REGISTRATION_REPLACE_EXISTING.equals(registration)) {registrationBehavior = MBeanRegistrationSupport.REGISTRATION_REPLACE_EXISTING;}builder.addPropertyValue("registrationBehavior", registrationBehavior);return builder.getBeanDefinition();
MBeanServerBeanDefinitionParser.java
AbstractBeanDefinition specialServer = findServerForSpecialEnvironment();if (specialServer != null) {return specialServer;}RootBeanDefinition bd = new RootBeanDefinition(MBeanServerFactoryBean.class);bd.getPropertyValues().add("locateExistingServerIfPossible", Boolean.TRUE);// Mark as infrastructure bean and attach source location.bd.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);bd.setSource(parserContext.extractSource(element));return bd;
因为项目中使用了weblogic,所以classpath中包含weblogic.jar,索性去掉后,jmx server正常了。
另外如果自定义mbeanServer,locateExistingServerIfPossible要设置为true,否则自定义的mbean不会出现。
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"lazy-init="false"><property name="locateExistingServerIfPossible" value="true" />......</bean>
- Spring JMX 注入的一些问题和说明
- jsf和spring的注入问题
- 对于Spring注入静态DataSource的一些问题
- Spring注入的问题
- Spring MVC和shiro整合时自动注入的问题
- Spring 注入不成功的问题
- spring注入时机的问题
- Spring注入遇见的问题
- Spring注入遇到的问题
- Spring 的一些随笔 一些配置说明
- spring 的Filed注入和method注入
- 大小写不一致,导致Spring注入失败问题说明
- c语言的一些语句说明和查找问题
- Spring的注入方式:设值注入和构造注入
- 扩展 Spring 的 JMX 支持
- 扩展 Spring 的 JMX 支持
- 扩展 Spring 的 JMX 支持
- 扩展 Spring 的 JMX 支持
- Strut2中单元测试实例
- 数组 strlen sizeof
- 大数据是把双刃剑 机遇和风险并存
- 动态分配二维数组
- Java安全停止线程方法
- Spring JMX 注入的一些问题和说明
- 类似APP大厅程序的实现
- libnids分析(1)
- 主键与唯一索引(unique index)
- Could not find class 'org.ksoap2.serialization.SoapObject' 解决办法
- ganglia常见问题
- Altera下载脚本三
- error C2220: 警告被视为错误 - 没有生成“object”文件
- POJ 1201 Intervals