2011-11-22 68 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)。 –