Class PeriodicallyRenewedAmLink
- java.lang.Object
-
- org.forgerock.openig.tools.notifications.ws.link.PeriodicallyRenewedAmLink
-
- All Implemented Interfaces:
AmLink,AmLinkListener
public class PeriodicallyRenewedAmLink extends Object implements AmLink, AmLinkListener
Renew theAmLinkperiodically without causing any disconnection. This is needed to keep a connection with IDCloud, because it has a timeout on its WebSocket connections.The periodical connection renewal algorithm:
- [un-]subscriptions are put on hold (ie: bound to a
Promise). - This
AmLinkwaits for every ongoing [un-]subscriptions to complete - A new
AmLinkis started from the current list ofmanagedTopics - Once the new link is ready, waiting [un-]subscriptions are released
- In the background the old link is shut down.
While transitioning from one connection to the other, AM notifications may be received twice.
The connection renewal happens every
renewalDelay(can't beDuration.ZEROnorDuration.UNLIMITED).What could go wrong:
- A disconnection happens on any link: consider this as a real disconnection, so transmit the disconnection,
then close every open
AmLink. - New link fails to start: consider this as a disconnection: see #1.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfacePeriodicallyRenewedAmLink.AmLinkSupplierFromTopicsA type helper to supply anAmLink.AmLinkSupplierfrom a set of topics.-
Nested classes/interfaces inherited from interface org.forgerock.openig.tools.notifications.ws.link.AmLink
AmLink.AmLinkSupplier, AmLink.ResilientAmLinkSupplier
-
Nested classes/interfaces inherited from interface org.forgerock.openig.tools.notifications.ws.link.AmLinkListener
AmLinkListener.ResilientAmLinkListener
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Promise<Void,Exception>close()Close theAmLinkand its associated resources.voidonDisconnection()The handler to call in case of a disconnection.voidonNotification(Notification notification)The notification handler, will receive all notifications sent by AM.static AmLink.AmLinkSupplierperiodicallyRenewedAmLinkSupplier(Duration renewalDelay, PeriodicallyRenewedAmLink.AmLinkSupplierFromTopics amLinkSupplier, ScheduledExecutorService executorService)Builds a supplier ofPeriodicallyRenewedAmLink.Promise<Void,Exception>start()Start theAmLink.Promise<Void,Exception>subscribe(String topic)Subscribe to an AM topic.Promise<Void,Exception>unsubscribe(String topic)Unsubscribe from an AM topic.
-
-
-
Method Detail
-
close
public Promise<Void,Exception> close()
Description copied from interface:AmLinkClose theAmLinkand its associated resources. The instance can't be reused afterward.
-
onDisconnection
public void onDisconnection()
Description copied from interface:AmLinkListenerThe handler to call in case of a disconnection. When this handler is called, the instance is considered as closed. Can only be called after the start promise successful completion, and before every ongoing (un)subscribe promise failure.- Specified by:
onDisconnectionin interfaceAmLinkListener
-
onNotification
public void onNotification(Notification notification)
Description copied from interface:AmLinkListenerThe notification handler, will receive all notifications sent by AM. Duplicate notifications may occur.- Specified by:
onNotificationin interfaceAmLinkListener- Parameters:
notification- the received notification
-
subscribe
public Promise<Void,Exception> subscribe(String topic)
Description copied from interface:AmLinkSubscribe to an AM topic. After successful subscription, the notification consumer (supplied in will begin receiving notifications on this topic.
-
unsubscribe
public Promise<Void,Exception> unsubscribe(String topic)
Description copied from interface:AmLinkUnsubscribe from an AM topic. After successful unsubscribe request, the notification consumer will stop receiving notifications on this topic.- Specified by:
unsubscribein interfaceAmLink- Parameters:
topic- The AM topic to un-subscribe from.- Returns:
- A promise of a successful un-subscription to the AM topic.
-
periodicallyRenewedAmLinkSupplier
public static AmLink.AmLinkSupplier periodicallyRenewedAmLinkSupplier(Duration renewalDelay, PeriodicallyRenewedAmLink.AmLinkSupplierFromTopics amLinkSupplier, ScheduledExecutorService executorService)
Builds a supplier ofPeriodicallyRenewedAmLink.- Parameters:
renewalDelay- The delay between AmLink renewalsamLinkSupplier- The AmLink supplier to use to get new AmLinksexecutorService- The ExecutorService to use to schedule renewals- Returns:
- a supplier of
PeriodicallyRenewedAmLink.
-
-