Class ClientLinkType<LinkType extends Link<LinkType>,​ProtonType extends Link<ProtonType>>

  • All Implemented Interfaces:
    java.lang.AutoCloseable, Link<LinkType>
    Direct Known Subclasses:
    ClientReceiverLinkType, ClientSenderLinkType

    public abstract class ClientLinkType<LinkType extends Link<LinkType>,​ProtonType extends Link<ProtonType>>
    extends java.lang.Object
    implements Link<LinkType>
    Base type used by client resources that represent an AMQP link type.
    • Field Detail

      • CLOSED_UPDATER

        protected static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater<ClientLinkType> CLOSED_UPDATER
      • closed

        protected volatile int closed
      • executor

        protected final java.util.concurrent.ScheduledExecutorService executor
      • linkId

        protected final java.lang.String linkId
      • remoteSource

        protected volatile Source remoteSource
      • remoteTarget

        protected volatile Target remoteTarget
      • linkRemotelyClosedHandler

        protected java.util.function.Consumer<LinkType extends Link<LinkType>> linkRemotelyClosedHandler
    • Method Detail

      • self

        protected abstract LinkType self()
      • protonLink

        protected abstract ProtonType protonLink()
      • close

        public void close()
        Description copied from interface: Link
        Requests a close of the Link at the remote and waits until the Link has been fully closed or until the configured close timeout is exceeded.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface Link<LinkType extends Link<LinkType>>
      • closeAsync

        public ClientFuture<LinkType> closeAsync()
        Description copied from interface: Link
        Requests a close of the Link link at the remote and returns a Future that will be completed once the link has been closed.
        Specified by:
        closeAsync in interface Link<LinkType extends Link<LinkType>>
        Returns:
        a Future that will be completed when the remote closes this Link link.
      • closeAsync

        public ClientFuture<LinkType> closeAsync​(ErrorCondition error)
        Description copied from interface: Link
        Requests a close of the Link link at the remote and returns a Future that will be completed once the link has been closed.
        Specified by:
        closeAsync in interface Link<LinkType extends Link<LinkType>>
        Parameters:
        error - The ErrorCondition to transmit to the remote along with the close operation.
        Returns:
        a Future that will be completed when the remote closes this Link link.
      • detachAsync

        public ClientFuture<LinkType> detachAsync()
        Description copied from interface: Link
        Requests a detach of the Link link at the remote and returns a Future that will be completed once the link has been detached.
        Specified by:
        detachAsync in interface Link<LinkType extends Link<LinkType>>
        Returns:
        a Future that will be completed when the remote detaches this Link link.
      • detachAsync

        public ClientFuture<LinkType> detachAsync​(ErrorCondition error)
        Description copied from interface: Link
        Requests a detach of the Link link at the remote and returns a Future that will be completed once the link has been detached.
        Specified by:
        detachAsync in interface Link<LinkType extends Link<LinkType>>
        Parameters:
        error - The ErrorCondition to transmit to the remote along with the detach operation.
        Returns:
        a Future that will be completed when the remote detaches this Link link.
      • address

        public java.lang.String address()
                                 throws ClientException
        Description copied from interface: Link
        Returns the address that the Link instance will be subscribed to. This method can block based on the type of link and how it was configured.
        • If the link is a Sender and it was configured as an anonymous sender then this method returns null as the link has no address.
        • If a link was created with the dynamic node value enabled then the method will return the dynamically created address once the remote has attached its end of the opened link. Due to the need to await the remote peer to populate the dynamic address this method will block until the open of the link has completed.
        • If not a dynamic link then the address returned is the address passed to the original link creation method.
        Specified by:
        address in interface Link<LinkType extends Link<LinkType>>
        Returns:
        the address that this Link is was assigned to.
        Throws:
        ClientException - if an error occurs while obtaining the Link address.
      • source

        public Source source()
                      throws ClientException
        Description copied from interface: Link
        Returns an immutable view of the remote Source object assigned to this link. If the attach has not completed yet this method will block to await the attach response which carries the remote Source.
        Specified by:
        source in interface Link<LinkType extends Link<LinkType>>
        Returns:
        the remote Source node configuration.
        Throws:
        ClientException - if an error occurs while obtaining the Link remote Source.
      • target

        public Target target()
                      throws ClientException
        Description copied from interface: Link
        Returns an immutable view of the remote Target object assigned to this sender link. If the attach has not completed yet this method will block to await the attach response which carries the remote Target.
        Specified by:
        target in interface Link<LinkType extends Link<LinkType>>
        Returns:
        the remote Target node configuration.
        Throws:
        ClientException - if an error occurs while obtaining the Link remote Target.
      • properties

        public java.util.Map<java.lang.String,​java.lang.Object> properties()
                                                                          throws ClientException
        Description copied from interface: Link
        Returns the properties that the remote provided upon successfully opening the Link. If the attach has not completed yet this method will block to await the attach response which carries the remote properties. If the remote provides no properties this method will return null.
        Specified by:
        properties in interface Link<LinkType extends Link<LinkType>>
        Returns:
        any properties provided from the remote once the sender has successfully opened.
        Throws:
        ClientException - if an error occurs while obtaining the Link remote properties.
      • offeredCapabilities

        public java.lang.String[] offeredCapabilities()
                                               throws ClientException
        Description copied from interface: Link
        Returns the offered capabilities that the remote provided upon successfully opening the Link. If the attach has not completed yet this method will block to await the attach response which carries the remote offered capabilities. If the remote provides no capabilities this method will return null.
        Specified by:
        offeredCapabilities in interface Link<LinkType extends Link<LinkType>>
        Returns:
        any capabilities provided from the remote once the sender has successfully opened.
        Throws:
        ClientException - if an error occurs while obtaining the Link remote offered capabilities.
      • desiredCapabilities

        public java.lang.String[] desiredCapabilities()
                                               throws ClientException
        Description copied from interface: Link
        Returns the desired capabilities that the remote provided upon successfully opening the Link. If the attach has not completed yet this method will block to await the attach response which carries the remote desired capabilities. If the remote provides no capabilities this method will return null.
        Specified by:
        desiredCapabilities in interface Link<LinkType extends Link<LinkType>>
        Returns:
        any desired capabilities provided from the remote once the sender has successfully opened.
        Throws:
        ClientException - if an error occurs while obtaining the Link remote desired capabilities.
      • handleLocalOpen

        protected final void handleLocalOpen​(ProtonType link)
      • handleLocalCloseOrDetach

        protected final void handleLocalCloseOrDetach​(ProtonType link)
      • handleRemoteOpen

        protected final void handleRemoteOpen​(ProtonType link)
      • handleRemoteCloseOrDetach

        protected final void handleRemoteCloseOrDetach​(ProtonType link)
      • handleParentEndpointClosed

        protected final void handleParentEndpointClosed​(ProtonType link)
      • handleEngineShutdown

        protected final void handleEngineShutdown​(Engine engine)
      • immediateLinkShutdown

        protected final void immediateLinkShutdown​(ClientException failureCause)
      • linkSpecificLocalOpenHandler

        protected abstract void linkSpecificLocalOpenHandler()
      • linkSpecificLocalCloseHandler

        protected abstract void linkSpecificLocalCloseHandler()
      • linkSpecificRemoteOpenHandler

        protected abstract void linkSpecificRemoteOpenHandler()
      • linkSpecificRemoteCloseHandler

        protected abstract void linkSpecificRemoteCloseHandler()
      • linkSpecificCleanupHandler

        protected abstract void linkSpecificCleanupHandler​(ClientException failureCause)
      • recreateLinkForReconnect

        protected abstract void recreateLinkForReconnect()
      • notClosedOrFailed

        protected boolean notClosedOrFailed​(ClientFuture<?> request)
      • notClosedOrFailed

        protected boolean notClosedOrFailed​(ClientFuture<?> request,
                                            ProtonType protonLink)