JMX 入门学习-(1)创建一个MBean

来源:互联网 发布:安卓看书软件 编辑:程序博客网 时间:2024/06/04 19:59

JMX是java 管理扩展的简称,主要是为系统的管理提供一套有效的机制,我使用jmx主要是为开发中一些需要系统配置的地方提供热部署的功能。这只是我的简单理解。也希望大家能给我多提批评意见,帮助我提高自己的知识水平。

 使用JMX比较简单,首先到Sun 主页上下载JMX的参考实现。http://java.sun.com/products/JavaManagement/download.html

第一步:写一个MBean 它与普通的Bean 基本上没有什么区别。不过一定要用MBean结尾.

//首先定义一个接口,注意该接口一定要用MBean结尾,这是开发stardMBean的规则。

package com.jmx.simple.demo;

public interface HelloMBean {

 public  String getName();

 public  void setName(String name);

 public void sayHello(String value);

}

//用一个类来实现刚才定义的接口.

package com.jmx.simple.demo;

public class Hello implements HelloMBean {
 private String name="";
 public String getName() {
  // TODO Auto-generated method stub
  return this.name;
 }

 public void sayHello(String value) {
  // TODO Auto-generated method stub
  System.out.println(name+" says: "+value);
 }

 public void setName(String name) {
  // TODO Auto-generated method stub
  this.name=name;
 }

}

//将刚才开发的MBean注册 MBean server中,我使用的是jboss 4.4的jmx server,具体做法如下。

//首先我定义了一个servlet ,将下面代码覆盖你的init()函数如下:

public void init() throws ServletException {
  // Put your code here
  List serverList = MBeanServerFactory.findMBeanServer(null);//获取server列表.
  MBeanServer server = (MBeanServer) serverList.get(0);//获得默认的server.
  String DOMAIN = server.getDefaultDomain();//获得server的域,在jboss中该域为jboss.
  final Hello helloMBean = new Hello(); //定义我们开发的MBean地实现.
     ObjectName hello= null;//这是注册MBean的命名对象.
  try {
   hello = new ObjectName("jboss.jmx:name=HelloJMX");
   server.registerMBean(helloMBean, hello);//注册前面定义好的MBean.
  } catch (MalformedObjectNameException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NullPointerException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InstanceAlreadyExistsException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (MBeanRegistrationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NotCompliantMBeanException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

//然后在web.xml中把这个servlet定义为自动启动。

//在web.xml找到你刚才定义的servlet配置的地方。然后加入<load-on-startup>1</load-on-startup>.可以参考我的配置。

 <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>JmxInitialize</servlet-name>
    <servlet-class>com.jmx.servlets.jboss.JmxInitialize</servlet-class>
   <load-on-startup>1</load-on-startup><!--这个地方是新加的-->
  </servlet>

  <servlet-mapping>
    <servlet-name>JmxInitialize</servlet-name>
    <url-pattern>/servlet/JmxInitialize</url-pattern>
  
  </servlet-mapping>

//启动jboss,在ie中输入http://localhost:8080/jmx-console.

可以看到我们刚才注册的MBean ;name=HelloJMX

关于jmx的使用我想不用我太多说了吧。欢迎大家多提意见。

原创粉丝点击