<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    學習probe的一點總結和應用

    大家在看文章之前先幫我看個問題(已解決 詳細):
    reload幾次之后tomcat就掛了,我說的掛了,是指java進程占了CPU的幾乎全部,整個電腦像死機一樣,狂慢。
    一年半前的一個項目也是使用的struts,hibernate,spring,沒有這個現象,記不起是從什么時候開始的了。
    以前也就忍了,但現在給客戶做了一個tomcat的管理工具(因為需要和項目中的一些內容結合在一起所以單獨做的),發布幾次tomcat就掛了,導致這個工具意義變的不大了。


    對tomcat進行管理

    ??? 研究了一下probe,了解到了一些基本的知識,現在準備,自己做tomcat的管理了。我是說這個項目中需要的對tomcat的那些管理功能,并不是完整的管理。
    ??? tomcat里對容器資源是層層管理的,Servlet由Wrapper管理,Wrapper之上是Context(對應一個application, server.xml里的一個Context配置),再上是Host,再上是Engine。到了Host使用findChildren可以獲取所有的 Context。Wrapper,Context,Host,Engine,都是繼承Container的接口,tomcat里的實現類 (StandardXXX),又都是繼承抽象類ContainerBase的,而ContainerBase又實現了Container, Lifecycle, Pipeline, MBeanRegistration, Serializable這些接口,所以當你獲取到這些容器類的實例后可以根據你的需要將之轉換為上述這些類型,進而獲取其他的相關信息和執行特定的操作。具體情況可以參考
    http://zhangjunhd.blog.51cto.com/113473/19865
    http://tomcat.apache.org/tomcat-5.5-doc/architecture/index.html
    http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/index.html

    ??? 要獲取這些容器實例,一個方法是獲取到Wrapper,然后進而獲取其上級容器。就現在我了解到的情況,將一個servlet實現 org.apache.catalina.ContainerServlet接口就可以獲取到一個 org.apache.catalina.Wrapper對象了,其他的方法我還不知道,我想應該存在一些更直接的獲取Host對象之類的方法,抽時間看看tomcat本身的管理功能的代碼。
    ??? 為了利用起原來的框架,并且納入對tomcat信息的管理,我現在分別做了兩個處理:

    1. 給Action注入Wrapper對象。
      我現在的策略是寫一個TomcatManagerServlet實現ContainerServlet,獲取Wrapper,然后將之保存到request的attribute里,然后forward到當前管理系統框架下的相應的action里。
      具體的方法是:在web.xml里配置這個servelt,并且指明所有的*.d會到這個servlet里來,然后到了這個servlet里后保存 Wrapper,然后forward到request.getRequestURI()+"o"。這樣原來的頁面里只要把鏈接地址從xxx.do改為 xxx.d就可以了。本來以為這個方法滿好的,不過如果不是.do的請求就玩不起來了。現在覺著應該是在原有的鏈接之前加上一個額外路徑更合適些,比如原來是/xxx/yyy.do,現在寫成/tomcatManager/xxx/yyy.do,然后在TomcatManagerServlet里去除路徑中的/tomcatManager再進行forward。這樣下面的jsonrpc的servlet也不用修改了,但jsonrpc的前臺要修改。終極一點是寫一個servlet處理所有的請求,如果路徑中含有/tomcatManager或者參數中含有tomcatManager,就給request里添加Wrapper對象。
    2. 給jsonrpc調用的對象注入Wrapper。
      上面這個方法其實我還沒真正用,因為實際開發的時候我是使用ajax來操作的。方法類似,首先還是要把jsonrpc的servlet實現ContainerServlet接口,獲取Wrapper,存入request的 attribute。如果被調用的方法定義了request參數,那么就可以從中獲取Wrapper對象了。但這樣比較繁瑣,我寫了一個 WebServerManager(今后會抽象為接口),定義了public void setWrapper(Wrapper wrapper)方法,然后寫了一個jsonrpc的callback,并注冊給jsonrpc,在callback里將Wrapper注入給 WebServerManager。這樣WebServerManager就更通用和簡潔一些了。
      ?
      上面只是說了tomcat的Container的基本內容,以及如何將獲取Wrapper進而獲取整個Container的方法。另外和我們自己的基礎代碼比較相關,所以你若要具體了解如何使用這些 Container對tomcat進行操作可以去查看probe的 org.jstripe.tomcat.probe.Tomcat55ContainerAdaptor及其父類和 org.jstripe.tomcat.probe.tools.ApplicationUtils,我覺著這兩個類比較基礎。理解了這兩個類,就可以方便的進一步了解了。

    posted on 2008-04-11 15:32 一農 閱讀(2081) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    公告

    南京 java輔導班 約等于免費 詳見yuqiaotech.com

    導航

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(10)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一本色道久久88亚洲综合| 日韩免费视频网站| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲av成人中文无码专区| 在线观看免费高清视频| 97se亚洲国产综合自在线| 韩国免费一级成人毛片| 亚洲中文字幕无码mv| 毛片免费全部播放一级| 亚洲欧美日本韩国| 免费一级黄色毛片| 全部在线播放免费毛片| 亚洲一区AV无码少妇电影☆| eeuss影院ss奇兵免费com| 亚洲欧洲日产国码av系列天堂| 免费的全黄一级录像带| 亚洲黄色网站视频| 日韩免费三级电影| 免费无码又爽又黄又刺激网站| 国外亚洲成AV人片在线观看| 国产婷婷成人久久Av免费高清| 精品日韩亚洲AV无码| 黄色片在线免费观看 | 18女人腿打开无遮掩免费| 亚洲色偷偷偷网站色偷一区| 国产在线观看麻豆91精品免费 | 亚洲女人被黑人巨大进入| 免费网站观看WWW在线观看| 亚洲男人的天堂在线播放| 99久久免费精品国产72精品九九| 国产精品亚洲色婷婷99久久精品| 亚洲精品无码永久在线观看| 久久久国产精品福利免费| 亚洲天堂2016| 亚洲无码视频在线| 免费能直接在线观看黄的视频 | 亚洲综合色丁香婷婷六月图片 | av大片在线无码免费| 日本黄页网址在线看免费不卡| 亚洲A∨无码无在线观看| 四虎成人免费网址在线|