Class AbstractListenerWriteProcessor<T>

  • Type Parameters:
    T - the type of element signaled to the Subscriber
    All Implemented Interfaces:
    org.reactivestreams.Processor<T,​Void>, org.reactivestreams.Publisher<Void>, org.reactivestreams.Subscriber<T>
    Direct Known Subclasses:
    AbstractListenerWebSocketSession.WebSocketSendProcessor

    public abstract class AbstractListenerWriteProcessor<T>
    extends Object
    implements org.reactivestreams.Processor<T,​Void>
    Abstract base class for Processor implementations that bridge between event-listener write APIs and Reactive Streams.

    Specifically a base class for writing to the HTTP response body with Servlet 3.1 non-blocking I/O and Undertow XNIO as well for writing WebSocket messages through the Java WebSocket API (JSR-356), Jetty, and Undertow.

    Since:
    5.0
    Author:
    Arjen Poutsma, Violeta Georgieva, Rossen Stoyanchev
    • Field Summary

      Fields 
      Modifier and TypeFieldDescription
      protected static LogrsWriteLogger
      Special logger for debugging Reactive Streams signals.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethodDescription
      voidcancel()
      Invoked during an error or completion callback from the underlying container to cancel the upstream subscription.
      protected voiddataReceived​(T data)
      Template method invoked after a data item to write is received via Subscriber.onNext(Object).
      protected abstract voiddiscardData​(T data)
      Invoked after any error (either from the upstream write Publisher, or from I/O operations to the underlying server) and cancellation to discard in-flight data that was in the process of being written when the error took place.
      StringgetLogPrefix()
      Get the configured log prefix.
      protected abstract booleanisDataEmpty​(T data)
      Whether the given data item has any content to write.
      protected abstract booleanisWritePossible()
      Whether writing is possible.
      voidonComplete()
      Completion signal from the upstream, write Publisher.
      voidonError​(Throwable ex)
      Error signal from the upstream, write Publisher.
      voidonNext​(T data) 
      voidonSubscribe​(org.reactivestreams.Subscription subscription) 
      voidonWritePossible()
      Invoked when writing is possible, either in the same thread after a check via isWritePossible(), or as a callback from the underlying container.
      voidsubscribe​(org.reactivestreams.Subscriber<? super Void> subscriber) 
      protected abstract booleanwrite​(T data)
      Write the given item.
      protected voidwritingComplete()
      Invoked after onComplete or onError notification.
      protected voidwritingFailed​(Throwable ex)
      Invoked when an I/O error occurs during a write.
      protected voidwritingPaused()
      Deprecated.
      originally introduced for Undertow to stop write notifications when no data is available, but deprecated as of as of 5.0.6 since constant switching on every requested item causes a significant slowdown.
    • Method Detail

      • onSubscribe

        public final void onSubscribe​(org.reactivestreams.Subscription subscription)
        Specified by:
        onSubscribe in interface org.reactivestreams.Subscriber<T>
      • onNext

        public final void onNext​(T data)
        Specified by:
        onNext in interface org.reactivestreams.Subscriber<T>
      • onError

        public final void onError​(Throwable ex)
        Error signal from the upstream, write Publisher. This is also used by sub-classes to delegate error notifications from the container.
        Specified by:
        onError in interface org.reactivestreams.Subscriber<T>
      • onComplete

        public final void onComplete()
        Completion signal from the upstream, write Publisher. This is also used by sub-classes to delegate completion notifications from the container.
        Specified by:
        onComplete in interface org.reactivestreams.Subscriber<T>
      • onWritePossible

        public final void onWritePossible()
        Invoked when writing is possible, either in the same thread after a check via isWritePossible(), or as a callback from the underlying container.
      • cancel

        public void cancel()
        Invoked during an error or completion callback from the underlying container to cancel the upstream subscription.
      • subscribe

        public final void subscribe​(org.reactivestreams.Subscriber<? super Void> subscriber)
        Specified by:
        subscribe in interface org.reactivestreams.Publisher<T>
      • isDataEmpty

        protected abstract boolean isDataEmpty​(T data)
        Whether the given data item has any content to write. If false the item is not written.
      • dataReceived

        protected void dataReceived​(T data)
        Template method invoked after a data item to write is received via Subscriber.onNext(Object). The default implementation saves the data item for writing once that is possible.
      • isWritePossible

        protected abstract boolean isWritePossible()
        Whether writing is possible.
      • write

        protected abstract boolean write​(T data)
                                  throws IOException
        Write the given item.

        Note: Sub-classes are responsible for releasing any data buffer associated with the item, once fully written, if pooled buffers apply to the underlying container.

        Parameters:
        data - the item to write
        Returns:
        true if the current data item was written completely and a new item requested, or false if it was written partially and we'll need more write callbacks before it is fully written
        Throws:
        IOException
      • writingPaused

        @Deprecated
        protected void writingPaused()
        Deprecated.
        originally introduced for Undertow to stop write notifications when no data is available, but deprecated as of as of 5.0.6 since constant switching on every requested item causes a significant slowdown.
        Invoked after the current data has been written and before requesting the next item from the upstream, write Publisher.

        The default implementation is a no-op.

      • writingComplete

        protected void writingComplete()
        Invoked after onComplete or onError notification.

        The default implementation is a no-op.

      • writingFailed

        protected void writingFailed​(Throwable ex)
        Invoked when an I/O error occurs during a write. Sub-classes may choose to ignore this if they know the underlying API will provide an error notification in a container thread.

        Defaults to no-op.

      • discardData

        protected abstract void discardData​(T data)
        Invoked after any error (either from the upstream write Publisher, or from I/O operations to the underlying server) and cancellation to discard in-flight data that was in the process of being written when the error took place.
        Parameters:
        data - the data to be released
        Since:
        5.0.11