⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 relationagent.java

📁 jmx codeJava源码
💻 JAVA
字号:

package book.jmx.examples;

import java.util.*;
import javax.management.*;
import javax.management.monitor.*;
import javax.management.relation.*;

public class RelationAgent {

  public static void main(String[] args) {
    try {
        
    MBeanServer server = MBeanServerFactory.createMBeanServer();

    // create the "observable" MBean    
    ThreadMonitor threads = new ThreadMonitor();
    server.registerMBean(threads, new ObjectName("Example:name=Threads"));
    
    // create the "observer"
    GaugeMonitor mon      = new GaugeMonitor();
    mon.setObservedObject(new ObjectName(":name=Threads"));
    mon.setObservedAttribute("ThreadCount");
    mon.setGranularityPeriod(5 * 1000);
    mon.setNotifyHigh(true);
    mon.setThresholds(new Integer(30), new Integer(20));

    server.registerMBean(mon, new ObjectName("Monitor:target=Threads"));
    mon.start();
    
    // create relation service, purgeRelations=true
    ObjectName relationService = new ObjectName("Service:name=Relation");
    RelationService service = new RelationService(true);
    
    service.addNotificationListener(new RelationListener(), null, null);    
    server.registerMBean(service, relationService);
    
    // "monitor" role meta data
    RoleInfo monitorInfo = new RoleInfo(
        "Monitor",                              // role name
        "javax.management.monitor.GaugeMonitor",// class name
        true, true,                             // isReadable, isWritable
        0, RoleInfo.ROLE_CARDINALITY_INFINITY,  // multiplicity [0..*]
        "Describes a Monitor role."             // description
    );
    
    // "observable" role meta data
    RoleInfo observableInfo = new RoleInfo(
        "Observable",                           // role name
        "book.jmx.examples.ThreadMonitor",      // class name
        true, true,                             // isReadable, isWritable
        1, 1,                                   // multiplicity [1..1]
        "Describes an observed MBean role."     // description
    );
    
    // relation type template
    RelationTypeSupport relationType = new RelationTypeSupport(
        "ObservedMBean",
        new RoleInfo[] { observableInfo, monitorInfo }
    );
    
    // add relation type to the service
    server.invoke(relationService, "addRelationType", 
        new Object[] { relationType },
        new String[] { RelationType.class.getName() }
    );
    
    // associate MBean to role
    ArrayList list = new ArrayList();
    list.add(new ObjectName("Monitor:target=Threads"));
    Role monitor = new Role("Monitor", list);
    
    // associate MBean to role
    list = new ArrayList();
    list.add(new ObjectName("Example:name=Threads"));
    Role target = new Role("Observable", list);
    
    RoleList roleList = new RoleList();
    roleList.add(monitor);
    roleList.add(target);
    
    // create the relation
    server.invoke(relationService, "createRelation", 
        new Object[] { "MyRelationID", "ObservedMBean", roleList },
        new String[] { 
            String.class.getName(),
            String.class.getName(),
            RoleList.class.getName()
        }
    );
    
    // create the adaptor instance
    com.sun.jdmk.comm.HtmlAdaptorServer adaptor =
        new com.sun.jdmk.comm.HtmlAdaptorServer();
            
    server.registerMBean(adaptor, 
        new ObjectName("adaptor:protocol=HTTP"));

    adaptor.start();

    } catch (JMException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    
  }
  
  static class RelationListener implements NotificationListener {
  
    public void handleNotification(Notification n, Object hb) {
      
      if (n instanceof RelationNotification) {
        RelationNotification notif = (RelationNotification)n;
        
        System.out.println(notif.getRelationId());
        System.out.println(notif.getType());
        System.out.println(notif.getMessage());

        if (notif.getType().equals(
            RelationNotification.RELATION_BASIC_REMOVAL)
        ) {
          try {
            String ID = notif.getRelationId();
            ObjectName relationService = new ObjectName(
                "Service:name=Relation"
            );
            
            MBeanServer server = 
                (MBeanServer)MBeanServerFactory.findMBeanServer(null).get(0);
                
            Map map = (Map)server.invoke(
                relationService,
                "getReferencedMBeans",
                new Object[] { ID },
                new String[] { String.class.getName() }
            );
            
            Iterator it = map.keySet().iterator();
            
            while(it.hasNext()) {
              System.out.println("MBeans referenced by the relation:");
              System.out.println(it.next());
            }
          } catch (JMException e) {
            e.printStackTrace();
          }
        }            
      }
    }
  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -