其实这东西完全不用自己写的,jdk提供了对操作系统监控的工具jconsole,只要稍加改动连接一下tomcat就可以对其进行监测和控制。
但老板的意思是要我写一个出来,去掉繁复的功能,只留下基础的功能,这样就可以嵌入到某项目中,或者做成系统的守护进程。并且点名要求使用JMX(←关键词啊!)
所以研究了几天之后做出了现在这个东东——由spring框架实现的,JMX监测管理Tomcat上部署的项目,基于页面显示的小工具。
=====================【请点击查看→】http://bbs.csdn.net/topics/390715823====================
因为有spring框架的支持,就变得容易很多了。
配置4个bean就可以了
1.定义解释mbean中注解的bean
<bean id="annoJmxAttrSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<bean id="mBeanAssembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> <!-- 注入定义的annoJmxAttrSource --> <property name="attrSource" ref="annoJmxAttrSource" /> </bean>
<bean id="httpAdapServer" class="com.sun.jdmk.comm.HtmlAdaptorServer"> <property name="port"> <!-- 设定访问的端口号 --> <value>8099</value> </property> </bean>
<bean id="mBeanExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false"> <!-- 注入上面定义的assembler --> <property name="assembler" ref="mBeanAssembler" /> <!-- 将定义的mbean注册到mBeanExporter中 --> <property name="beans"> <map> <!-- 将定义的HtmlAdaptorServer的bean加入mbean map中 --> <entry key="MyAgent:name=jmxAdapter,port=8099" value-ref="htmlAdapServer" /> </map> </property> </bean>
import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport; import com.sun.jdmk.comm.HtmlAdaptorServer; public class Test extends ActionSupport { @Autowired private HtmlAdaptorServer htmlAdapServer; public String JMXstart() throws Exception { this.addActionMessage("启动JMX监控"); htmlAdapServer.start(); return SUCCESS; } public String JMXstop() throws Exception { this.clearMessages(); this.addActionMessage("停止JMX监控"); htmlAdapServer.stop(); return SUCCESS; } public HtmlAdaptorServer getHtmlAdapServer() { return htmlAdapServer; } public void setHtmlAdapServer(HtmlAdaptorServer htmlAdapServer) { this.htmlAdapServer = htmlAdapServer; } }
<package name="jmx" namespace="/" extends="struts-default"> <action name="start" class="com.wyd.action.Test" method="JMXstart"> <result name="success">index.jsp</result> </action> <action name="stop" class="com.wyd.action.Test" method="JMXstop"> <result name="success">index.jsp</result> </action> </package>
启动之后看一下效果:(因为操作界面在localhost:8099,所以我加了个跳转)
操作界面里可以看到WEBModule。因为工作空间是新换的,所以只有一个用于测试的AAA和当前的Jmx
点击进入AAA之后在最下面能看到开启和关闭进程的按钮:
点击关闭之后,在地址栏访问AAA的项目就会显示访问失败,再点击开启又可以访问到了。说明Jmx运行成功了。
问题:这个有一点不好是只能监测到当前tomcat里的web项目,没有部署到tomcat中的项目和java项目就不能被监测到了。需求要求的是多个jvm,什么类型都有的,比这个要苛刻些,所以这个版本被淘汰鸟。。。
关于脱离tomcat直接监测系统服务并进行处理的方法,正在做啊。。。
论坛里也发了求助贴,只不过还没人鸟我。。。【请点击查看→】http://bbs.csdn.net/topics/390715823
【任务笔记】JAVA编程实现对Tomcat上部署项目的监测和控制,布布扣,bubuko.com
【任务笔记】JAVA编程实现对Tomcat上部署项目的监测和控制
原文:http://blog.csdn.net/wyd_cantarella/article/details/19973441