天天看點

【任務筆記】JAVA程式設計實作對Tomcat上部署項目的監測和控制

其實這東西完全不用自己寫的,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" />
           

2.定義assembler bean,裝配bean MetadataMBeanInfoAssembler是唯一實作

<bean id="mBeanAssembler"
	class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
	<!-- 注入定義的annoJmxAttrSource -->
	<property name="attrSource" ref="annoJmxAttrSource" />
</bean>
           

3. 定義JMX的頁面通路方式,并設定通路端口号

<bean id="httpAdapServer" class="com.sun.jdmk.comm.HtmlAdaptorServer">
	<property name="port">
		<!-- 設定通路的端口号 -->
		<value>8099</value>
	</property>
</bean>
           

4.定義MBeanExporter bean, 也spring jmx最核心的類

<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>
           

這樣spring的步驟就配置完成了。這時候隻需要簡單調用一下,我寫了個action,提供開啟、關閉的方法,并通過struts處理操作

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;
	}
    
}
           

struts2的配置就比較簡單了

<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>
           

index.jsp頁面就兩個button和一個現實資訊的struts标簽

啟動之後看一下效果:(因為操作界面在localhost:8099,是以我加了個跳轉)

【任務筆記】JAVA程式設計實作對Tomcat上部署項目的監測和控制

操作界面裡可以看到WEBModule。因為工作空間是新換的,是以隻有一個用于測試的AAA和目前的Jmx

【任務筆記】JAVA程式設計實作對Tomcat上部署項目的監測和控制

點選進入AAA之後在最下面能看到開啟和關閉程序的按鈕:

【任務筆記】JAVA程式設計實作對Tomcat上部署項目的監測和控制

點選關閉之後,在位址欄通路AAA的項目就會顯示通路失敗,再點選開啟又可以通路到了。說明Jmx運作成功了。

問題:這個有一點不好是隻能監測到目前tomcat裡的web項目,沒有部署到tomcat中的項目和java項目就不能被監測到了。需求要求的是多個jvm,什麼類型都有的,比這個要苛刻些,是以這個版本被淘汰鳥。。。

關于脫離tomcat直接監測系統服務并進行處理的方法,正在做啊。。。

論壇裡也發了求助貼,隻不過還沒人鳥我。。。【請點選檢視→】http://bbs.csdn.net/topics/390715823