走自己的路

          路漫漫其修遠兮,吾將上下而求索

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks

          現在我們項目幾乎都是在servlet的init方法中初始化資源,在destroy方法里釋放資源。servlet的load on startup是有先后順序,但是沒有依賴關系,如果某個servlet初始化出現異常,不會終止剩下的servlet的初始化,這樣有時會使得web application正常啟動,但是卻部分可用,整個系統處于不穩定狀態。這應該是一種不推薦的做法。
          而servlet context listener是在所有servlet初始化之前被調用,同樣在所有servlet destroy之前被調用。更關鍵的是,如果在contextInitialized拋出runtime異常,剩余的listener和所有servlet都不會初始化,解決了web application非正常啟動的問題。

          以下情況可以使用servlet來初始化資源:

               整個系統只有一個servlet會在系統啟動時初始化資源
               Servlet初始化的資源是獨立的,不會影響整個系統的正常運行
               Servlet初始化失敗后,整個系統處于不可被訪問狀態
               Container的版本比較舊,不支持servlet2.3或者更新的版本

          posted on 2009-08-05 12:52 叱咤紅人 閱讀(1707) 評論(3)  編輯  收藏 所屬分類: JSP, Servlet and JSTL

          評論

          # re: 是用ServletContextListenser還是Servlet初始化資源 2009-08-06 09:25 隔葉黃鶯
          其實無所謂的。  回復  更多評論
            

          # re: 是用ServletContextListenser還是Servlet初始化資源[未登錄] 2009-08-06 10:16 boboism
          恩 在大部分情況下還是listeners比較好,啟動順序大部分都是在Servlet之前,但是聽說在WebSphere 8 上面好像是Servlet的初始化比listener早  回復  更多評論
            

          # re: 是用ServletContextListenser還是Servlet初始化資源 2009-08-06 11:43 ldd600
          @隔葉黃鶯
          還是有所謂的吧。有這樣一個case:
          servletOne parse配置
          servletTwo 啟動queue message listener

          現在servletOne啟動失敗,但是servletTwo啟動成功,這時它就會到queue里把消息收下來,但是處理肯定是會失敗的。

          解決方法:將message listener改為MDB, 將message listener改為用JMX啟動,這些解決方法都比較復雜。

          如果初始化失敗要求整個application都不能啟動起來,最好還是使用context listener的方式吧?  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 建湖县| 读书| 潼南县| 饶阳县| 柯坪县| 太白县| 吉木乃县| 柳江县| 曲松县| 洛阳市| 崇仁县| 望奎县| 清徐县| 岗巴县| 泰宁县| 新闻| 永吉县| 庄浪县| 新干县| 四子王旗| 彝良县| 锦州市| 邛崃市| 房山区| 土默特左旗| 崇明县| 凌云县| 普兰县| 甘孜县| 新疆| 洛宁县| 恩施市| 南乐县| 常熟市| 贡山| 邯郸市| 四川省| 昌乐县| 射阳县| 和静县| 延寿县|