Confused about RowPublisherOperation usage in ADBA

Frank Lyaruu frank at
Mon Apr 22 09:09:05 UTC 2019

Hey all,

I'm trying to create a reactive-backpressure demo using ADBA.
It pretty much got it working with pgadba, but I'm a little bit confused
about the way I'm supposed to be using the API:

In RowPublisherOperation:

public RowPublisherOperation<T> subscribe(Flow.Subscriber<? super
Result.RowColumn> subscriber,CompletionStage<? extends T> result);

What is the purpose of the 'result' CompletionStage? I'm getting the
results through the subscriber. When the query completes, the subscriber
gets a completed signal, so I don't see the use of it.

If I pass an empty new CompletableFuture<>() to it, and ignore it after
that it seems to work but I'm unsure if that is correct and it won't be
leaking something somewhere.

Similarly, can I safely ignore the completionstage of the submission? It
seems I've got all the information I need from the subscriber stream.

        RowProcessor rp = new RowProcessor();
>         final CompletableFuture<String> completableFuture =
> session.<String>rowPublisherOperation("select title from film")
>                     .subscribe(rp, result)
>                     .submit()
>                     .getCompletionStage()
>                     .toCompletableFuture();

Moreover, if I want to cancel this stream, do I need to cancel both the
subscriber and the submission? Or is cancelling the subscriber enough? The
mix of Flow and CompletionStages makes my head hurt a bit.

More information about the jdbc-spec-discuss mailing list