Java Management Extensions (JMX) 是用來管理和監視java應用程序的。在這篇文章裏通過一個例子來說明如何讓你的MINA應用程序可以被JMX管理。
下面的程序演示瞭如何將JMX技術整合進MINA的應用程序,我們把JMX類整合進前面的圖片服務器的例子。
[size=large]添加JMX支持[/size]
要使MINA應用程序變成JMX可管理,我們需要做如下的事情:
創建/取得MBean服務器
實例化需要的MBean(IoAcceptor, IoFilter)
把MBean註冊到MBean服務器
我們下面的代碼都是以\src\main\java\org\apache\mina\example\imagine\step3\server\ImageServer.java爲基礎的來討論的。
[size=medium]創建/取得MBean服務器[/size]
// 創建一個JMX的MBean服務器實例
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
[size=medium]實例化需要的MBean[/size]
下面我們創建一個IoService的MBean
// 創建一個JMX可管理Bean,這個Bean是對MINA的IoService對象的包裝。
// 在本例中,是一個NioSocketAcceptor
IoServiceMBean acceptorMBean = new IoServiceMBean( acceptor );
上面的代碼創建了一個IoService的MBean。它接受一個acceptor的實例,並把它通過JMX暴露出來。
同樣我們也可以添加一個IoFilterMBean和其他的自定義MBean
[size=medium]把MBean註冊到MBean服務器[/size]
// 創建一個JMX的ObjectName實例,必須按照特定的格式
ObjectName acceptorName = new ObjectName( acceptor.getClass().getPackage().getName() +
":type=acceptor,name=" + acceptor.getClass().getSimpleName());
// 把bean註冊到MBeanServer,如果沒有這一行acceptor就不會進入JMX的管理範圍
mBeanServer.registerMBean( acceptorMBean, acceptorName );
我們創建一個ObjectName,然後通過這個名字把MBean註冊到MBean的服務器。我們的應用程序現在就是JMX可管理的。讓我們來看一下是什麼效果:
[size=medium]啓動一個圖片服務器[/size]
如果我們使用java5及以前的版本:
java -Dcom.sun.management.jmxremote -classpath <CLASSPATH> org.apache.mina.example.imagine.step3.server.ImageServer
如果使用Java6以後的版本:
java -classpath <CLASSPATH> org.apache.mina.example.imagine.step3.server.ImageServer
[size=medium]啓動JConsole[/size]
/bin/jconsole
我們就可以看到通過MBean暴露出來的屬性和操作。