`
ss1
  • 浏览: 79771 次
  • 性别: 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  
中介者模式
   用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

相关推荐

    jmx 监控 tomcat

    在Tomcat这样的Java应用服务器中,JMX能够让我们深入洞察服务器的运行状态,包括内存使用、线程信息、MBean(Managed Beans)的属性和操作等。下面我们将详细介绍如何设置和使用JMX来监控Tomcat。 1. **开启JMX支持...

    jmx_tomcat_jboss

    在这个上下文中,“jmx_tomcat_jboss”涉及到的是如何通过JMX接口来对Apache Tomcat和Red Hat JBoss应用服务器进行监控和管理。这两个流行的Java应用服务器都支持JMX,以提供对内部组件和服务的远程访问,例如监控...

    基于Spring+JMX+Tomcat实现资源动态管理

    在IT行业中,动态资源管理是系统可扩展性和灵活性的关键因素之一。本文将深入探讨如何利用Spring框架、Java ...在实际工作中,这四个标签——jmx、spring、tomcat和jconsole——分别代表了资源管理的关键组件和技术。

    jmx 实现远程连接tomcat

    在tomcat目录下/bin/catalina.sh文件中,我们需要插入一行配置,用于启用jmx远程监控。配置内容如下: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -...

    tomcat开启远程jmx连接方式

    在Tomcat这样的Java应用服务器中,JMX可以帮助管理员监控和管理Tomcat的运行状态,如线程、内存使用、MBean等。以下是如何在不同版本的Tomcat(5、6、7)以及在Windows环境下开启远程JMX连接的详细步骤。 ### ...

    Monitoring Apache Tomcat with JMX.pdf

    Apache Tomcat是世界上最流行的开源Java Servlet容器,广泛用于部署Web应用程序。为了确保这些应用程序的稳定性和性能,对Tomcat...在实际操作中,结合日志分析和其他监控工具,可以构建出一个全面、高效的监控体系。

    jmx监控weblogic,tomcat,websphere源码

    在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...

    Tomcat开启JMX服务方法介绍

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

    boundary-plugin-jmx-tomcat:从 Apache Tomcat 实例收集指标

    在监控系统性能时,能够从 Tomcat 实例中收集指标至关重要,这有助于优化应用程序的效率,及时发现并解决问题。"boundary-plugin-jmx-tomcat" 是一个专门用于此目的的工具,它利用 Java Management Extensions (JMX)...

    zabbix监控tomcat所需的cmdline-jmxclient-0.10.3.jar和zbx自定义模版

    本文将深入探讨如何使用Zabbix监控Tomcat应用服务器,特别关注"cmdline-jmxclient-0.10.3.jar"工具以及相关的自定义模板。 首先,`cmdline-jmxclient-0.10.3.jar`是一个Java管理扩展(JMX)客户端,它允许通过...

    cmdline-jmxclient-0.10.3.jar + zabbix tomcat监控模板

    本文将详细讲解如何利用`cmdline-jmxclient-0.10.3.jar`工具与Zabbix集成,实现对Tomcat应用服务器的高效监控。 首先,`cmdline-jmxclient-0.10.3.jar`是一个命令行Java Management Extensions (JMX)客户端,它允许...

    tomcat中文手册.chm

    由于其小巧、高效和免费的特性,Tomcat在小型到中型的Web应用中得到了广泛应用。 二、Tomcat安装与配置 1. 安装:下载Tomcat的最新稳定版本,解压到指定目录,无需复杂安装过程。 2. 配置:修改`conf/server.xml`...

    Tomcat源码研究.pdf

    深入研究容器的实现可以帮助我们理解如何在Java Web应用中处理HTTP请求。 6. 生命周期:Tomcat中每个组件都有自己的生命周期。理解生命周期对于理解整个Tomcat的运作至关重要。例如,我们可以通过生命周期方法来...

    cmdline-jmxclient.zip

    标题“cmdline-jmxclient.zip”指的是一个包含命令行界面的Java管理扩展(JMX)客户端工具,这个工具主要用于远程连接并监控Java虚拟机(JVM)以及运行在其中的应用,比如Tomcat服务器。JMX是一种Java平台提供的标准...

    tomcat_weblogic_jmx.txt

    为了在 Apache Tomcat 中启用 JMX,首先需要修改 Tomcat 的启动脚本,即 `catalina.sh` 文件。在文件中添加以下行: ```bash CATALINA_OPTS="${CATALINA_OPTS}-Djava.rmi.server.hostname=162.16.10.53" CATALINA_...

    zabbix 监控 tomcat

    首先,需要在 Tomcat 的配置文件中添加 JMX 相关的参数,然后重启 Tomcat 服务器。这样,Tomcat 就可以被 Zabbix 监控了。 Zabbix 监控 Tomcat 的实现 在 Zabbix 中,可以通过 JMX 监控 Tomcat 的性能和状态。...

    tomcat中文手册

    Tomcat作为一个开源的Servlet容器,是Java EE应用中的关键组件,尤其在轻量级Web应用程序部署方面表现突出。下面将根据手册内容,深入探讨Tomcat的相关知识点。 一、Tomcat概述 Tomcat是Apache软件基金会Jakarta...

    提供一个《在Tomcat部署和发布Web应用》的入门教程

    在Java Web开发中,Tomcat是一个非常常见的应用服务器,它被广泛用于运行Servlet和JSP应用。本教程将深入探讨如何在Tomcat上部署和发布Web应用,这对于初学者和开发者来说是至关重要的技能。 首先,理解Web应用的...

Global site tag (gtag.js) - Google Analytics