org.springframework.http.server.reactive

Class AbstractListenerWriteFlushProcessor<T>

  • java.lang.Object
    • org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor<T>
  • Type Parameters:
    T - the type of element signaled to the Subscriber
    All Implemented Interfaces:
    org.reactivestreams.Processor<org.reactivestreams.Publisher<? extends T>,java.lang.Void>, org.reactivestreams.Publisher<java.lang.Void>, org.reactivestreams.Subscriber<org.reactivestreams.Publisher<? extends T>>


    public abstract class AbstractListenerWriteFlushProcessor<T>
    extends java.lang.Object
    implements org.reactivestreams.Processor<org.reactivestreams.Publisher<? extends T>,java.lang.Void>
    An alternative to AbstractListenerWriteProcessor but instead writing a Publisher<Publisher<T>> with flush boundaries enforces after the completion of each nested Publisher.
    Since:
    5.0
    Author:
    Arjen Poutsma, Violeta Georgieva, Rossen Stoyanchev
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected static Log rsWriteFlushLogger
      Special logger for debugging Reactive Streams signals.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method and Description
      protected void cancel()
      Invoked during an error or completion callback from the underlying container to cancel the upstream subscription.
      protected abstract org.reactivestreams.Processor<? super T,java.lang.Void> createWriteProcessor()
      Create a new processor for the current flush boundary.
      protected abstract void flush()
      Flush the output if ready, or otherwise isFlushPending() should return true after.
      protected void flushingFailed(java.lang.Throwable t)
      Invoked when an error happens while flushing.
      java.lang.String getLogPrefix()
      Create an instance with the given log prefix.
      protected abstract boolean isFlushPending()
      Whether flushing is pending.
      protected abstract boolean isWritePossible()
      Whether writing/flushing is possible.
      void onComplete()
      Completion signal from the upstream, write Publisher.
      void onError(java.lang.Throwable ex)
      Error signal from the upstream, write Publisher.
      protected void onFlushPossible()
      Invoked when flusing is possible, either in the same thread after a check via isWritePossible(), or as a callback from the underlying container.
      void onNext(org.reactivestreams.Publisher<? extends T> publisher) 
      void onSubscribe(org.reactivestreams.Subscription subscription) 
      void subscribe(org.reactivestreams.Subscriber<? super java.lang.Void> subscriber) 
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractListenerWriteFlushProcessor

        public AbstractListenerWriteFlushProcessor()
      • AbstractListenerWriteFlushProcessor

        public AbstractListenerWriteFlushProcessor(java.lang.String logPrefix)
        Create an instance with the given log prefix.
        Since:
        5.1
    • Method Detail

      • getLogPrefix

        public java.lang.String getLogPrefix()
        Create an instance with the given log prefix.
        Since:
        5.1
      • onSubscribe

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

        public final void onNext(org.reactivestreams.Publisher<? extends T> publisher)
        Specified by:
        onNext in interface org.reactivestreams.Subscriber<org.reactivestreams.Publisher<? extends T>>
      • onError

        public final void onError(java.lang.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<org.reactivestreams.Publisher<? extends 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<org.reactivestreams.Publisher<? extends T>>
      • onFlushPossible

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

        protected 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 java.lang.Void> subscriber)
        Specified by:
        subscribe in interface org.reactivestreams.Publisher<java.lang.Void>
      • createWriteProcessor

        protected abstract org.reactivestreams.Processor<? super T,java.lang.Void> createWriteProcessor()
        Create a new processor for the current flush boundary.
      • isWritePossible

        protected abstract boolean isWritePossible()
        Whether writing/flushing is possible.
      • flush

        protected abstract void flush()
                               throws java.io.IOException
        Flush the output if ready, or otherwise isFlushPending() should return true after.

        This is primarily for the Servlet non-blocking I/O API where flush cannot be called without a readyToWrite check.

        Throws:
        java.io.IOException
      • isFlushPending

        protected abstract boolean isFlushPending()
        Whether flushing is pending.

        This is primarily for the Servlet non-blocking I/O API where flush cannot be called without a readyToWrite check.

      • flushingFailed

        protected void flushingFailed(java.lang.Throwable t)
        Invoked when an error happens while flushing. 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.