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

Server-Sent Events API proposal​ - update

From: Pavel Bucek <pavel.bucek_at_oracle.com>
Date: Thu, 9 Feb 2017 22:22:29 +0100

Dear experts,

thanks for all the feedback you've provided on presented Server Sent
Events proposal.

Based on your feedback (and other inputs, most of them from Marek, the
original author of SSE proposal), we'd like to present another iteration.

*List of changes:*

- SseEventInput is gone.
     - We don't need to be able to receive events in blocking fashion.
If a user needs to do that, he still can - using a Deque and onEvent
consumer (and some synchronization).
- SseClientSubscriber is gone.
     - replaced by EventSource#subscribe(Consumer<InboundSseEvent>) and
other overloads.
- SseEventOuput is now SseEventSink (the opposite to SseEventSource).
- SseContext is now Sse (its not a context).
- Introduced SseSubscription (which will extend Flow.Subsription when we
can use Java SE 9).
- SseEventSink (used to be SseEventOutput) is now injectable - there is
no other way how to create it:

@GET @Path("events")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void itemEvents(@Context SseEventSink serverSink) {
     serverSink.onNext(sse.newEvent().data("welcome").build());
     broadcaster.subscribe(serverSink);
}

please note that the resource method now doesn't return injected
SseEventSink - it's more similar to the pattern used in async API and
users don't need to repeat "sseContext.newEventOutput();" and "return
eventOutput;".

All these changes are done in a single commit:
https://github.com/jax-rs/api/commit/459ddb615861959e4899b48d0b88498100308bcd

We also added couple of helper methods to create an outbound event:
https://github.com/jax-rs/api/commit/8a61f14b2797cfa22da1c0fdb1b5a321ca435c8b

Please let us know what you think.

Thanks and regards,
Pavel & Santiago