Crawling Dialy

常用链接

统计

最新评论

2007年2月27日 #

JMX学习-2

最近觉得需要在设计方面多下些功夫,可能最近一段时间太过于沉溺于技术的细节了,所以准备把项目程序的Design细致的分析一下。有时间的话把那本Head First Design Pattern看一下。
忘记说了这个专题介绍的JMX是JDK5.0时候的标准,6.0好像有很多变动,这里不会介绍。
接着上次的继续……
其实在这个专题中我不想把JMX这门技术面面俱到,也不想太钻到细节里面,只是想写一些个人对这个技术的理解,一个是对学习的一个检验,另外其一个备忘的作用。
 上一次说到了JMX分三个层次,分别是:基础部件,代理,发布。下面分别介绍这三个层次。
1,基础构件(MBean)
每一个MBean有两个部分组成,其中一个是后缀名为MBean的interface,另外一个是实现了这个接口的类,这点和EJB2.0很相似。我认为相似的原因是他们都是可以远程调用的,所以客户端只需要拿到那个实现了interface的Object就好了,不需要知道这个Object里面究竟是如何实现的。一个MBean的interface是用来定义暴露给MBeanServer的方法和属性的,其中暴露的属性是通过setter和getter方法来实现的,这个是符合JavaBean的规范的。MBean的Class则是实现这个interface,向外界提供具体的服务,这个Class的名字必须是那个接口MBean后缀的前部分。
还有一中MBean是DynamicMBean,这种MBean不需要创建接口,只需要实现DynamicMBean这个接口就行了。这种MBean的作用就是可以通过反射的机制自定义暴露的方法,属性,通知,而不使用MBeanServer提供的默认的访问规则。
还有就是Notification,这个理解起来很简单就不讲了。
2,代理层(MBeanServer)
代理层其实是管理MBean的容器,容器里面的MBean通过MBeanServer向外界提供服务,所以这层叫做代理层。
一个MBeanServer通过如下的工厂方法创建:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
MBean可以注册到这个MBeanServer:
 
      ObjectName name = new ObjectName("com.example.mbeans:type=Hello"); 
      Hello mbean = new Hello(); 
      mbs.registerMBean(mbean, name);
 
ObjectName是从容器中取出这个MBean的Key。一个MBeanServer中不能注册两个相同的ObjectName。
MBeanServer基本上是通过反射机制来访问容器中的MBean的,所以对外提供的访问方法和反射机制很相似,基本上就是多了一个ObjectName的参数而已,下面列几个例子:
mbs.getAttribute(mbeanObjectName, "State");
mbs.setAttribute(mbeanObjectName, stateAttribute);
mbs.invoke(mbeanObjectName, "reset", null, null);
//TODO 代理层先写到这里吧,如果以后有需要补充的再加。
3,发布层
所谓发布层就是外界访问代理层的方法。
可以通过如下的方法启动一个RMI服务器
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
Client可以连接到这个RMI服务器
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
而MBeanServer就是继承自MBeanServerConntion的,所以他们的大部分方法都一样或者相似。
OK,JMX的基本概念就介绍到这里,以后的专题就是关于JMX的lookup service和JMX的应用分析,比如在jboss和glassfish上的应用。

posted @ 2007-02-27 23:26 solospider 阅读(1356) | 评论 (0)编辑 收藏

JMX学习-1

这是第一篇关于java的文章,之前决定要写一个关于线程的专题的,不过并发这个东西看上去还是比较深奥,写一些比较浅的东西也没什么意思,最近一段时间JMX接触得比较多,索性就先写一个JMX的专题吧。
最早接触这个东西是在05年的JavaChina大会上,其中有一个专门介绍JMX的Session,当时我听完了也不知道这个东西到底是干什么的,只是看到演示的Demo很炫。后来也就一直没怎么碰过这门技术,一直到06年的JavaTechDays我又听了一个关于JMX的Session,毕竟一年的时间悟性提高了一些,终于听懂了Session的内容,不过这个Session介绍的已经是JMX新的version了,JMX在JDK6.0中有了很多改进,加入了MXBean较之以前开发更简单,灵活。
首先总的介绍一下JMX这个概念,JMX是Java Management Extension的缩写,其实简单得说来就是用来监控Java Class运行时状态的技术。而且他提供了强大的API和很好的设计,非常易于扩展,JDK5.0提供了这个技术的实现。
下面简单的介绍一下JMX之中的基本概念:
1,MBean是JMX需要监控的Java Class类,每一个MBean都要实现一个后缀为MBean的接口,这个接口也是用户定义的,这个接口是用来向JMX暴露可访问的方法,属性等
2,MBeanServer是MBeans的管理者,MBeanServer提供一个MBean的容器,一旦MBean注册到这个MBeanServer,这个MBean就被放到这个容器中,可以通过MBeanServer来访问这个MBean的属性和方法,(我觉得这个思路和EJB非常的相似)。
3,Connector是用于用户访问MBeanServer的,有多种实现方式,有通过Http的连接方式,通过RMI的连接方式等
其实这三个概念就是JMX的三个基本组成部分,JMX的Architecture就是由这三层组成的:
1,基础部件(MBean)
2,代理层(MBeanServer)
3,发布层(Connector)

posted @ 2007-02-27 23:25 solospider 阅读(5622) | 评论 (2)编辑 收藏