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.
The process has to be unattended and foolproof (i.e. we can't afford to break the app due to untimely internet outages).
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.
Has anyone found a good solution for this already? Got any ideas or suggestions? Thanks in advance.
EDIT: Thanks for the suggestions. We've already tried tools such as FTP, rsync, Maven and Ant. They work well for automating conventional server deployments and upgrades, but they are less convenient for updating prepackaged applications and embedded products (this server app is more like the latter). In this case, we would prefer that the entire Java application be self-contained, along with its updater. If that's not possible or not a good approach, we're still open to using build tools, scripts and download clients.
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.