`
Aga
  • 浏览: 217737 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

jmx控制tomcat

    博客分类:
  • J2SE
阅读更多
以前所作的一切应用程序基本上都是由tomcat容器,控制web应用程序的生死、这两天简单的学习了下jmx,有所感悟。所以反其道而行之:自己写一个JmxAgent来控制tomcat的生、死,从而达到:利用jmx来控制资源的目的。
在项目中集成tomcat我很早以前就听说过,一直以为很神秘:技术含量很高。通过我自己的研究:发现其实就比helloworld难一点。上代码。
我的实现很简单:一个标准的mbean,挂上一个htmlAdaper和另外一个rmiconnector以备访问。
代码如下:MBean接口:
package com.cxz.jmx;
public interface TcMgrMBean {
	public void startTc();
	public void stopTc();
}

具体的MBean实现:其中的Bootstrap.main(...)需要解释一下:参照tomcat的源代码:该类是tc的启动类。当然,本例中采用的形式是:把tc打包引入到工程中。还有另外一种实现方式是:利用Process方式启动另外一个进程。第一种方式是:两个应用程序在一个jvm中,第二中则是2个jvm管理、控制可能要麻烦些。
package com.cxz.jmx;

import org.apache.catalina.startup.Bootstrap;

public class TcMgr implements TcMgrMBean, Runnable {

	public void startTc() {
		Thread thread = new Thread(this, "tomcat-6");
		thread.start();
	}

	public void stopTc() {//具体参阅tc6 src
		String[] params = new String[1];
		params[0] = "stop";
		Bootstrap.main(params);
	}

	public void run() {//具体参阅tc6 src
		String[] args = new String[0];
		Bootstrap.main(args);
	}

}

代理类.稍候我会把源代码上传至网络硬盘.
package com.cxz.jmx;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import com.sun.jdmk.comm.HtmlAdaptorServer;

public class TcAgent {

	private MBeanServer server = null;

	public TcAgent() {
		//The default constructor of the Agent
	}

	public void assemble() throws Exception {
		server = MBeanServerFactory.createMBeanServer("TcAgent");
		HtmlAdaptorServer adapter = new HtmlAdaptorServer();

		//regist the MBean
		TcMgr manager = new TcMgr();
		server.registerMBean(manager, new ObjectName("TcAgent:name=TcManager"));

		//regist the HtmlAdaptor
		adapter.setPort(9092);
		server.registerMBean(adapter, new ObjectName(
				"TcAgent:name=htmlAdaptor,port=9092"));
		adapter.start();
		
		//compose the RMIConnector
		JMXServiceURL url = new JMXServiceURL(
				"service:jmx:rmi:///jndi/rmi://10.237.81.67:9999/server");
		JMXConnectorServer cs = JMXConnectorServerFactory
				.newJMXConnectorServer(url, null, server);
		cs.start();
	}

	public static void main(String[] args) throws Exception {
		new TcAgent().assemble();
	}

}

当然:启动之前要先注册rmi再console中运行:rmiregistry 9999。在运行本程序。
启动之后访问http://localhost:9092就可以动态控制tc的开、关
5
0
分享到:
评论
5 楼 daly1987 2011-12-08  
同意楼上的说得。。这么不如直接启动tomcat呢。

4 楼 unsid 2009-03-13  
看不懂..你这个例子是在本地运行还是在服务器上运行?
在本地运行显然拿不到Bootstrap启动类引用,不可能,在应用服务器上运行又必须打成jar包放在catalina.jar所在目录下,或者将catalina.jar加到classpath下,否则还是找不到Bootstrap这个类,倘若放到catalina.jar所在目录下,又要每次双击你的jar文件来启动jmxserver才能通过浏览器远程启动tomcat,其实你启动jmxserver的过程繁琐程度和启动tomcat一样,那这样的启动tomcat过程便利又在哪体现呢?
3 楼 Aga 2008-12-13  
tomcat自带的?没研究过。不过那是tomcat自身的东西。网上有一篇文章叫:jmx一步一步来。推荐你看看
2 楼 lteb2002 2008-12-09  
有研究TOMCAT自带的MBEAN如何用吗?
1 楼 lteb2002 2008-12-09  
写得很好啊,我最近也在基于JMX整TOMCAT

相关推荐

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

    通过集成JMX,开发者可以远程访问和控制Tomcat的各项配置,以适应不断变化的需求。 集成Spring和JMX的过程主要包括以下步骤: 1. 创建MBean:定义一个Java类实现特定的管理功能,并通过实现`javax.management....

    jmx 实现远程连接tomcat

    该文件用于控制jmx的访问权限。在文件最后两行,我们需要取消注释,启用monitorRole和controlRole两个角色。monitorRole拥有只读权限,而controlRole拥有读写权限。 四、配置jmxremote.password文件 在同一目录下...

    tomcat开启远程jmx连接方式

    **Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java平台提供的一种标准管理框架,它允许开发者创建、管理和监控应用程序的各种资源,包括服务器、应用程序、设备和服务。在Tomcat这样的...

    bootstrap开启与关闭tomcat

    Tomcat支持JMX,因此我们可以创建一个JMX客户端来远程控制Tomcat的启动和停止。首先,需要在Tomcat中启用JMX Remote,然后通过MBeanServer连接到Tomcat并调用相应的操作。 2. **API方式**: 另外,Tomcat提供了API供...

    cmdline-jmxclient.zip

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

    java jmx agent不安全的配置漏洞如何改进(由浅入深代码范例和详细说明).docx

    3. 访问控制:通过对 JMX Agent 的访问控制,我们可以限制只有特定的用户或角色可以访问 JMX Agent。例如,我们可以使用 Role-Based Access Control(RBAC)来对 JMX Agent 进行访问控制。 通过采取这些措施,我们...

    jmx三种访问方式

    1. **Servlet容器集成**:一种常见的实现JMX通过HTTP访问的方式是通过Servlet容器(如Tomcat)集成。开发者可以创建一个Servlet,该Servlet通过JMX API连接到MBeanServer,并将MBean的信息转换为HTML格式供用户在...

    Tomcat源码研究.pdf

    Tomcat使用JMX来暴露其内部状态和管理信息,允许管理员通过各种JMX客户端来监控和配置运行中的Tomcat服务器。在源码级别研究JMX在Tomcat中的应用,可以帮助我们掌握如何为自己的Java应用提供管理接口。 5. 容器初探...

    JMX、MXBean学习

    例如,你可以通过JMX监控Tomcat服务器的线程池状态,或者调整数据库连接池的参数。 8. **自定义MBean**:根据需求,开发者可以创建自定义的MBean来管理特定的应用逻辑或资源。 9. **异常处理**:MBean的操作可能会...

    Tomcat5.0和Tomcat6.0

    5. **JMX支持**:集成了Java Management Extensions (JMX),允许通过JMX管理Tomcat实例,监控服务器状态和性能。 **Tomcat6.0** Tomcat6.0于2006年发布,基于Java Servlet 2.5和JavaServer Pages 2.1规范,相比...

    tomcat6的源码

    5. **JMX(Java Management Extensions)**:Tomcat支持JMX,允许管理员监控和管理服务器状态。查看`jmx`目录下的源码可以了解如何使用JMX注册和暴露管理MBean。 6. **配置解析**:Tomcat的配置文件如`server.xml`...

    通过Tomcat开启JMX监控的方法图解

    本文将详细介绍如何通过Tomcat开启JMX监控,此方法适用于使用Tomcat服务器的Java应用管理。由于本文采用图文并茂的方式详细介绍,因此具有很高的参考价值。 监控方法主要分为两部分,一部分为无需账号密码的简单...

    Tomcat 接口文档 API

    8. **JMX (Java Management Extensions)**: Tomcat使用JMX暴露管理MBeans(Managed Beans),允许通过JMX代理远程监控和管理Tomcat服务器的状态,包括启动/停止应用、查看线程池状态、调整配置等。 9. **Clustering...

    apache-tomcat-7.0.79.zip

    8. **JMX(Java Management Extensions)支持**:Tomcat支持JMX,允许通过JMX管理工具监控和管理Tomcat实例,如调整配置、查看运行状态、收集性能指标等。 9. **集群与负载均衡**:Tomcat支持集群配置,可以创建多...

    jmx_access&password;

    在Tomcat这样的Java应用服务器中,为了保护JMX服务的安全,通常需要进行身份验证和授权。`jmx_access&password;` 文件就是用来配置这些安全策略的。文件中的内容通常包含用户账户、密码以及它们可以执行的操作。例如...

    tomcat6.0.35_tomcat_

    1. **JMX监控**:通过Java Management Extensions (JMX) 可以远程监控Tomcat的状态和性能。 2. **日志系统**:利用Juli,可以自定义日志级别、输出位置和格式,便于问题排查。 3. **管理界面**:默认安装的`...

    Linux版本tomcat安装包apache-tomcat-9.0.64

    7. **安全性**:Tomcat的安全管理主要涉及访问控制和权限管理,这可以通过`conf/tomcat-users.xml`配置用户的角色和权限。同时,HTTPS支持可以通过配置`conf/server.xml`中的`<Connector>`元素来启用。 8. **性能...

    tomcat8.5.59

    1. JMX监控:通过JMX(Java Management Extensions),可以远程监控Tomcat的状态,包括线程、内存、连接器等。 2. Catalina日志:`logs/catalina.out`文件记录了Tomcat的运行日志,便于排查问题。 3. VisualVM或...

Global site tag (gtag.js) - Google Analytics