2011-07-15 65 views
14

一個非常簡單的問題。我有一個.war(〜40MB)文件在JBoss上運行。 什麼是部署的最佳實踐:戰爭文件是否應以分解格式部署?或不?Java webapp部署:爆炸還是不爆炸?

我問,因爲如果然後爆炸我已經更新我的屬性的選擇文件只要我選擇(而不必盡我更改屬性文件時,一場新的戰爭)。

但我不知道,如果部署在展開的格式戰爭是最好的做法。

請幫我意識到。 :)

+0

此外,誰決定將其稱爲'爆炸'而不是'提取'?當然,它更有趣,但是我們所有的人都應該叫它是什麼:)。 – bbarker

回答

8

修改爆炸內容肯定是更快,更有效,但一個考慮因素是審計和可追溯性。僅部署WAR文件並將其視爲「密封」的一個優點是,您所做的任何更改都必須在源代碼管理系統中捕獲。您當然不希望人們有能力在您的應用程序配置中更改他們所需的任何內容,而無需進行某種審計跟蹤。

Java EE分離關注點通常意味着WAR的開發人員與應用程序服務器的管理員不是同一個人。如果開發人員沒有直接訪問權限,那就意味着不瞭解應用程序的人們正在進行更改。我不是捍衛禁止開發者修改爆炸戰爭的極端心態,只是指出另一種可供您考慮的觀點。

+0

謝謝@duffymo。我會考慮的。不過,根據我的要求,到目前爲止,平衡正在傾向於爆炸。 – pavanlimo

+0

幾年後,我認爲這是更合適的問題答案。答案是 - 除非你確實需要,否則不會爆炸。 – pavanlimo

1

如果你需要在你的.war中更改配置,而無需重新部署,我寧願部署爆炸。否則,我寧願部署文件(然後jboss會將文件解壓縮到tmp/deploy/..

+1

但是,對於生產環境以分解格式進行部署是否「可以」? – pavanlimo

+2

是的,當然。許多其他出版商也這樣做(例如TeamCity,Hyperic HQ,...) – powerMicha

+0

感謝@powerMicha提供的信息。無論如何,你是否知道任何討論java web-app部署最佳實踐的文檔/文章? – pavanlimo

14

戰爭文件應該以分解格式部署嗎?或不?

這將取決於幾個因素:

  • 您將需要應用服務器管理員修改WAR文件的內容部署後?如果答案是肯定的,尤其是在涉及財產或配置文件的情況下,那麼你應該使用分解格式。這樣可以更輕鬆地對文件進行更改,而無需重新部署完整的WAR文件。
  • 您如何將變更傳播給生產?如果您不預編譯JSP文件,並且您打算通過將JSP文件複製到包含分解WAR文件的區域來部署更新版本的JSP,那麼顯然重新部署大型WAR文件不是一個最佳方案。但是,請注意這將取決於您的部署實踐。通常,更容易審計生產中的WAR文件是版本控制生成的版本的副本,並且具有WAR文件的單個散列。如果您部署增量更改,則會發現每個部署的文件都需要散列。
  • 您希望您的應用程序部署並可用多久?這一點很簡單,但有足夠的應用程序實例需要幾分鐘才能啓動,因爲應用程序服務器正在忙於爆炸WAR文件並重新創建必要的工件。如果服務器的行爲是在每次重新啓動應用程序服務器時分解WAR文件,則這可能會導致嚴重的停機時間。由於我不瞭解JBoss或特定版本的行爲,因此我建議您自行驗證,以確保您可以將停機時間限制在可接受的水平。
+0

這是相當詳細。謝謝Vineet。 – pavanlimo

+0

@ pavanlimo,不客氣。 –

0

所以你也可以改變性質,即使部署爲戰爭它得到反正爆炸......這都沒有區別。至少在開發環境中。

但是,如果你是在展開的格式生產部署,所以你可以改變屬性的文件是不是你需要部署後改變(生產)性能更大的問題?而不是你是否使用過戰爭。

+0

我無法清楚地理解您,但是如果您重新啓動服務器,則由於未變形發生在臨時位置,因此更改的屬性文件會被原始屬性文件替換。 – pavanlimo

+0

@pavanlimo我知道,我們在開發過程中在臨時位置更改了文件。我不確定你是否正在開發或生產。我的觀點是你應該看看你爲什麼要改變生產環境中的屬性(如果你是)。如果你在談論dev,它不重要,imho,但我更喜歡戰爭。 – NimChimpsky