JMXjava
Java Management Extensions,Java管理擴展,初步看了些資料,覺得是專門管理,監控jvm的一些信息的,特別是visual VM這個監控jvm的東西,還有一個添加JMX鏈接的時候(我本身想錯了,那樣的話應該叫jvm Management Extensions),其實他能使得基於java語言開發的程序能被管理,而且是可擴展的。web
Jdk之前是經過JVMPI之類來監測Java程序運行中的jvm和系統的一系列狀況,如今經過jmx就能夠作到,這是經過java.lang.management 包來實現的,這個包是 JMX 在 JDK方面 的一個應用,並非表示jmx就是一個監控jvm的東西。tomcat
咱們能夠用jmx來監控咱們的系統,經過公佈API的方式,可是,這裏採用監控這個詞,也是受了前面的例子的影響,實際上,我的以爲,就能夠用jmx來開發咱們的系統。服務器
如今的jboss,hibernate,tomcat各類應用都號稱實現了JMX規範,將可管理,可調用的MBean註冊到MBeanServer中,經過一種相似「web服務」的方式公佈出去,而且伴有一個名字,能夠經過該名字找到該MBean。而且,這裏的MBean是能夠被管理的,說到這裏又想到了OSGI。框架
JMX與Web Servicejvm
我的認爲,咱們實現JMX規範,將東西發佈出去,和經過web Service的方式是很相似的,也是能夠遠程調用的,只是相對的web Service的方式更加SOA一些,不過JMX號稱也要提供對非java客戶端的支持,也就是跨語言了吧。。。分佈式
如今的JMX鏈接方式:工具
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null);性能
看了下源碼,貌似仍是經過RMI來實現的,不知道它要怎麼實現非java客戶端支持。google
從這裏,我以爲JMX能夠實現的,咱們也均可以經過web Service實現,只是看在它有個「M」上,之後若是有什麼系統管理,監控方面的,能夠考慮使用它,也許開發,我的以爲仍是使用web service好一些。
說到這裏,感受OSGI與JMX也好像,在看到JMX可以對MBean進行管理的時候,我就以爲跟OSGI很像,OSGI管理的是Bundle,找了找資源,原來早就有人考慮過了:
http://teamojiao.iteye.com/blog/438334
順便,在查資料的時候,發現一個東西,
if your question means, how to manage an OSGi runtime with JMX, you should have a look at MAEXO (http://code.google.com/p/maexo/). With MAEXO bundles up and running you will transparently get MBeans for a fair amount of services of the OSGi runtime as well as MBeans for your own services and bundles. Just have a look at the screencast.
摘一些話:僅作參考
<網友回覆>
一個大系統中,各內部模塊系統之間的基於接口方式的互相調用和治理,使用jmx是最佳方案.
帶來的好處是
1.面向接口,遠程調用對於開發人員是透明的,模塊在調用jmx接口時,與調用本地方法幾乎相同.
2.可視化的治理界面, 經過 Jconsole等jmx客戶端,能夠實時監控系統,而且可實時調用方法進行某些操做.
典型應用場景:
某聊天系統,一臺服務器做爲 在線用戶列表服務器 A1, n臺服務器爲用戶提供聊天業務處理 N1 ,N2,N3...,
一臺服務器做爲後臺治理系統A2.
系統治理員如今進行下面這樣一個操做,察看某用戶是否在線,找到該用戶,發現其在線,則將該用戶加入黑名單,並踢下線.
對應的jmx接口能夠由如下幾個:
A1爲A2提供查詢在線用戶jmx接口,加入黑名單接口,kickout接口,
A1爲N1..等服務器提供如下接口: 註冊業務服務器,添加在線用戶.查找黑名單用戶
N1...到N3爲A1提供kickout接口.
所以在上面的踢下線操做,則由用戶在A2的web界面發出,交由A1執行,A1記錄黑名單以後,再找到用戶所在業務服務器調用N1提供的接口讓用戶下線.
以上情形是在生產環境下的部署,而在開發工做,則能夠將A1,A2,N...N3等功能合併在一個應用中調試. 因爲使用的是jmx接口,在本地調試合併以後,能夠直接調用應用內部接口方法.
這樣藉助jmx實現的應用模塊的靈活組裝與拆分,使得系統的能夠根據負載須要,根據性能狀況,靈活的拆分和整合部署分佈式的應用.
替代方案,選擇webservice,xmlrpc等,可是這些都須要手工編寫或用工具生成大量的代碼來輔助完成接口間的java對象序列化 。
經典jmx案例:
1.Jboss.使用jmx治理內部的各個service。
2. 基於java的開源網管軟件 Hyperic HQ ,經過jmx與各被治理資源進行通信和信息採集.
<網友回覆>JMX是一個治理的框架。
當咱們想使用JMX的時候,就要問,咱們的系統當中有須要監控治理的資源或者對象嗎?實事求是一點,咱們不能爲了想使用一個高端的技術,就歪曲系統的原本面目。
假如第一個問題是確定的,接下來就是看這些資源是否有生命週期。
經典案例:jboss就是將全部可部署的組件做爲資源來治理,這些組建都有其生命週期。這個理念甚至延伸到了其系統內部,將其內部的服務做爲組件歸入到 JMX中來,成就了jboss基於jmx的微內核系統。