Package org.codehaus.xfire.management.mbeans

Source Code of org.codehaus.xfire.management.mbeans.MBeanUtil

package org.codehaus.xfire.management.mbeans;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.Hashtable;

import javax.management.Attribute;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.monitor.CounterMonitor;
import javax.management.monitor.GaugeMonitor;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import org.codehaus.xfire.management.mbeans.listeners.CounterListener;
import org.codehaus.xfire.management.mbeans.listeners.GaugeListener;



public class MBeanUtil {

  JMXConnectorServer jmxConnectorServer = null;
  JMXConnectorServer cs=null;
  MBeanServer mbs = null;
  Hashtable objectNames = new Hashtable();
  public MBeanUtil() {
    super();
    // TODO Auto-generated constructor stub
  }
  public MBeanServer createMBeanServer(){
        try {
            System.out.println("Creating the MBean server");
            mbs = ManagementFactory.getPlatformMBeanServer();
      System.out.println("Done creating the MBean server");
        }catch(Exception ex){
      ex.printStackTrace();
    }
    return mbs;
  }
 
  public MBeanServer createRemoteMBeanServer(String host,int port) throws Exception{
    mbs = MBeanServerFactory.createMBeanServer();
    JMXServiceURL url = new JMXServiceURL(
        "service:jmx:rmi:///jndi/rmi://"+host+":"+port+"/XFireMbeanServer");
    cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
    cs.start();
    return mbs;
  }
  public void tearDown() throws IOException{
    cs.stop();
  }

  public void createServiceMBean(String serviceName){
    ServiceStat service = new ServiceStat();

    try {
      ObjectName objectName = new ObjectName("XFire:name="+serviceName+",type=management");
      objectNames.put(serviceName,objectName);
      mbs.registerMBean(service, objectName);
      createCounterMonitor(objectName,serviceName,new Long(500),new Long(200));
      createGaugeMonitor(objectName,serviceName,new Long(500),new Long(200),new Long(100));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void createCounterMonitor(ObjectName objectName,String serviceName,Long monitoringFrequency,Long threshold){
    CounterMonitor cm = new CounterMonitor();
    cm.addObservedObject(objectName);
    cm.setObservedAttribute("TotalRequestCount");
    cm.setGranularityPeriod(monitoringFrequency);
    cm.setNotify(true);
    cm.setInitThreshold(new Long(threshold));
    cm.setDifferenceMode(true);
    cm.setNotify(true);
    cm.addNotificationListener(new CounterListener(),null,null);
    try {
      ObjectName objectNameC = new ObjectName("XFire:name="+serviceName+"CounterMonitor,"+"type=management");
      cm.start();
      mbs.registerMBean(cm, objectNameC);
   
    } catch (Exception e) {
      e.printStackTrace();
    }   
  }
  public void createGaugeMonitor(ObjectName objectName,String serviceName,Long monitoringFrequency,Long thresholdHigh,Long thresholdLow){
    GaugeMonitor gm = new GaugeMonitor();
    gm.addObservedObject(objectName);
    gm.setObservedAttribute("LastResponseTime");
    gm.setGranularityPeriod(monitoringFrequency);
    gm.setNotifyHigh(true);
    gm.setNotifyLow(true);
    gm.setThresholds(thresholdHigh,thresholdLow);
    gm.setDifferenceMode(true);
    gm.addNotificationListener(new GaugeListener(),null,null);
    try {
      ObjectName objectNameG = new ObjectName("XFire:name="+serviceName+"GaugeMonitor,"+"type=management");
      gm.start()
      mbs.registerMBean(gm, objectNameG);
   
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public MBeanServer getMBeanServer(){
    return mbs;
  }
 
  public void recordFailedRequest(String serviceName){
    ObjectName objName = (ObjectName)objectNames.get(serviceName);
    try {
      mbs.invoke(objName,"setFailedRequestCount",null,null);
    } catch (InstanceNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MBeanException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ReflectionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  public void recordSuccessfulRequest(String serviceName){
   
    ObjectName objName = (ObjectName)objectNames.get(serviceName);
    try {
      mbs.invoke(objName,"setSuccessfulRequestCount",null,null);
    } catch (InstanceNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MBeanException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ReflectionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  public void setLastResponseTime(String serviceName,Long arg){
    ObjectName objName = (ObjectName)objectNames.get(serviceName);
    Attribute attrib = new Attribute("LastResponseTime",arg);
    try {
      mbs.setAttribute(objName,attrib);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  public static void main(String args[]){
    try {
      MBeanUtil mu = new MBeanUtil();
      MBeanServer mbs = mu.createRemoteMBeanServer("localhost",9999);
      mu.createServiceMBean("Contract");
      System.out.println("Server is up and Running press any key to exit");
      mu.recordFailedRequest("Contract");
      mu.recordSuccessfulRequest("Contract");
      mu.setLastResponseTime("Contract",new Long(300));
      System.in.read();
      mu.tearDown();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
   

}
TOP

Related Classes of org.codehaus.xfire.management.mbeans.MBeanUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.