Class ReplyManagerSupport

java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.component.jms.reply.ReplyManagerSupport
All Implemented Interfaces:
AutoCloseable, ReplyManager, org.apache.camel.Service, org.apache.camel.ShutdownableService, org.apache.camel.StatefulService, org.apache.camel.SuspendableService, org.springframework.jms.listener.SessionAwareMessageListener
Direct Known Subclasses:
QueueReplyManager, TemporaryQueueReplyManager

public abstract class ReplyManagerSupport extends org.apache.camel.support.service.ServiceSupport implements ReplyManager
Base class for ReplyManager implementations.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final org.apache.camel.CamelContext
     
    protected org.apache.camel.component.jms.reply.CorrelationTimeoutMap
     
    protected String
     
    protected JmsEndpoint
     
    protected ExecutorService
     
    protected org.springframework.jms.listener.AbstractMessageListenerContainer
     
    protected final org.slf4j.Logger
     
    protected jakarta.jms.Destination
     
    protected final CountDownLatch
     
    protected final long
     
     

    Fields inherited from class org.apache.camel.support.service.BaseService

    BUILT, FAILED, INITIALIZED, INITIALIZING, lock, NEW, SHUTDOWN, SHUTTING_DOWN, STARTED, STARTING, status, STOPPED, STOPPING, SUSPENDED, SUSPENDING
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    ReplyManagerSupport(org.apache.camel.CamelContext camelContext)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected abstract org.springframework.jms.listener.AbstractMessageListenerContainer
     
    protected abstract ReplyHandler
    createReplyHandler(ReplyManager replyManager, org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback, String originalCorrelationId, String correlationId, long requestTimeout)
     
    protected void
     
    protected void
     
    protected static org.springframework.jms.listener.AbstractMessageListenerContainer
     
    jakarta.jms.Destination
    Gets the reply to queue being used
    protected abstract void
    handleReplyMessage(String correlationID, jakarta.jms.Message message, jakarta.jms.Session session)
     
    void
    onMessage(jakarta.jms.Message message, jakarta.jms.Session session)
     
    void
    Process the reply
    registerReply(ReplyManager replyManager, org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback, String originalCorrelationId, String correlationId, long requestTimeout)
    Register a reply
    void
    setCorrelationProperty(String correlationProperty)
    Sets the JMS message property used for message correlation.
    void
    Sets the belonging JmsEndpoint.
    void
    Sets the thread pool to use for continue routing Exchange when a timeout was triggered when doing request/reply over JMS.
    void
    setReplyTo(jakarta.jms.Destination replyTo)
    Sets the reply to queue the manager should listen for replies.
    void
    Sets the scheduled thread pool to use when checking for timeouts (no reply received within a given time period)
    protected static void
    setupClientId(JmsEndpoint endpoint, org.springframework.jms.listener.DefaultMessageListenerContainer answer)
     
    protected ReplyHandler
    waitForProvisionCorrelationToBeUpdated(String correlationID, jakarta.jms.Message message)
    IMPORTANT: This logic is only being used due to high performance in-memory only testing using InOut over JMS.

    Methods inherited from class org.apache.camel.support.service.BaseService

    build, doBuild, doFail, doInit, doLifecycleChange, doResume, doShutdown, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspend

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.apache.camel.component.jms.reply.ReplyManager

    setReplyToSelectorHeader, updateCorrelationId

    Methods inherited from interface org.apache.camel.Service

    build, close, init, start, stop

    Methods inherited from interface org.apache.camel.ShutdownableService

    shutdown

    Methods inherited from interface org.apache.camel.StatefulService

    getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspending

    Methods inherited from interface org.apache.camel.SuspendableService

    isSuspended, resume, suspend
  • Field Details

    • log

      protected final org.slf4j.Logger log
    • camelContext

      protected final org.apache.camel.CamelContext camelContext
    • scheduledExecutorService

      protected ScheduledExecutorService scheduledExecutorService
    • executorService

      protected ExecutorService executorService
    • endpoint

      protected JmsEndpoint endpoint
    • replyTo

      protected jakarta.jms.Destination replyTo
    • listenerContainer

      protected org.springframework.jms.listener.AbstractMessageListenerContainer listenerContainer
    • replyToLatch

      protected final CountDownLatch replyToLatch
    • replyToTimeout

      protected final long replyToTimeout
      See Also:
    • correlation

      protected org.apache.camel.component.jms.reply.CorrelationTimeoutMap correlation
    • correlationProperty

      protected String correlationProperty
  • Constructor Details

    • ReplyManagerSupport

      protected ReplyManagerSupport(org.apache.camel.CamelContext camelContext)
  • Method Details

    • setScheduledExecutorService

      public void setScheduledExecutorService(ScheduledExecutorService executorService)
      Description copied from interface: ReplyManager
      Sets the scheduled thread pool to use when checking for timeouts (no reply received within a given time period)
      Specified by:
      setScheduledExecutorService in interface ReplyManager
    • setOnTimeoutExecutorService

      public void setOnTimeoutExecutorService(ExecutorService executorService)
      Description copied from interface: ReplyManager
      Sets the thread pool to use for continue routing Exchange when a timeout was triggered when doing request/reply over JMS.
      Specified by:
      setOnTimeoutExecutorService in interface ReplyManager
    • setEndpoint

      public void setEndpoint(JmsEndpoint endpoint)
      Description copied from interface: ReplyManager
      Sets the belonging JmsEndpoint.
      Specified by:
      setEndpoint in interface ReplyManager
    • setReplyTo

      public void setReplyTo(jakarta.jms.Destination replyTo)
      Description copied from interface: ReplyManager
      Sets the reply to queue the manager should listen for replies.

      The queue is either a temporary or a persistent queue.

      Specified by:
      setReplyTo in interface ReplyManager
    • setCorrelationProperty

      public void setCorrelationProperty(String correlationProperty)
      Description copied from interface: ReplyManager
      Sets the JMS message property used for message correlation. If set message correlation will be performed on the value of this JMS property, JMSCorrelationID will be ignored.
      Specified by:
      setCorrelationProperty in interface ReplyManager
    • getReplyTo

      public jakarta.jms.Destination getReplyTo()
      Description copied from interface: ReplyManager
      Gets the reply to queue being used
      Specified by:
      getReplyTo in interface ReplyManager
    • registerReply

      public String registerReply(ReplyManager replyManager, org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback, String originalCorrelationId, String correlationId, long requestTimeout)
      Description copied from interface: ReplyManager
      Register a reply
      Specified by:
      registerReply in interface ReplyManager
      Parameters:
      replyManager - the reply manager being used
      exchange - the exchange
      callback - the callback
      originalCorrelationId - an optional original correlation id
      correlationId - the correlation id to expect being used
      requestTimeout - the timeout
      Returns:
      the correlation id used
    • createReplyHandler

      protected abstract ReplyHandler createReplyHandler(ReplyManager replyManager, org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback, String originalCorrelationId, String correlationId, long requestTimeout)
    • onMessage

      public void onMessage(jakarta.jms.Message message, jakarta.jms.Session session) throws jakarta.jms.JMSException
      Specified by:
      onMessage in interface org.springframework.jms.listener.SessionAwareMessageListener
      Throws:
      jakarta.jms.JMSException
    • processReply

      public void processReply(ReplyHolder holder)
      Description copied from interface: ReplyManager
      Process the reply
      Specified by:
      processReply in interface ReplyManager
      Parameters:
      holder - containing needed data to process the reply and continue routing
    • handleReplyMessage

      protected abstract void handleReplyMessage(String correlationID, jakarta.jms.Message message, jakarta.jms.Session session)
    • createListenerContainer

      protected abstract org.springframework.jms.listener.AbstractMessageListenerContainer createListenerContainer() throws Exception
      Throws:
      Exception
    • waitForProvisionCorrelationToBeUpdated

      protected ReplyHandler waitForProvisionCorrelationToBeUpdated(String correlationID, jakarta.jms.Message message)
      IMPORTANT: This logic is only being used due to high performance in-memory only testing using InOut over JMS. Its unlikely to happen in a real life situation with communication to a remote broker, which always will be slower to send back reply, before Camel had a chance to update it's internal correlation map.
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.apache.camel.support.service.BaseService
      Throws:
      Exception
    • doStop

      protected void doStop() throws Exception
      Overrides:
      doStop in class org.apache.camel.support.service.BaseService
      Throws:
      Exception
    • setupClientId

      protected static void setupClientId(JmsEndpoint endpoint, org.springframework.jms.listener.DefaultMessageListenerContainer answer)
    • getAbstractMessageListenerContainer

      protected static org.springframework.jms.listener.AbstractMessageListenerContainer getAbstractMessageListenerContainer(JmsEndpoint endpoint)