tomcat源码解读三(1) tomcat的jmx管理
JMX即Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Java 程序(同时 JMX 也在 J2EE 1.4 中被发布)它的作用是可以在程序运行的时候对其进行动态处理,调用相应方法来进行对指定属性值进行修改,在下面我将以代码结合jconsole进行分析(注意:在实际的程序管理过程中并不支持使用jconsole,因为它是一个java的客户端)源代码在下一节进行分析
1.1 tomcat中JMX的使用Demo
请注意这个JMX的展示仅仅针对与tomcat中的,因为tomcat对JMX做了改动,导致setter和getter方法不显示以及其他相关属性操作展示与原生jmx有所出入
1.1.1 java代码: 父类:
public class MbeanTestExtend {
private String unSetGetAttrP;
private String onlySetAttrP;
private String onlyGetAttrP;
private String includeSetGetAttrP;
public void setOnlySetAttrP(String onlySetAttr) {
this.onlySetAttrP = onlySetAttr;
}
public String getOnlyGetAttrP() {
return onlyGetAttrP;
}
public String getIncludeSetGetAttrP() {
return includeSetGetAttrP;
}
public void setIncludeSetGetAttrP(String includeSetGetAttrP) {
this.includeSetGetAttrP = includeSetGetAttrP;
}
public String setAttrTestP(String attrTestP){
return "attrTestP";
}
public void invokeMethodP(){
System.out.println("invokeMethodP...");
}
}
子类:
public class MBeanTest extends MbeanTestExtend implements MBeanRegistration{
private String unSetGetAttr;
private String onlySetAttr;
private String onlyGetAttr;
private String includeSetGetAttr;
public void setOnlySetAttr(String onlySetAttr) {
this.onlySetAttr = onlySetAttr;
}
public String getOnlyGetAttr() {
return onlyGetAttr;
}
public String getIncludeSetGetAttr() {
return includeSetGetAttr;
}
public void setIncludeSetGetAttr(String includeSetGetAttr) {
this.includeSetGetAttr = includeSetGetAttr;
}
public String setAttrTest(String attrTest){
return "attrTest";
}
public void invokeMethod(String value){
System.out.println("传入值:"+value);
}
public String getUnHandle(){
return "测试";
}
public String getDomain(){
return "mainTest1";
}
public static void main(String[] args) throws IOException {
//MBeanServer实例能够用MBeanServerFactory类提供的方法获取
//MBeanServer mserver = null;
MBeanTest mBeanTest = new MBeanTest();
mBeanTest.register(mBeanTest, "type=MBeanTest");
while (true){}
}
protected final ObjectName register(Object obj, String objectNameKeyProperties) {
//根据domain构造一个对象名 形式一般 domain:type=className 这个最终构成 jmxStudy:type=mainTest
//StringBuilder name = new StringBuilder(getDomain());
StringBuilder name = new StringBuilder("jmxStudy");
name.append(':');
name.append(objectNameKeyProperties);
ObjectName on = null;
try {
//将上面构建的对象名字符串转化为对应的对象
on = new ObjectName(name.toString());
//获取MBeans建模注册表并注册组件
Registry.getRegistry(null, null).registerComponent(obj, on, null);
} catch (MalformedObjectNameException e) {
throw new RuntimeException(e.toString());
} catch (Exception e) {
throw new RuntimeException(e.toString());
}
return on;
}
@Override
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
throw new RuntimeException("preRegister.......");
}
@Override
public void postRegister(Boolean registrationDone) {
throw new RuntimeException("postRegister.......");
}
@Override
public void preDeregister() throws Exception {
throw new RuntimeException("preDeregister.......");
}
@Override
public void postDeregister() {
throw new RuntimeException("postDeregister.......");
}
}
1.1.2 jconsole效果:
1.1.3 结论: 1.无setter和getter方法的变量不会显示 2.有getter方法无setter方法的即使没有变量会去掉前面get然后显示属性 3.有setter方法无getter方法且无变量的不会显示 4.有setter方法无getter方法存在变量的属性会显示 5.由1 2 3 4可知一个属性是否显示跟其句柄和setter/getter方法有关 6.一个属性显示后仅当具有getter方法的则这个属性可读,在值的地方会显示 7.一个属性显示后仅当具有setter方法的则这个属性可写,在值得地方输入新值会进行更新 8.一个操作方法必须满足一下的条件才能显示并且实现调用 ①public修饰 ②不是static方法 ③不是setter/getter方法 ④不是Object类中的方法(这是由于继承类中的方法也会被显示)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用goaccess分析nginx日志
- 一文搞懂 Flink如何移动计算
- 第7章代码-真实感图形技术
- 第6章代码-三维造型
- 自定义组件使用v-model
- 金蝶K3 WISE版本过服务期后打补丁方法-完善版本
- 图像处理笔记(6)---- OpenCV waitKey函数
- SpringBoot整合Quartz作为调度中心完整实用例子
- SpringBoot整合SpringSecurity简单实现登入登出从零搭建
- SpringBoot整合SpringBatch实用简例
- 解决JPA懒加载典型的N+1问题-注解@NamedEntityGraph
- 基于Shiro,JWT实现微信小程序登录完整例子
- Spring Cloud Eureka 总结
- Spring Cloud Feign 总结
- 掘金15W沸点简单分析(一)