Eliminate Submission

David Lloyd david.lloyd at redhat.com
Mon Feb 4 21:12:41 UTC 2019


Why not return CompletionStage<Void> from cancel?  In other words...
what would it mean if it returns FALSE but there was no exceptional
completion?

On Mon, Feb 4, 2019 at 2:57 PM Douglas Surber <douglas.surber at oracle.com> wrote:
>
> I've never been happy with Submission but it seemed necessary. After thinking about it off and on for a couple of years it occurred to me that CompletionStage does not declare cancel. So I propose that ADBA define a new interface that is an extension to CompletionStage and that declares cancel.
>
> Implementing this shouldn't be hard. Extend CompletableFuture and add cancel() which would just do whatever is necessary to cancel the Operation. I don't think any interaction with the CompletableFuture itself would be necessary.
>
> Every use of Submission is the same or simpler with CancelableCompletionStage.
>
> op.submit();                                                    no change
> CompletionStage cs = op.submit().getCompletionStage();          remove call to getCompletionStage();
> CompleteableFuture cf = op.submit()
>                                 .getCompletionStage()
>                                 .toCompleteableFuture();        remove call to getCompletionStage();
> Submission s = op.submit();                                     replace Submission with CancelableCompletionStage
>
> If you can see any problems with this let me know.
>
> Douglas
>
> package jdk.incubator.sql2;
>
> /**
>  * The result of submitting an {@link Operation}. This extension to
>  * java.util.concurrent.CompletionStage adds a method {@code cancel}. Calling
>  * this method attempts to prevent or abort execution of the Operation that
>  * created this CancelableCompletionStage. This is in contrast to the {@code cancel(boolean)}
>  * method declared by java.util.concurrent.CompletableFuture which does not
>  * attempt to cancel the task that produces its result. As the signatures are
>  * different the two methods do not interfere with one another.
>  *
>  * @param <T> The type of the result of the {@link Operation} that created this
>  * {@code CancelableCompletionStage}
>  */
> public interface CancelableCompletionStage<T> extends java.util.concurrent.CompletionStage {
>
>   /**
>    * Request that the {@link Operation} not be executed or that its execution be
>    * aborted if already begun. This is a best effort action and may not succeed
>    * in preventing or aborting the execution. This method does not block.
>    *
>    * If execution is prevented the Operation is completed exceptionally with
>    * SkippedSqlException. If the Operation is aborted it is completed
>    * exceptionally with SqlException.
>    *
>    * @return a {@link java.util.concurrent.CompletionStage} that has the value
>    * true if the {@link Operation} is canceled.
>    */
>   public CompletionStage<Boolean> cancel();
>
> }
>


-- 
- DML


More information about the jdbc-spec-discuss mailing list