走自己的路

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

            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的方式吧?  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 丁青县| 公安县| 兴业县| 蓬溪县| 墨竹工卡县| 台中市| 湟中县| 上思县| 安塞县| 凤翔县| 西丰县| 策勒县| 黄平县| 新乡县| 玛多县| 霍邱县| 开化县| 汉沽区| 柘城县| 额敏县| 梅河口市| 东阿县| 吕梁市| 封丘县| 民丰县| 南开区| 崇仁县| 洞口县| 碌曲县| 榆中县| 阿克苏市| 正定县| 塔城市| 文化| 台南市| 聂荣县| 龙海市| 滦南县| 城口县| 盐城市| 新竹市|