A little launcher application checks the version on the main application, downloads a fresh JAR or files if needed, then launches the main application. (I don't think we had a way to download a new launcher!)
The main application reads records from the local staging file or database and writes them to the centralized database or uploads them to a centralized staging area or something.
Your upload & download might be FTP, sockets, database queries or whatever works for you.
One guy I knew wrote his own programming language so programs could be stored as plain text on a database plus an interpreter written in COBOL (!) just to get around the corporate software distribution mechanisms. He could deploy updates any time, the rest of us only on the corporate schedule. Sneaky devil.
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
I have figured out that sync'ing the application code is easy and can be done programmatically without much effort. I've gotten some thoughs on how to code for sync'omg the data from the scratch as well. However I am still feeling that sync'ing the data with a tool would be a little more productive for my devel team.