四、
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());
其运行效果完全一样,但我们完全没有改动既有代码。
分享到:
相关推荐
在Tomcat这样的Java应用服务器中,JMX能够让我们深入洞察服务器的运行状态,包括内存使用、线程信息、MBean(Managed Beans)的属性和操作等。下面我们将详细介绍如何设置和使用JMX来监控Tomcat。 1. **开启JMX支持...
在这个上下文中,“jmx_tomcat_jboss”涉及到的是如何通过JMX接口来对Apache Tomcat和Red Hat JBoss应用服务器进行监控和管理。这两个流行的Java应用服务器都支持JMX,以提供对内部组件和服务的远程访问,例如监控...
在IT行业中,动态资源管理是系统可扩展性和灵活性的关键因素之一。本文将深入探讨如何利用Spring框架、Java ...在实际工作中,这四个标签——jmx、spring、tomcat和jconsole——分别代表了资源管理的关键组件和技术。
在tomcat目录下/bin/catalina.sh文件中,我们需要插入一行配置,用于启用jmx远程监控。配置内容如下: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -...
在Tomcat这样的Java应用服务器中,JMX可以帮助管理员监控和管理Tomcat的运行状态,如线程、内存使用、MBean等。以下是如何在不同版本的Tomcat(5、6、7)以及在Windows环境下开启远程JMX连接的详细步骤。 ### ...
Apache Tomcat是世界上最流行的开源Java Servlet容器,广泛用于部署Web应用程序。为了确保这些应用程序的稳定性和性能,对Tomcat...在实际操作中,结合日志分析和其他监控工具,可以构建出一个全面、高效的监控体系。
在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...
主要介绍了Tomcat开启JMX服务方法的相关内容,小编觉得挺不错的,在这里给大家分享一下,需要的朋友可以参考。
在监控系统性能时,能够从 Tomcat 实例中收集指标至关重要,这有助于优化应用程序的效率,及时发现并解决问题。"boundary-plugin-jmx-tomcat" 是一个专门用于此目的的工具,它利用 Java Management Extensions (JMX)...
本文将深入探讨如何使用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`是一个命令行Java Management Extensions (JMX)客户端,它允许...
由于其小巧、高效和免费的特性,Tomcat在小型到中型的Web应用中得到了广泛应用。 二、Tomcat安装与配置 1. 安装:下载Tomcat的最新稳定版本,解压到指定目录,无需复杂安装过程。 2. 配置:修改`conf/server.xml`...
深入研究容器的实现可以帮助我们理解如何在Java Web应用中处理HTTP请求。 6. 生命周期:Tomcat中每个组件都有自己的生命周期。理解生命周期对于理解整个Tomcat的运作至关重要。例如,我们可以通过生命周期方法来...
标题“cmdline-jmxclient.zip”指的是一个包含命令行界面的Java管理扩展(JMX)客户端工具,这个工具主要用于远程连接并监控Java虚拟机(JVM)以及运行在其中的应用,比如Tomcat服务器。JMX是一种Java平台提供的标准...
为了在 Apache Tomcat 中启用 JMX,首先需要修改 Tomcat 的启动脚本,即 `catalina.sh` 文件。在文件中添加以下行: ```bash CATALINA_OPTS="${CATALINA_OPTS}-Djava.rmi.server.hostname=162.16.10.53" CATALINA_...
首先,需要在 Tomcat 的配置文件中添加 JMX 相关的参数,然后重启 Tomcat 服务器。这样,Tomcat 就可以被 Zabbix 监控了。 Zabbix 监控 Tomcat 的实现 在 Zabbix 中,可以通过 JMX 监控 Tomcat 的性能和状态。...
Tomcat作为一个开源的Servlet容器,是Java EE应用中的关键组件,尤其在轻量级Web应用程序部署方面表现突出。下面将根据手册内容,深入探讨Tomcat的相关知识点。 一、Tomcat概述 Tomcat是Apache软件基金会Jakarta...
在Java Web开发中,Tomcat是一个非常常见的应用服务器,它被广泛用于运行Servlet和JSP应用。本教程将深入探讨如何在Tomcat上部署和发布Web应用,这对于初学者和开发者来说是至关重要的技能。 首先,理解Web应用的...