快速业务通道

扩展Spring的JMX支持 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
  {    setAssembler(new MBeanDescriptorBasedAssembler());   }     public ModelMBean createModelMBean() throws MBeanException   {    if (mBeanInfoAssembler instanceof MBeanDescriptorBasedAssembler)    {     return new ModelMBeanExtension();    }    return super.createModelMBean();   }     public void setAssembler(MBeanInfoAssembler mBeanInfoAssembler)   {    this.mBeanInfoAssembler = mBeanInfoAssembler;    super.setAssembler(mBeanInfoAssembler);   } }

在使用这个扩展的类时,可以用标准 Spring 语言改变装配器,并在需要时回到默认的行为。在大多数情况下,如果最终绕过扩展,那么就不值得使用这个版本。不过,如果想要以新的定制装配器使用扩展的 ModelMBean,那么现在可以这样做。

扩展Spring的JMX支持(6)

时间:2011-01-16 IBM

构建一个定制的装配器

这个定制装配器的主要任务是查找与管理的类有关的元数据映射文件。找到这个文件后,就装载它并生成必要的 ModelMBeanInfo 实例。为此,我只是实现了 Spring MBeanInfoAssembler 实例建立这个文件的相关类路径,用静态 MBeanDescriptorUtil.read() 方法装载它并返回结果,如清单 3 所示:

清单 3. MBeanDescriptorBasedAssembler

package com.claudeduguay.mbeans.spring; import java.io.*; import javax.management.modelmbean.*; import org.springframework.core.io.*; import org.springframework.jmx.export.assembler.*; import com.claudeduguay.mbeans.model.*; public class MBeanDescriptorBasedAssembler   implements MBeanInfoAssembler {   public ModelMBeanInfo getMBeanInfo(    Object managedBean, String beanKey)   {    String name = managedBean.getClass().getName();    String path = name.replace(''.'', ''/'') + ".mbean.xml";    ClassPathResource resource = new ClassPathResource(path);    InputStream input = null;    try    {     input = resource.getInputStream();     MBeanDescriptor descriptor = MBeanDescriptorUtil.read(input);     return descriptor.createMBeanInfo();    }    catch (Exception e)    {     throw new IllegalStateException(      "Unable to load resource: " + path);    }    finally    {     if (input != null)     {      try { input.close(); } catch (Exception x) {}     }    }   } }

这个 MBeanDescriptorBasedAssembler 忽略 bean 键参数并直接用受管 bean 引用创建所需的 ModelMBeanInfo 实例。

示例

在本文其余部分,我将着重展示这个 Spring JMX 扩展的使用。为此,使用一个假想的服务,它开放两个方法和一个属性,因此表现了典型的用例。

ExampleService 是一个 Java 对象,它在被调用时只是向控制台进行输出,如清单 4 所示:

清单 4. ExampleService

package com.claudeduguay.jmx.demo.server; public class ExampleService {   protected String propertyValue = "default value";     public ExampleService() {}     public String getPropertyValue()   {    System.out.println("ExampleService: Get Property Value");    return propertyValue;   }   public void setPropertyValue(String propertyValue)   {    System.out.println("ExampleService: Set Property Value");    this.propertyValue = propertyValue;   }   public void st

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号