Regarding the handling of Delegated Tasks, the Java documentation for SSLEngine has this to say (in bold, in the last line of the quoted para):
For any operation which may potentially block, the SSLEngine will create a Runnable delegated task. When SSLEngineResult indicates that a delegated task result is needed, the application must call getDelegatedTask() to obtain an outstanding delegated task and call its run() method (possibly using a different thread depending on the compute strategy). The application should continue obtaining delegated tasks until no more exist, and try the original operation again.
But why "try the original operation again", since a delegated task isn't an exception such as an overflow or an underflow?
Even this sample from Oracle doesn't retry the original operation (please see the call to runDelegatedTasks()), nor mentions anything about retrying -- not sure if this is because it's an incomplete sample, only illustrating other aspects of the API.