空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          用 GlassFish v2 替換 Tomcat 5.x

          1. 背景

           

          用了很多年的Tomcat, 無論開發環境還是生產環境, 應該說, 大家對它還是基本滿意的.
          不過, 也不是一點問題沒有. 從開發人員的角度來說, Tomcat主要的缺點就是較弱的熱部署
          (hot deploy)能力. 修改一個Java類, 保存后, Tomcat會重新加載這個類, 但不久就要重
          新啟動Tomcat才能繼續開發. 在企業關鍵應用的場景下, 若發生急迫的程序缺陷更正, 讓眾多的用戶停止手頭的工作, 等待服務器重新啟動, 顯然十分不便.

           

          類似RubyOnRails的技術框架, 其方便之處就是腳本語言不要編譯, 保存后直接可以使用.
          Java社區顯然看到了這個問題, GlassFish v2 的熱部署能力就是其主要的一個受大家歡迎的
          特性. 這也是我們要用 GlassFish v2 替換 Tomcat 5.x 的主要理由.

           

          2. 使用環境

           

          本文假設你使用下面所述的開發環境.
          (1) JDK 1.5 或 1.6
          (2) Eclipse IDE for Java EE Developers (3.3.1.1 M20071023-1652)
          (3) 使用 com.sysdeo.eclipse.tomcat_3.2.1 插件

           

          如果你沒有使用 Eclipse 3.3.1.1 Java EE 版本, 而是正在使用其他版本, 也不影響本文所述的所有操作和效果, 只是不能借助Eclipse 啟動和停止 GlassFish v2, 只能自己通過命令行進行操作.

           

          有關用 Eclipse 3.3.1.1 Java EE 版本操作 GlassFish v2 的詳細說明, 請參見 Eclipse 3.3 and GlassFish Java EE 5 integration.

           

          3. 下載并安裝 GlassFish v2

           

          這方面的資料已經很容易從網上找到, 比較好的文章如下:
          (1) 在Glassfish上部署web應用
          (2) Glassfish初試
          (3) 從tomcat到glashfish(glassfish的安裝啟動筆記)

           

          4. 創建 Tomcat 項目

           

          相信你一定也知道如何創建 Tomcat 項目. 本文假設你創建的 Tomcat 項目:
          (1) 位于 D:/Sample 目錄.
          (2) Context name 為 Sample.

           

          其他采用默認設置.

           

          5. 為測試 GlassFish v2 的熱部署能力, 創建首頁JSP和Servlet Java類.

           

          第1步: 在根目錄中創建 index.jsp 文件

           

          第2步: 在 WEB-INF\src 中, 創建一個簡單的 servlet 類 SampleServlet.java,

           

          第3步: 配置web.xml文件.

           

          完整的Sample項目, 請參見附件.

           

          6. 什么是 GlassFish v2 的目錄部署?

           

          用Tomcat開發時, JSP/HTML/JS/CSS 等文件, 都是修改后保存, 刷新瀏覽器就可以使用.
          為了使 GlassFish v2 達到同樣的效果, 需要使用其目錄部署(directory deployment)特性.

          這個特性不太容易找, 因為使用象GlassFish這樣的全功能應用服務器的開發人員,習慣了
          "編輯、編譯、部署、運行"這樣的步驟. 一開始, 我按照
          Eclipse 3.3 and GlassFish Java EE 5 integration.
          一文的指引, 發現修改JSP文件后,仍然要經歷上面的部署過程. 雖然Eclipse會通過自動檢測
          文件版本的變化, 觸發Ant任務實現部署, 但仍然很浪費時間. 我們需要找到跳過"部署"的方法.
          在GlassFish官方論壇上發了幾個帖子, 答復者的回帖沒有起到什么作用, 但通過搜索論壇基本
          知道這個問題已經得到了解決.

           

          下面的文章引導我朝著正確的方向前進了一大步(非常感謝該文作者):
          GlassFish Auto Deployment and Hot Deployment

           

          關于目錄部署的詳細說明,參見:
          Sun Java System Application Server Platform Edition 9.0 Application Deployment Guide
          Chapter 1 中 Deployment for Development 一節

           

          7. GlassFish v2 的目錄部署實戰

           

          第1步: 啟動 GlassFish v2.

           

          第2步: 部署 Sample 項目到 GlassFish v2, DOS窗口下執行命令:

          Java代碼 復制代碼
          1. GLASS_FISH_HOME/bin/asadmin deploydir D:/Sample  
           

          其中 GLASS_FISH_HOME 是 GlassFish 的安裝目錄, 命令執行完畢后,可以看到成功部署信息.

           

          第3步: 打開瀏覽器, 輸入http://localhost:8080/Sample/index.jsp, 看到頁面內容.

           

          第4步: 打開瀏覽器, 輸入 http://localhost:8080/Sample/servlet/Sample, 看到頁面內容.

           

          8. 體驗 GlassFish v2 的熱部署特性

           

          第1步: 修改 index.jsp 文件內容, 保存后, 刷新瀏覽器, 你就能馬上看到新的內容.
          ( http://localhost:8080/Sample/index.jsp)

           

          第2步: 修改 SampleServlet.java, 保存后, 等待片刻, Eclipse 已經自動編譯這個類, 但 GlassFish v2 控制臺中沒有任何提示, 刷新瀏覽器, 看不到新的內容.
          ( http://localhost:8080/Sample/servlet/Sample)

           

          第3步: 現在, 在 Sample 項目根目錄中創建文件名為".reload"的文件(內容為空).

           

          第4步: 觀察GlassFish v2 控制臺, 可以看到重新加載信息,刷新瀏覽器


          (http://localhost:8080/Sample/servlet/Sample)

          到了新的內容.

           

          第5步: 再次修改 SampleServlet.java 的內容, 保存后, 遇到和第2步同樣的問題.

           

          第6步: 再次打開 .reload 文件, 輸入任意內容, 然后保存.

           

          第7步: 再次出現與第4步同樣的效果.

           

          總結上述操作, GlassFish v2 對于非Java類的加載, 達到了和Tomcat同樣的效果, 但Java類的
          加載, 需要通過 .reload 文件的時間戳來控制. 這種做法對開發有好處, 在調試改錯時, 可以修改
          多個 Java 類文件, 然后讓 GlassFish v2 一次加載全部修過的類.

           

          9. 自動化 .reload 文件時間戳刷新

           

          上一節中, 手工打開 .reload 文件, 通過修改其內容刷新其時間戳, 這種做法太麻煩.

          在 unix/linux 平臺下, 通過命令 touch 刷新 .reload 文件的時間戳. 在 Window 平臺, 也有
          人實現了 touch. 我在 CodeProject 網站找到一個 touch.exe:
          Touch for Windows - The Code Project - Free Tools,很好用, 并且可以集成到 Eclipse 的工具條按鈕中來執行 touch 命令(touch.exe 已經包括在附件中).

           

          第1步: 拷貝下載的 touch.exe 到 Sample 項目根目錄.

           

          第2步: 在 Eclipse 下, 選擇 Run > External Tools > Open External Tools Dialog.

           

          第3步: 選中左側 Program 節點, 右擊, 選擇New菜單項.

           

          第4步: 在右側出現的對話框中, 填入下面的內容


          Name: SampleTouch
          Main[頁面]
          Localtion: ${workspace_loc:/Sample/touch.exe}
          Working Directory: ${workspace_loc:/Sample}
          Arguments: .reload
          Common[頁面]
          Display in favorites menu: 選中External Tools

          保存后, 你可以在Eclipse的Run工具條按鈕中看到新創建的項.

           

          10. 結語

           

          用 GlassFish v2 可以完全替換 Tomcat 5.x, 在開發中它保留了 Tomcat 好的特性的
          同時,給我們帶來了強壯的熱部署功能, 顯著地提高了開發效率.

           

          感謝GlassFish v2, 感謝為之付出心血的Java社區成員, 是他們讓我們感受到了技術
          進步的喜悅.

          • Sample.rar (23.6 KB)
          • 描述: 測試用Tomcat項目
          • 下載次數: 353
          posted on 2008-06-26 09:50 蘆葦 閱讀(520) 評論(0)  編輯  收藏 所屬分類: IDE 、JAVA
          主站蜘蛛池模板: 甘南县| 四平市| 永胜县| 方正县| 奈曼旗| 黄平县| 松滋市| 延安市| 广昌县| 嵩明县| 贵南县| 长宁区| 南皮县| 嘉定区| 辽阳市| 禹城市| 菏泽市| 揭西县| 新乡县| 蚌埠市| 调兵山市| 资溪县| 营口市| 南郑县| 普兰县| 泸溪县| 东阳市| 永昌县| 铜鼓县| 太保市| 揭东县| 扎赉特旗| 靖西县| 余江县| 长寿区| 鄂托克前旗| 丰都县| 贺州市| 陇西县| 邯郸市| 黄山市|