`
ss1
  • 浏览: 77617 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JMX在Tomcat中的应用(四)

阅读更多

四、 Tomcat 中最简单的 MBean

下面我们打开 Tomcat 源代码,看看 Tomcat 中最简单的一个 MBean 。在 Tomcat 的启动引导类 Bootstrap.java 172 187 行,我们可以看到如下代码:

ClassLoader classLoader = ClassLoaderFactory.createClassLoader
(locations, types, parent);

// Retrieving MBean server
MBeanServer mBeanServer = null;
if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
mBeanServer =
  (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
} else {
mBeanServer = MBeanServerFactory.createMBeanServer();
}

// Register the server classloader
ObjectName objectName =
new ObjectName("Catalina:type=ServerClassLoader,name=" + name);
mBeanServer.registerMBean(classLoader, objectName);


4.1
上面的代码首先使用 ClassLoaderFactory 工厂类创建一个 ClassLoader

4.2 然后在 MBeanServerFactory 这个工厂类中查找 MBeanServer ,如果没有发现,就使用这个工厂类创建一个 MBeanServer

4.3 第三步是给刚才创建的 ClassLoader 这个 MBean 取个名字“ Name: Catalina:type=ServerClassLoader,name=common ”,然后注册到 MBeanServer

您如果在 JConsole 中观察这个 MBean ,会发现这个 MBean 没有向管理应用程序暴露任何属性和方法,并且 Classloader 似乎也符合 JMX 命名规范,它也不是一个 DynamicBean ,这是为什么呢?首先,这个 Classloader 其实一个 StandardClassloader ,而不是 JDK 中缺省的 Classloader ,您如果打开 ClassLoaderFactory createClassLoader 方法,马上就可以看到这一点;另外,看看 StanderClassloader 的类签名,我们会发现该类实现了 StandardClassLoaderMBean 接口,这是符合 JMX 命名规范的;请打开 StandardClassLoaderMBean 接口的源代码,您会发现这是一个空接口,这意味着实现这个接口的 MBean 不会向管理程序暴露任何属性和方法。

最后,希望这篇入门级的简单介绍,能有助于大家理解 JMX JMX Tomcat 中的应用。















附录:针对本文中的热水器小例子,我们给出了一个简单问题,即如何修改我们既有的代码,让这些代码所在的资源能使用
JMX 管理?如果您稍微翻阅一下 Tomcat 的源代码,您会发现, Tomcat 的作者们在 JMX 升级时对已有源代码的改动有点粗暴,勇猛有余,优美不足。 org.apache.catalina.core 包中的关键组件,大部分后加了 preRegister() getObjectName() 等等方法,在 init() 方法中又添加了一堆 Registry.getRegistry.unregisterComponent registerComponent 代码,这些方法其实这些 core 组件没有直接关系,也不是这些 core 组件应该具有的功能,并且这些后添加的代码及其类似。当然,这种情况在我们实际项目中更为多见,主要原因是时间不足,资源有限等等。

如果要比较优美的解决上面的问题,我个人认为,首先,保持现有代码,然后对现有代码进行扩展而不是大刀阔斧的修改已有代码。就拿我们热水器的简单例子来说,我们不要修改 CentralHeaterImpl.java 的现有代码,而是使用 Wrapper 设计模式,设计一个新类,然后将这个 CentralHeaterImpl 类适配成我们需要的 MBean 接口,具体实现如下:


a)   CentralHeaterDecoratorMBean.java 源代码

package
carl.test.jmx;
/**
* @author carlwu
*
*/
public interface CentralHeater Decorator MBean {

/**
* return the heater provider
* @return
*/
public String getHeaterProvider();


/**
* Get current temperature of heater
* @return the temperature of the heater
*/
public int getCurrentTemperature();

/**
* Set the new temperature
* @param newTemperature
*/
public void setCurrentTemperature( int newTemperature);

}

CentralHeaterDecorator .java 的源代码:

package
carl.test.jmx;
public class CentralHeaterDecorator implements CentralHeaterDecoratorMBean {

private CentralHeaterImpl centralHeater ;

public CentralHeaterDecorator(CentralHeaterImpl theCentralHeater){
centralHeater =theCentralHeater;
}


public int getCurrentTemperature() {
// TODO Auto-generated method stub
return centralHeater .getCurrentTemperature();
}

public void setCurrentTemperature( int newTemperature) {
// TODO Auto-generated method stub
centralHeater .setCurrentTemperature(newTemperature);
}



public String getHeaterProvider() {
// TODO Auto-generated method stub
return centralHeater . HEATER_PROVIDER ;
}


public String printCurrentTemperature() {
// TODO Auto-generated method stub
String returnMsg = "Current temperature is:"
    + centralHeater .getCurrentTemperature();
System. out .println(returnMsg);
return returnMsg;

}

}



最后,请把 Agent 代码中的下面一行:

CentralHeaterInf centralHeater =
new CentralHeaterImpl();

改为:

CentralHeaterDecoratorMBean centralHeater = new CentralHeaterDecorator(new CentralHeaterImpl());

其运行效果完全一样,但我们完全没有改动既有代码。

分享到:
评论
1 楼 cshuser 2013-01-06  
中介者模式
   用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

相关推荐

    Tomcat开启JMX服务方法介绍

    主要介绍了Tomcat开启JMX服务方法的相关内容,小编觉得挺不错的,在这里给大家分享一下,需要的朋友可以参考。

    Tomcat源码研究.pdf

    Tomcat源码研究.pdf。Catalina脚本解析,Tomcat启动遇到的常见问题,架构探讨,JMX在tomcat中的应用,容器初探,生命周期

    深入剖析TOMCAT中文版

    本书深入剖析Tomcat4和Tomcat5中的每个组件,并揭示其内部...本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己Web服务器。

    深入剖析TOMCAT

    本书深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示...本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat 中的应用程序,逐一剖析Tomcat 的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。

    《深入剖析Tomcat(中文版+英文版)》.rar

    《深入剖析Tomcat》从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。 目录 第1章 一个简单的web服务器 1.1...

    tomcat学习源码

    资源是关于tomcat深入剖析的源码. ...本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。

    Tomcat5.0.x

    Apache Tomcat 5.0.x在Apache Tomcat 4.1的基础上做了很多改动,包括: · 性能优化和减少垃圾回收动作 · 重构程序部署,通过一个可选的独立部署程序,允许在将一个web应用放进产品前验证和编译它 · 基于JMX的...

    tomcat深入剖析.pdf

    在内容上,《深入剖析Tomcat》更关注对Tomcat基本体系结构的讲解,并没有涉及在实际应用中的具体实现细节。希望读者在阅读的时候,着重把握Torrical的一些设计思想,在此基础上,再针对某一方面进行深入的学习和研究...

    tomcat6、7、8、9, maven3.5

    的Apache Tomcat 5.5.X支持相同的Servlet和JSP规范版本的的Apache Tomcat 5.0.x中 还有在许多领域显著变化引擎盖下,从而提高了性能,稳定性和总拥有成本。有关详细信息,请参阅Apache Tomcat 5.5 Changelog。 的...

    ansible-role-tomcat-multi:最完整的Tomcat安装,支持,init.d脚本,应用程序命名,大页面,强化,漂亮的错误页面,sha512哈希密码,JMX配置,多个Tomcat版本,分离的catalina_home和多个catalina_base(很快)

    Ansible角色:在多个正在运行的实例中安装Apache Tomcat Java应用程序服务器(可选使用Hugepages) 在多个正在运行的实例中安装Apache Tomcat Java应用程序服务器。 最完整的Tomcat安装,支持,init.d脚本,应用...

    zabbix 监控 tomcat

    利用zabbix JMX 自带模板应用服务监控 tomcat,帮助初学的朋友,是他们能很快上手

    j2ee应用服务器和web服务器解析.docx

    由于Tomcat允许开发者只需通过加入一行致谢,就可以把Tomcat嵌入到它们的应用中。遗憾的是,许多商业应用服务器并没有遵守此规则。 对于开发者来说,如果是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成JavaWeb...

    apache-tomcat-5.5.17-src

    │ ch17.rar 将Tomcat嵌入到Java中(实例演示) │ ch19(security).rar Tomcat安全(实例演示) │ ch24.rar IIS与Tomcat集成(实例演示) │ ├─ch20 JMeter压力测试实例(实例演示) │ classes12.jar ...

    how-tomcat-works

    16.2 tomcat中的shutdown hook 131 第17章 启动tomcat 133 17.1 概述 133 17.2 Catalina类 133 17.2.1 start方法 134 17.2.2 stop方法 135 17.2.3 启动Digester 135 17.2.4 关闭Digester 135 17.3 Bootstrap类 136 ...

    JConsole_远程监控Tomcat_ricky

    JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。JConsole能够提供被监控虚拟机...

    HowTomcatWorks:《深度剖析Tomcat》原始码及笔记

    第四章Tomcat的默认连接器 第五章servlet容器 第六章生命周期 第七章日志记录器 第八章加载器 第九章会议管理 第十章应用程序 第十一章StandardWrapper 第十二章StandardContext 第十三章主机和引擎 第十四章服务器...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    16.2 tomcat中的shutdown hook 131 第17章 启动tomcat 133 17.1 概述 133 17.2 Catalina类 133 17.2.1 start方法 134 17.2.2 stop方法 135 17.2.3 启动Digester 135 17.2.4 关闭Digester 135 17.3 Bootstrap类 136 ...

    embedded-jmxtrans:进行中的JMX指标导出器

    正在进行中的JMX Exporter将解决在Java的IP地址未知且RMI-IIOP被禁用(例如Amazon Elastic Beanstalk,Cloudbees等)的云风格和弹性环境中进行远程JMX访问的问题。 如果您有什么要讨论的 入门 启用了Spring ...

    fallback:在 tomcat 上运行的 spring 框架项目的良好基础。 使用简单的配置来突出人们期望从 Java 应用程序服务器中获得的许多功能

    fallback 提供了一个很好的示例 Web 应用程序存档(war),用于集成 Spring/Hibernate/JMX/JPA/Ehcache。 为了提出这种干净的集成,您必须筛选大量相互冲突的博客帖子和文档。 我的目标是为您完成这项工作,并提供...

    jmxmon:Tomcat和JVM监视器。 易于安装tomcat Webapp

    此监视器不需要使用Tomcat应用程序进行编译。 要安装,只需编辑一个文件,构建jmxmon Webapp,然后将其复制到tomcat / webapps目录。 设置以构建您的jmxmon 1.检查您安装的Maven版本 mvn -version 如果您的Maven...

Global site tag (gtag.js) - Google Analytics