Details
-
Enhancement
-
Resolution: Obsolete
-
Major
-
5.2.5.Final
-
None
-
Low
Description
When using an async transport and async marshalling, an executor is used to process the marshalling task in a separate thread and the caller's thread is allowed to return immediately.
When the executor's queue fills and the queue cannot accept any more tasks, it throws a RejectedExecutionException, causing a very bad user/developer experience. A more correct approach to this is to catch the RejectedExecutionException, block and retry the task submission.
The end result is that, in the degenerate case (when the executor queue is full) instead of throwing exceptions, those invocations will perform slightly slower.