2010年8月9日

使用Apache Ant控制Tomcat6 Context Reload

開發JSP/Servlet的Web Application時,有些設定的異動,例如修改web.xml或新增WEB-INF/classes底下的類別,需要重新啟動Context,才能讓新設定或程式可以運作。

在$CATALINA_HOME/conf/server.xml中,我們可以設定Context的reloadable="true",在此設定下,Servlet的class檔案更新時,Tomcat就會自動偵測到,並且執行Reload。只是在許多情況我們並無法預期Tomcat會幫我們完成Context Reload動作,當Reload發生時,我們可以看到Tomcat輸出如下訊息:

Aug 7, 2010 2:12:36 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started

舉例來說,當一個編譯好的Servlet class檔更新時,同時又有一個對此Servlet的網頁存取動作發生,這時候就會造成Reload過程發生錯誤。

想要由開發者自行控制Context Reload,可以使用Tomcat提供的manager,剛安裝好的Tomcat需要經過設定,才能獲得此功能,以下使用Tomcat6的設定為例說明。

編輯manager.xml,加入Context設定。
$CATALINA_HOME\conf\Catalina\localhost\manager.xml


編輯tomcat-users.xml,加入role/user設定。
$CATALINA_HOME\conf\tomcat-users.xml


打開 http://HOSTNAME:PORT/manager/html ,輸入剛才設定的使用者名稱及密碼,登入後可以看到Applications列表,並提供 Start Stop Reload Undeploy 四種動作。

接著,我們可以加入Tomcat Reload的Ant Target到專案的buile.xml設定中,我們可以讓一系列的發佈流程自動化,例如編譯、測試、佈署以及Tomcat Context Reload。


在設定中指定reload target對應類別org.apache.catalina.ant.ReloadTask,因此 ${CATALINA_HOME}/lib/catalina-ant.jar 也必須加入CLASSPATH。

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!