2011-11-22 65 views
0

我有一個nsis安裝腳本,它將.war文件複製到Tomcat webapps目錄中。如果Tomcat已經運行,它會注意到一個新的.war被放入webapps目錄並開始解壓縮它。然而,解壓縮發生在後臺,安裝程序認爲它已完成,因此它會提示用戶重新啓動。如果用戶現在選擇重新啓動,那麼在解壓.war期間,Tomcat將會中途中斷,並使webapp處於損壞狀態。.war重啓競爭條件的部署

我能想到的唯一解決方案是在安裝程序啓動時停止Tomcat服務(net stop tomcat6),以防止Tomcat解包.war。然後在重啓後,Tomcat服務將啓動,然後解壓。這似乎很髒,但因爲如果用戶選擇不立即重新啓動,它會使Tomcat服務停止(如果還有其他正在運行的Web應用程序,這可能是不受歡迎的)。

無論我採用哪種方式進行分片,Tomcat都應該認識到webapp沒有完全解壓並自行清理並重試。 Tomcat的bug?

+0

爲什麼安裝程序需要重新啓動盒子? – Joe

+0

@Joe它是需要重啓的更大安裝腳本的一部分。 –

回答

0

您可以poll the currently deployed list of applications並禁用重啓選項,直到您看到您的webapp可用。

如果你不喜歡通過Ant/manager應用程序進行通信,那麼有一個類似JMX鉤子的公平機會(我知道至少有一個類似的JBoss)。即使沒有一個可用的開箱即用,如果應該很容易編寫自己的。

+0

謝謝,我希望有一個解決方案不會超出我現有的安裝程序腳本(nsis)或添加額外的部署依賴關係(ant)。 –