http://bhsc-happy.iteye.com/blog/678163
http://www.cnblogs.com/Javame/p/3881187.html
JMX
Java Management Extensions,Java管理擴展,初步看了些資料,以為是專門管理,監控jvm的一些信息的,特別是visual VM這個監控jvm的東西,還有一個添加JMX連接的時候(我自己想錯了,那樣的話應該叫jvm Management Extensions),其實他能使得基于java語言開發的程序能被管理,并且是可擴展的。
Jdk以前是通過JVMPI之類來監測Java程序運行中的jvm和系統的一系列情況,現在通過jmx就可以做到,這是通過java.lang.management 包來實現的,這個包是 JMX 在 JDK方面 的一個應用,并不是表示jmx就是一個監控jvm的東西。
我們可以用jmx來監控我們的系統,通過公布API的方式,但是,這里采用監控這個詞,也是受了前面的例子的影響,實際上,個人覺得,就可以用jmx來開發我們的系統。
現在的jboss,hibernate,tomcat各種應用都號稱實現了JMX規范,將可管理,可調用的MBean注冊到MBeanServer中,通過一種類似“web服務”的方式公布出去,并且伴有一個名字,可以通過該名字找到該MBean。并且,這里的MBean是可以被管理的,說到這里又想到了OSGI。
JMX與Web Service
個人認為,我們實現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客戶端支持。
從這里,我覺得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的微內核系統。