雨中风铃

用程序编写美妙人生

发现了JMX的好东西,大家分享一下!!

首先总的介绍一下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)  

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向外界提供服务,所以这层叫做代理层。

   .2.1  一个MBeanServer通过如下的工厂方法创建:

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

    2.2 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,发布层 所谓发布层就是外界访问代理层的方法。

  3.1 可以通过如下的方法启动一个RMI服务器 :

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);

              3.2 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的基本概念就介绍到这里.

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭