zoukankan      html  css  js  c++  java
  • MBean的学习

    参考:http://tuhaitao.iteye.com/blog/786391

    这里以MBean对象进行演示向服务器注册,调用的过程。

    1.MBean接口,接口名必须以MBean结尾

     1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl;
     2 
     3 public interface HelloMBean {
     4     //管理属性
     5     public void setName(String name);
     6     
     7     public String getName();
     8     
     9     //管理操作
    10     public String print();
    11 }

    2.实现这个接口,定义属性和行为

     1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl;
     2 
     3 import java.lang.management.ManagementFactory;
     4 
     5 import javax.management.Attribute;
     6 import javax.management.MBeanServer;
     7 import javax.management.ObjectName;
     8 
     9 //MBean的接口和实现类必须位于同一个包中
    10 
    11 public class Hello implements HelloMBean {
    12     public String name;
    13 
    14     public void setName(String name) {
    15         // TODO Auto-generated method stub
    16         this.name = name;
    17     }
    18 
    19     public String getName() {
    20         // TODO Auto-generated method stub
    21         return name;
    22     }
    23 
    24     public String print() {
    25         // TODO Auto-generated method stub
    26         String result = "Hello," + name + "!!";
    27         System.out.println(result);
    28         return result;
    29     }
    30 
    31     public static void main(String args[]) throws Exception {
    32         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // 获取MBeanServer
    33         ObjectName name = new ObjectName("fjs:type=hello"); // 构造一个名字
    34         Hello hello = new Hello(); // 创建需要注册的对象
    35         mbs.registerMBean(hello, name); // 注册这个对象
    36 
    37         mbs.setAttribute(name, new Attribute("Name", "bianjie"));  //属性首字母必须大写
    38         mbs.invoke(name, "print", null, null);  //第三个参数为Object[],为传入的参数值,第四个参数为String[],指明参数类型
    39         Thread.sleep(Long.MAX_VALUE);
    40     }
    41 
    42 }

    main方法中演示了申请服务器,向服务器注册MBean以及调用的过程。通过objectname,我们可以获得对象的属性,传参调用方法等等。

    几个需要注意的点:1.MBean接口和实现类必须位于同一包下2.Thread.sleep()必须有,阻塞线程,否则服务器和对象的生命周期都结束了,也就无管理可言了。所以运用在监控服务器上的应用程序。

    3.几个工具

    oracle java mission control :可以连接虚拟机,并监控虚拟机的各项指标状态,远程管理应用。今后可以深入研究,应该对性能测试,虚拟机调优作用非常大

    简单调用了一下上面注册的MBean

    ---------------------------

    二.关于JMX与JNDI的比较,参考:http://www.bitscn.com/pdb/java/200805/141680.html

    操作对象:JMX和JNDI都可以对Java类和对象进行查找和定位(JMX中还支持对MBean的查找,并有特定的Query类)。但是在实际应用中,JMX一般用于系统重要的功能性组件;JNDI用来查找部署在服务器中的各个应用程序中的资源,例如servlet、EJB和POJO等,并会为每个应用程序建立独立的隔离的Context.各个Context中,只能定位在这个Context中的资源。

  • 相关阅读:
    「ZJOI2019」开关
    「ZJOI2019」Minimax 搜索
    杨氏矩阵学习笔记
    「LibreOJ NOI Round #2」简单算术
    「LibreOJ NOI Round #2」小球进洞
    组合总和 II(力扣第40题)
    组合总和 I(力扣第39题)
    组合(力扣第77题)
    使用MapReduce解决蚂蚁森林第二题
    Hive练习--蚂蚁森林习题二
  • 原文地址:https://www.cnblogs.com/enjoy-ourselves/p/3737625.html
Copyright © 2011-2022 走看看