I plan on going with a simple incremental patcher. It starts off with 0.patch to 9999.patch or more. The client would store the last .patch increment in a .dat file to determine the next increment. So if the last patch was 99 the client would know to ask if patch 100 exists and then it repeats this after patch 100 has downloaded. If the user has 0.patch and the newest patch is 100.patch then the server knows.. "we need to get patches 0-100 for this user from the file database."
In the .patch file you'd have a list of md5 checksums for all the files for validation so every time the client starts the updater you'd check the validation of the last .patch and make sure the files are all there otherwise you redownload that patch. Sorry if this is confusing you.
1. Download patch 99
2. Install patch 99
3. New patch 100 found
4. Scan patch 99 md5 checksums if fail goto step 1
6. Download patch 100.
7. Install patch 100.
8. New patch 101 found
9. Scan patch 100 md5 checksums if fail goto step 6
I like this approach to updating very much because its simple and most users will know what is going on.
Unfortunately mine is in C#

but the same idea can still be applied to java.