<p>We've got a Java server application that runs on a number of computers, all connected to the Internet, some behind firewalls. We need to remotely update the JAR files and startup scripts from a central site, with no noticeable interruption to the app itself.</p>

<p>The process has to be unattended and foolproof (i.e. we can't afford to break the app due to untimely internet outages).</p>

<p>In the past we've used a variety of external scripts and utilities to handle similar tasks, but because they have their own dependencies, the result is harder to maintain and less portable. Before making something new, I want to get some input from the community.</p>

<p>Has anyone found a good solution for this already? Got any ideas or suggestions?</p>

<p><em>Just to clarify: This app is a server, but not for web applications (no webapp containers or WAR files here). It's just an autonomous Java program.</em></p>

I'd recommend Capistrano for multi-server deployment. While it is built for deploying Rails apps, I've seen it used successfully to deploy Java applications.
Link:
Capistrano 2.0 Not Just for Rails