IMHO , I don't see a issue with your approach as long as you keep one ExecutorCompletionService
instance which will used to submit multiple Callable Jobs.
in this approach, you will lose the running Job results when the server went down / crash . And you will be using the JVM memory to keep the Jobs live. Again it depends upon the volume of requests and number of Jobs would run in parallel and the time taken to complete the task.
if you dont requried to run all the request in parallel then for your use case , JMS would be the perfect fit . In order to avoid the request time out for long running process , we can place the job in JMS and in later you can consume the Job through JMSlistener (Message Listener / MDB )
and process one by one.