tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier>
Subject Re: Balance and sync data
Date Thu, 18 Sep 2008 21:31:10 GMT
Martin Spinassi wrote:


I re-read the thread from the beginning, and as I understand it you have 
- clients that upload files, most of then images
- clients that download these same images
- and you would like a system that handles this and duplicates the 
images to 2 or more "synchronised" places, so as to have redundancy and 

Let me describe a part of an application which I designed, and see if 
this inspires you.  This was under Apache, but it should be possible 
also under Tomcat.

I wanted to provide clients with a hierarchical folder hierarchy where 
they could upload their documents via a simple drag and drop, but I did 
not want to have to scan the whole structure regularly to check if 
anything had been uploaded there.
Plus, I wanted to know who uploaded what when, and wanted to do 
something to those files after they uploaded them.
Plus, I am lazy and not such a big-shot programmer, so if something 
already exists and works well, I prefer to use it than to re-develop my 
own buggy version.

At the core, for allowing clients to upload the (in my case) documents, 
there is DAV (which is also implemented under Tomcat).
DAV, allows the client to see a folder structure on the server, and 
drag-drop files in it, just like to a remote network drive. It even 
works in Windows with the Explorer (not IE, the other one), it's called 
"web folders" there.
But once the file is dropped somewhere, you don't know anymore who put 
it there.  Plus, since they can drop a file anywhere in the folder 
hierarchy, you have to explore the whole hierarchy regularly on the 
server to find the files they've dropped, if any.

Except that, at the base, DAV is just an HTTP protocol extension. It 
makes requests through URLs, and such requests get processed by a HTTP 
server.  The requests just use different "command verbs" than GET and 
POST.  For a while, I was thinking of creating my own handlers for those 
verbs (PUT, MKCOL, OPTONS,..), or taking the DAV code, and implement my 
own additional desired functionality into it.
Then I realised that DAV being a HTTP protocol extension, you can do 
HTTP authentication, and you can use filters around it.  That's true in 
Apache, and also in Tomcat.

So let's say that when a user wants to drop a file via DAV, you 
intercept the HTTP requests, authenticate the request, and save that 
Next, your filter gets to run. It sees where the user is going to drop 
the file (the URL of the PUT), and remembers it.  Then it lets the 
request go through DAV (the actual file upload into a folder somewhere), 
DAB being the filtered application here. Then when the DAV response 
comes back through the filter, the filter takes the uploaded file from 
where it is now (it knows the exact folder), and copies it to another 
place (or does whatever you want with it). In addition, the filter also 
knows who did it and other details, so it can pass this information 
somewhere to be saved (into a database record ?).

I personally find this more elegant than
a) re-inventing the wheel : to upload/download files from a HTTP server, 
is something for which DAV was designed, and the developer spent a lot 
of time making it work reliably
b) triggering external syncs in real-time
3) scanning the file structure later to sync

DAV also allows drag-and-drop downloads, and they also go through HTTP 

You don't need to change DAV in any way, you just "wrap" it in filters 
that do what you want around it.


To start a new topic, e-mail:
To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message