JMX初識

                                                                      
先看下一些基本的東西然後運行代碼對jmx有些基本瞭解,然後看JMX規範
基本概念:
1:MBean
通常是一個java類,它提供接口可以使這個類具有管理功能(如standard MBean,接口中定義的方法使MBean具有管理功能)。
2:MBean server
是管理MBean的一個java類,你需要向MBean server註冊一個MBean後,這個MBean纔會具有管理功能,MBean server還提供了查詢功能和註冊監聽器的功能,sun提供的只是接口,不同的jmx實現中的MBean server實現也不同。
3:JMX agent
agent是爲了管理一系列的MBean,而提供的一系列的服務,如上圖所示,通常有MBean relationships, dynamically loading classes, simple monitoring services, timers。agent可以利用Protocol adapters(例如HTTP 和SNMP)和connectors(RMI 和Jini)使不同的客戶端可以訪問MBean。
4:Protocol adapters 和connectors
適配器和連接器主要使不同的協議和客戶端可以使用這個agent,一個agent中可以有多個Protocol adapters 和connectors,這樣管理起MBean來就更方便了(有多種類型的客戶端和協議可以操作MBean)。注意,Protocol adapters 和connectors通常也是MBean。

JMX1.1相對於1.0有了很大改進,在1.1中提供4種類型的MBean,3,4兩種MBean都是特殊類型的dynamic MBean。
1:standard MBean
2:dynamic MBean
3:open MBean
4:model MBean

Standard MBean編程簡介
運行環境:
首先去sun下載兩個壓縮包http://java.sun.com/products/JavaManagement/download.html
1、jmx-1_2_1-bin
2、jmxremote-1_0_1-bin
以下程序只需要jmx-1_2_1-bin包裏面的lib/*.jar
注意:jmx和jmxremote是兩個不同的包。

下面就來編寫幾個程序:
1:編寫接口
2:編寫MBean
3:編寫agent
下面看接口的代碼,very easy,主要定義get/get方法和其它你想使用的方法
public interface HelloWorldMBean
{
public void setGreeting( String greeting );

public String getGreeting();

public void printGreeting();
}

再看MBean的代碼,跟傳統的Bean非常相似,加入某個屬性只有get方法,則說明這個屬性是隻讀的,get/set都有的話,說明這個屬性是可讀可寫的,此MBean只定義了一個屬性 greeting。另外還定義了一個方法printGreeting。
public class HelloWorld implements HelloWorldMBean
{

private String greeting = null;

public HelloWorld()
{
this.greeting = "Hello World! I am a Standard MBean";
}

public HelloWorld( String greeting )
{
this.greeting = greeting;
}

public void setGreeting( String greeting )
{
this.greeting = greeting;
}

public String getGreeting()
{
return greeting;
}

public void printGreeting()
{
System.out.println( greeting );
}
}

下面編寫agent
1:創建 MBeanServer
2:創建一個adapter
3:將MBean註冊到MBeanServer,同時將apapter也註冊到MBeanServer
4: 啓動adapter
import javax.management.*;
import com.sun.jdmk.comm.*;
public class HelloAgent
{
private MBeanServer mbs = null;
public HelloAgent()
{
mbs = MBeanServerFactory.createMBeanServer( "HelloAgent" );
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
HelloWorld hw = new HelloWorld();
ObjectName adapterName = null;
ObjectName helloWorldName = null;

try
{
helloWorldName = new ObjectName( "HelloAgent:name=helloWorld1" );
mbs.registerMBean( hw, helloWorldName );
adapterName = new ObjectName( "HelloAgent:name=htmladapter,port=9092" );
adapter.setPort( 9092 );
mbs.registerMBean( adapter, adapterName );
adapter.start();
}
catch( Exception e )
{
e.printStackTrace();
}
}
public static void main( String args[] )
{
System.out.println( "HelloAgent is running" );
HelloAgent agent = new HelloAgent();
}
}
上面的代碼使用了sun的一個adapter:HtmlAdaptorServer,使得html客戶端可以訪問MBean,注意ObjectName類,它的書寫規則是這樣的:"Domain names:key=value,key2=value2",因爲createMBeanServer方法中我們使用了參數"HelloAgent",因此後面的Domain names必須爲HelloAgent。

運行:
我一開始運行的時候遇到了一些問題,在這裏就說一下。
1、編譯是必不可少的。
我們需要上面提到的jmx-1_2_1-bin裏面的兩個jar文件。將他們放到classpath中。
2、運行
只需要運行HelloAgent.class就行了。同樣需要那兩個jar文件。缺少的話會報錯。

3、通過瀏覽器訪問http://localhost:9092即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章