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的微内核系统。