jsr370-experts@jax-rs-spec.java.net

Proposal to drop non-blocking I/O from JAX-RS 2.1

From: Pavel Bucek <pavel.bucek_at_oracle.com>
Date: Mon, 3 Apr 2017 18:40:23 +0200

Dear EG members,

As you all know we have been hard at work trying to come up with an NIO
proposal based on Flows. In doing so, we have come to the conclusion
that this is indeed a really hard problem --lots of small details that
need double clicking! After some deliberation, we have come to the
conclusion that it is better to drop this feature from this dot release.
Here is the rationale for doing so:

- Working backwards from the officially committed Java EE 8 release date
- July 2017 - we need to start Public Review in the middle of April,
which means that at this point we don't have enough time to do a design,
implementation prototype and gather appropriate feedback.
- Current proposal is based on a Flow-like API, which would force us to
duplicate the JDK 9 Flow concept in the JAX-RS 2.1 API.
- We don't want to introduce "just another non-blocking API", which
might be deprecated very soon (when Java 9 is released).
- We need some time to work on "smaller issues", which would be most
likely not possible if we'll continue working on NIO.

*What does that mean for the current state of the API?*

We will remove Flow.* interfaces and its usage in existing APIs, which
means adjustments in SSE part of the spec. Also, we will be making at
least some improvement, more related to already introduced Reactive API
- support for returning CompletionStage from the resource method. It was
in our last version of the high level non-blocking API; CompletionStage
is basically a Mono - publisher of a single item. Resource method could
then look like:

@POST @Path("acceptProduceSource")
public CompletionStage<AnotherPOJO> echoNioEntity(POJO requestEntity) {

     // not blocking the thread, returning CompletionStage and doing the work
elsewhere. return ...;

}

This improvement will simplify use of the new JAX-RS 2.1 reactive client
API in a JAX-RS resource method. Note that this is already tracked as
https://java.net/jira/browse/JAX_RS_SPEC-546.

As always, any comments or suggestions are appreciated.

Thanks and regards,
Pavel & Santiago