Better solution for long-running operations is asynchronous calls, with some kind of push solution ( RichFaces has the push component too ). Each long-running connection takes a lot of server resources. Many of firewall and proxy solutions break inactive connections, as you can see.
If you ever want to keep connection active, you can write your own filter for this purpose. That filter have to be first in the filter chain and should start separate thread which will send keep-alive messages every few seconds.
Because HTTP response headers, including content type and status code, have to be sent before a response body, this filter should send they itself and block any future attempts to change response parameters.
There are some other requirements for the such solution. Using asynchronous processing looks even simplest.