⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 part code.txt

📁 创建Web应用的管理系统 获得MBeanServer的实例
💻 TXT
字号:
 
一.创建Web应用的管理系统 
对Web应用构建一个基于JMX的管理系统,我们需要做的事情有哪些呢? 
1.针对每一个需要管理的资源创建一个MBean的实例,这是JMX框架所要求的,有两种类型的实例可供选择,一种是直接管理资源的MBean,一种通过调用资源实例进行管理的MBean。 
2. 编写一个MBean描述文件,并描述每一个MBean,选择基于XML的MBean描述文件是一个不错的决定。 
3. 通过读MBean描述文件,生成MBeanInfo,从而生成一个个MBean。 
4. 将需要进行管理的MBean注册到MBean Server当中。 
5. 编写客户端代码,选择Web的方式进行客户端的编码比较Web应用的风格,也比较容易实现。 
那么一个基于JMX的Web应用的管理框架已经成形,图3是它的基本结构图,虚线部分为基于JMX的管理系统。接下来我们按照步骤实现整个管理系统。 
 
二.获得MBeanServer的实例 
有两种方案获得MBeanServer的实例: 
1.通过获得Web服务器的MBeanServer的实例,这样做的好处是通过该MBeanServer对本身,甚至可以实现对Web服务器的自身的一些管理。
2.通过JMX API中MBeanServerFactory类的createMbeanServer()的方法创建MBeanServer的实例,这样做得好处的使JMX的实现与Web服务器无关,使代码的移植性更强。在创建完MBeanServer以后,为了让能够在管理系统中很方便的获得该MBeanServer的引用,可将其置入application变量中(推荐),或者使用singleton设计模式的方法创建和获得。 
使用JMX API创建MBean Server的代码如下: 
MBeanServer server = MBeanServerFactory.createMBeanServer();
}
 }
}
}
//getter and setter
......}
第二段代码是一个Model MBean类,和前面提到的第一个Model MBean一样,继承了BaseModelMBean,不同的是它将拥有Web应用运行时期资源实例的引用,因为所有的属性和方法都在所引用的资源实例中,父类BaseModelMBean完成了通过反射调用该资源实例对应的属性设置方法,所以这个类的编写相当简单,我们可以在里面完成其他一些相关的方法。 
package com.myApp.db;
import org.apache.commons.modeler.BaseModelMBean;
import javax.management.MBeanException;
import javax.management.RuntimeOperationsException;
 public class ResInstanceMBean extends BaseModelMBean {
 public ResInstanceMBean ()
 throws MBeanException, RuntimeOperationsException {
 super();
 }
 /** other operations **/
 .....
}/**Web应用运行初期创建的数据库连接**/
DBAccess dbAccess = new DBAccess();
dbAccess.setDriver();
dbAccess.setPassword();
dbAccess.setUsername();
dbAccess.setDburl();
......
ResInstanceMBean mbean= new ResInstanceMBean();
mbean.setModelMBeanInfo(createMBeanInfo());
DBAccess instance = getDBAccess();
mbean.setManagedResource(instance, "objectReference");
MBeanServer serv = getMBeanServer();
ObjectName oname = createObjectName(mbean);
serv.registerMBean(mbean, oname);
四.创建MBean描述文件
  在上面第三段代码中,我们可以看到,要将MBean注册到MBean Server中必须先创建MBeanInfo,MBean的setModelMBeanInfo()用来将MBeanInfo设置到MBean中。
    < p name="JDBCConfigMBean"> 
  className="com.myApp.jmx.JDBCConfigMBean"
  description="the object to access database"
  domain="myapp">
  < p name="driver"> 
  description="Jdbc driver name"
  type="java.lang.String"
  writeable="false"/>
  < p name="dburl"> 
  description="database url"
  type="java.lang.String"/>
  < p name="username"> 
  description="Database user name"
  type="java.lang.String"/>
  < p name="password"> 
  description="vthe user name's password"
  type="java.lang.String"/>
  < p name="save"> 
  description="save the configuration"
  impact="ACTION"
  returnType="java.lang.String">
  < p name="DBAccess"> 
  className="com.myApp.jmx.ResInstanceMBean"
  description="the object to access database"
  domain="myapp"
  type="com.myApp.db.DBAccess">
  < p name="driver"> 
  description="Jdbc driver name"
  type="java.lang.String"
  writeable="false"/>
  < p name="dburl"> 
  description="database url"
  type="java.lang.String"/>
  < p name="username"> 
  description="Database user name"
  type="java.lang.String"/>
  < p name="password"> 
  description="vthe user name's password"
  type="java.lang.String"/>
  < p name="testConnection"> 
  description="test configure attribute"
  impact="ACTION"
  returnType="java.lang.String">
  < p name="driver"> 
  description="Jdbc driver name for test"
  type="java.lang.String"/>
  < p name="username"> 
  description="Database user name for test"
  type="java.lang.String"/>
  < p name="password"> 
  description="the user name's password for test"
  type="java.lang.String"/>
  < p name="dburl"> 
  description="database url for test"
  type="java.lang.String"/>
  五.注册MBean
  在对MBean注册前,必须得到MBean的描述信息,并且保存在MBeanInfo的实例中,否则是无法将MBean注册到MBean Server当中的,通过MBean描述文件,获得各种类型MBean的描述信息是一件非常简单的事情,而这些正是创建MBean所需要的,这样做的优点在于不需要通过编写代码,只需要修改描述文件,就可以添加新的MBean,注册的代码实际上我们之前的代码已经列出。在MBean注册时必须指定对应的ObjectName,ObjectName相当于MBean在MBean Server中的唯一名字,它的格式为:"domain:key1=value1,key2=value2...",可根据系统的要求定义一套命名的规则。
  //注册mbean到MBean Server中
  MBeanServer serv = getMBeanServer();
  ObjectName oname = createObjectName(mbean);
  serv.registerMBean(mbean, oname);
  六.编写管理框架的客户端
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -