2012-03-06 40 views
5

Tomcat文檔(http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)的Tomcat的context.xml更新,但不應該

只有一個上下文文件不存在在 /META-INF/context.xml中的應用程序文件中,應用程序中的應用程序爲 $ CATALINA_BASE/conf/[enginename]/[hostname] /。如果Web 應用程序打包爲WAR,則將/META-INF/context.xml複製到$ CATALINA_BASE/conf/[enginename]/[hostname] /並將 複製到 以匹配應用程序的上下文路徑。 一旦這個文件存在,如果新的/META-INF/context.xml中的新WAR被置於主機的appBase中,它將不會被替換爲 。

粗體文本很清楚。但我通知並非如此。 (我需要的正是這種行爲)

通過以下步驟:

  1. aaa.war與context.xml中納入META-INF
  2. 副本的webapps。 tomcat部署。通過改變META-INF/context.xml的
  3. 副本的webapps
  4. 文件conf\Catalina\localhost\aaa.xml文件conf\Catalina\localhost\aaa.xml OK
  5. 變化aaa.war改變!

出了什麼問題?它是一個錯誤還是隱藏的功能?

背景 - 我想解決的問題:

獨立於配置的構建和安裝。我種植戰爭文件。客戶端使用他自己的設置來配置他的Tomcat。當我發佈新版本時,我只是在沒有配置的情況下交付戰爭,部署時將使用客戶端特定的配置。

通過文檔,最好的地方是context.xml但是如果它每次被覆蓋,根本沒有意義。 (我爲什麼要使用JNDI和這樣的事情,如果新的交付創建已更改的集結時間的東西是不是一個很大的優勢配置?)

環境:Windows下,Tomcat 6.0.33

+0

相似問題:http://stackoverflow.com/questions/4158468/tomcat-context-management – takacsot 2012-03-06 18:26:32

+0

已在本網站提出的答案:http://stackoverflow.com/questions/7142365/how-to-provide-a -context配置換一個-web的應用程序下的Tomcat – takacsot 2012-03-06 18:31:15

回答

6

我已經遇到同樣的問題,文件至少不夠,如果不是直接誤導。

問題是,如果您將已部署的WAR文件的新版本複製到webapps目錄,Tomcat將不會重新部署現有應用程序,而是取消部署舊應用程序,然後部署新應用程序。這種差異可能首先看起來並不重要,但問題是在取消部署舊應用程序時,conf/Catalina/localhost中的任何上下文文件也會被刪除。然後,在部署新應用程序的過程中,當前WAR文件中的新上下文文件將被複制到conf/Catalina/localhost。

我發現的唯一可行的解​​決方案不是將新應用程序部署爲WAR文件,而是替換或覆蓋擴展的目錄,例如,不要將aaa.war複製到webapps /,而是將aaa.war直接解壓到webapps/aaa /中。

相關問題