http://blog.csdn.net/zmxj

這個簡單的Mbean只有一個屬性和一個方法,StardBeanDemoMain 為調用類,
main方法中調用下面三個方法,代碼中都有詳細的注釋:
 sbean.doRegistBean();
        sbean.doManageBean();
        sbean.regHtmlAdaptor();

運行后,可以看到控制臺打印的信息,
register StandMbean sucess..
Attribute:state -init value
Attribute:state 2 -new state
My service start.....

由于啟動了HtmlAdaptor的服務,所以程序一直處于運行狀態,(HtmlAdaptor是sun jmx實現自帶的一個適配器)測試可以在瀏覽器中訪問:
http://localhost:8082/ 就可以在瀏覽器中管理mbean了,在List of MBean operations下面按startService 按鈕,可以看到控制臺打出的信息,說明startService方法被調用了。Jdk1.4下需要jmxri.jar和jmxtools.jar兩個包,Jdk50已經包括了Jmx的api。

/**
 * Mbean接口
 * StandBeanMBean.java
 * @author zmxj
 
*/

public interface StandBeanMBean {
    
    
public
 String getState() ;
    
    
public void
 setState(String s) ;
    
    
public void
 startService();
}



/**
 * Mbean實現
 * StandBean.java
 * @author zmxj
 
*/

public class StandBean implements StandBeanMBean {

    
private String state = "init value"
;
    

    
public String getState() 
{
        
return
 state;
    }


    
public void setState(String s) {
        state 
=
 s;        
    }


    
public void startService() {
       System.
out.println("My service start.."
);        
    }


}



import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;

import com.sun.jdmk.comm.HtmlAdaptorServer;

/**
 * Agent類
 * StardBeanDemoMain.java
 * @author zmxj
 
*/

public class StardBeanDemoMain {

    
private MBeanServer mBserver = null
;
    
    ObjectName mbeanObjectName 
= null
;
 String domain 
= null
;
 String mbeanName 
= "StandBean"
;
 
    
public static void main(String[] args) 
{
        
        StardBeanDemoMain sbean 
= new
 StardBeanDemoMain();
        
        sbean.doRegistBean();
        sbean.doManageBean();
        sbean.regHtmlAdaptor();
    }

    
    
/**
     * 創建MBeanServer并注冊一個Mbean
     
*/

    
private void doRegistBean()
    
{
        
//創建MBeanServer

        mBserver = MBeanServerFactory.createMBeanServer();
        domain 
=
 mBserver.getDefaultDomain();

     
try 
{
         mbeanObjectName 
= new ObjectName(domain + ":type=" +
 mbeanName);
         
         
/*
         //這里可以直接創建并且同時注冊一個mbean到MBeanServer.
         server.createMBean(mbeanName,mbeanObjectName);
         
*/

         
         StandBean bean 
= new StandBean();
         mBserver.registerMBean(bean, mbeanObjectName);
         
         System.
out.println("register StandMbean sucess.."
);
     }
 catch(MalformedObjectNameException e) {
         e.printStackTrace();
         System.exit(
1
);
     }
 catch(Exception e){
         e.printStackTrace();
         System.exit(
1
);
     }

     
    }



    
/*
     * 演示管理mbean,通過mbserver修改mbean的屬性和執行mbean的方法
     
*/

    
private void doManageBean()
    
{
        
try 
{
            ObjectName mbeanObjectName 
= new ObjectName(domain + ":type=" +
 mbeanName);
                       
            System.
out.println("Attribute:state -"+mBserver.getAttribute(mbeanObjectName,"State"
));

            
//修改屬性State

            Attribute stateAttribute = new Attribute("State","new state");
            mBserver.setAttribute(mbeanObjectName, stateAttribute);
            
            
//取得屬性值

            System.out.println("Attribute:state 2 -"+mBserver.getAttribute(mbeanObjectName,"State"));
            
            
//調用方法startService

            mBserver.invoke(mbeanObjectName,"startService",null,null);
            
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }

    
    
/*
     * 注冊HtmlAdaptor,注冊后可以通過http://localhost:8082/執行mbean管理操作
     
*/

    
private void regHtmlAdaptor()
    
{
     HtmlAdaptorServer html 
= new
 HtmlAdaptorServer();
     ObjectName html_name 
= null
;
     
try 
{
         html_name 
= new ObjectName("Adaptor:name=html,port=8082"
);
         mBserver.registerMBean(html, html_name);
     }
 catch(Exception e) {
         System.
out.println("\t!!! Could not create the HTML adaptor !!!"
);
         e.printStackTrace();
         
return
;
     }

     html.start(); 
    }

}