jmx监控java对象的状态


1.定义监控接口,以MBean结尾的java接口

形如HelloMBean的形式的java接口

定义的的getXX方法是属性,可以在jmc中观察看到
返回值为void的方法是方法,可以在jmc中观察看到

2.实现以MBean结尾的java接口的实现类

根据StandardBean,必须是Hello这样形式的Java类
注意线程安全,可见性,并发读写属性的值


5.防止重复注册的措施

注册事件处理器,javax.management.MBeanRegistration接口,实现下面的方法

@Override
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
  if (server != null) {
    try {
      if (server.isRegistered(name)) {
        server.unregisterMBean(name);
      }
    } catch (Exception ex) {
      LOG.warn("DruidDataSource preRegister error", ex);
    }
  }
  return name;
}

 



6.真正的注册操作,可以放在对象的init方法里面

public void registerMbean() {
  if (!mbeanRegistered) {
    AccessController.doPrivileged(new PrivilegedAction<Object>() {

    @Override
    public Object run() {
      ObjectName objectName = DruidDataSourceStatManager.addDataSource(DruidDataSource.this,
      DruidDataSource.this.name);

      DruidDataSource.this.setObjectName(objectName);
      DruidDataSource.this.mbeanRegistered = true;

      return null;
    }
    });
  }
}

 


7.反注册操作,放在close方法里面

public void unregisterMbean() {
  if (mbeanRegistered) {
    AccessController.doPrivileged(
new PrivilegedAction<Object>() {       @Override       public Object run() {         DruidDataSourceStatManager.removeDataSource(DruidDataSource.this);         DruidDataSource.this.mbeanRegistered = false;       return null;       }     });   } }

 



8.引用

这个是什么?javax.naming.Referenceable

/** Instance key */
protected String instanceKey = null;

public Reference getReference() throws NamingException {
final String className = getClass().getName();
final String factoryName = className + "Factory"; // XXX: not robust
Reference ref = new Reference(className, factoryName, null);
ref.add(new StringRefAddr("instanceKey", instanceKey));
ref.add(new StringRefAddr("url", this.getUrl()));
ref.add(new StringRefAddr("username", this.getUsername()));
ref.add(new StringRefAddr("password", this.getPassword()));
// TODO ADD OTHER PROPERTIES
return ref;
}

 



9.利用jconsole,jmc等方式监控这类对象

可参照阿里巴巴的druid连接池对象的监控管理来做自己的监控管理

转载于:https://www.cnblogs.com/weiguangyue/p/9781779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值