JMX架构的了解(转)

  JMX应该说是关于网络应用管理的的框架,如果你开发了一个比较复杂的系统,无疑你要提供这个系统的自身管理系统,JMX更多应用是体现在服务器上,如果你要使用java开发一个自己服务器或复杂的应用系统,那么推荐你基于JMX架构来开发,JBoss 3.0应用服务器等就是基于JMX开发的符合J2EE规范的服务器软件。

了解JMX可以使你深入了解J2EE服务器,为什么我们平时说“EJB”是个比较“重量”的方案选择,其中一个原因是J2EE服务器软件本身也是你的系统中一部分,它作为你系统的容器,对你的系统有至关重要的作用,如果无法直接介入管理或“调”教它,那么无疑你的系统本身存在着隐含的危险,现在,通过JMX,你现在可以深入到你J2EE容器内部的管理了。(好像国内出现了第一个自己J2EE服务器,不知道那是不是基于JMX开发的?)

J2EE并不能概括所有的应用领域,比如对速度和性能要求极高的游戏或股票行情等系统就需要自己直接来开发服务器,如果是能够基于JMX开发,那么可以说就大大提高编写管理程序的效率,可以将你的模块变成JMX的MBean,可以通过代理在程序内部或者通过WEB管理页面对你的MBean模块进行初始化重启以及参数设置。

JMX的好处还有:可以方便整合连接现有java的技术,如JNDI JDBC JTS及其它。特别是能够使用Jini的查询发现机制以及协议,我们知道,Jini提供了一种服务的查询和发现机制,这些服务都可以通过JMX来实现管理。

现在我们开始JMX的了解:

1。到java.sun.com首页的JMX页面,下载JMX的规定说明和样本程序。
2。按照JMX的说明进行一次教程,了解如何加入删除配置一个MBean,教程中是以SimpleMBean为例,那么我们能否建立一个自己的MBean吗?

我们来做一个你好的MBean,这里有一个小关键点,你的类取名有个规则,需要以MBean为结尾,如这里我们取名为HelloMbean:


公共接口HelloMbean {

//
公共管理属性字符串getName ();
公共空间setName(字符串名称);


//管理操作公共空白打印();

}

在这个班级里,有一个隐含属性:名称、提供了设置和获取的方法,同时有一个操作方法打印():

再定义一个具体的类:

公共类你好实现HelloMbean {

私人字符串名称=" ";

公共字符串getName () {
返回名称;
}

公共空间setName(字符串名称){
this.name=名字;
}

公共空白打印(){
system . out。println(“你好,”+名称+“! !”),
}
}


这样一个简单的MBean就做好了,我们可以通过管理界面加入这个你好,

再按教程启动BaseAgent,在代理管理中参考简单的填入:
域:Standard_Hello_MBeans

键:name=你好,数量=1

Java类:你好

将出现创建成功的信息。进入MBean视图给名称赋值,点按应用,然后再按打印,这是你的你好中的方法,在控制台你会看到输出。

是不是很惊奇你好中的属性和操作能被动态的访问和控制?已经隐约感到JMX的架构原理了吧?

下面再深入明确一些概念:
上面HelloMBean资源是通过管理这样的HTTP WEB界面管理,这种管理资源方式是属于JMX的分布式服务层,JMX通过分布式层能够部署和管理MBean资源。就象上面的例子,是通过HtmlAdaptor提供的HTTP WEB界面来方面的维护管理HelloMBean。

那么我们能否在程序中自动管理和部署我的MBean ?当然可以,这是通过代理层来完成,现在我们已经有了这个层次,MBean所在的资源层,
最外面分布的服务层,分布式服务层是通过代理层来访问MBean资源的,看看下面来自太阳公司JMX规定的架构图:


   JMX架构的了解(转)
从图中看出,代理层(代理层)包括MBean服务器和代理服务,那么我们来做一个上面例子HelloMBean的代理人:

//创建MBeanServer
//
System.out.println (“   创建MBeanServer。”);
MBeanServer服务器=MBeanServerFactory.createMBeanServer ();

//创建Registe HelloMBean
//
System.out.println (“   创建、注册一个新的你好Standard_MBean:“);
HelloMBean HelloMBean=new Hello ();

ObjectName hello_name=零;
尝试{
hello_name=new ObjectName (“Standard_Hello_MBeans: name=你好,数量=1”),
system . out。println("对象名称=" + hello_name);

//将HelloMBean注册到MBeanServer中去
服务器。registerMBean (helloMBean hello_name);
}
抓住(异常e) {

JMX架构的了解(转)