web程序在线更新方案

应用情景:开发了一个java web程序,这个程序被部署在多个客户的服务器上,但是这个程序在部署以后可能还存在bug或者功能上的调整,这样为了不需要一个客户一个客户的去更新他们的程序,想提供一个,更新服务器,将程序放在更新服务器上,然后客户通过它本地部署了的web程序直接下载更新程序,然后进行本地服务器程序的更新。
存在问题:
由于涉及操作系统安全性问题,如果程序在运行着,这样的更新,是不允许的,这样只有先将服务器停了然后才能更新,更新主要是实现程序文件的复制和删除。

考虑解决方案:
1、我们使用tomcat做服务器,我想通过两个tomcat来进行更新操作,一个是web程序的服务器,一个是更新服务器,我通过jsp或者servlet,来启动或者关闭tomcat,但是,当我通过web程序所在服务器来启动另一个tomcat的时候,发现启动的还是原来的tomcat,就算把另一个tomcat的JRE路径重设也没有用,这个方案,没法实现。

2、通过tomcat调用一个应用程序。这样我专门做了一个java application,并且将它打成
.exe文件,手动调用启动.exe文件实现文件复制、删除都没有问题,但是一旦通过servlet来进行调用,应用程序,可以调用,但是,却不能实现文件复制操作了。由于这样的调试很不方便,我想问一下,这可能是什么问题呢?

大家碰到这样的需求,是通过什么方式来解决的呢?

没人有过这样的需求吗?
有做过的出来指点一下?

tomcat运行的时候不能更新文件吗?我觉得没这种问题啊,Jsp,class和jar都可以。只不过class和jar更新后要重启tomcat。

tomcat本身没有问题,但是如果你要覆盖的是某个正在使用的文件,由于操作系统安全性的原因,操作体系不让你覆盖的,这个问题是由于操作系统引起 的,不过没有人做过类似的更新程序吗?

自动更新正在运行的应用是有问题的,如果应用正在运行重要的业务,你的程序很霸道的把tomcat给重启了,客户还不要疯掉.所以最好是你给客户一个升级的页面,需要升级的时候让客户主动发起,而不是你们很霸道的去做这些事情.或者是在tomcat每次重新启动的时候自动进行升级.
[该贴被greentree于2009-05-22 17:22修改过]
[该贴被greentree于2009-05-22 17:23修改过]

程序更新还是需要人工干预的,并不是我们给他更新,我们会在他本地服务器加一个更新标志,告诉他程序有更新,然后,本地管理员会在恰当的时间,点击更新按钮,然后下载更新程序,然后进行更新操作,并不是我们有需要更新的程序就主动推给他的本地服务器,在更新这个过程中,还是有他本地的一点人工干预的