Interface ActivePublisher
- All Superinterfaces:
Publisher
- All Known Subinterfaces:
TransformerPublisher
This implementation of Publisher
publishes updates that
are for subjects within its associated Namespace
, to all
peers that have subscribed to those subjects.
Instantiate this interface using the appropriate Caplin API method.
ActivePublisher
passes all requests for subjects in the
Namespace
on to its associated
DataProvider
. However it only passes a discard request on
to the DataProvider
when all of the subscribed peers have
discarded the subject. For example, consider this sequence of events:
- Peer 1 requests /SUBJECT
- Peer 2 requests /SUBJECT
- Peer 1 discards /SUBJECT
- Peer 2 discards /SUBJECT
In this case the DataProvider
would receive two requests,
one at step 1 and another at step 2. However the
DataProvider
would only receive one discard, which would
be at step 4. The purpose of this logic is to simplify the job of the
DataProvider
. It still needs to send out a new image
whenever a new Peer
requests a subject. However, when it receives a single discard
for the subject, it can immediately stop sending out updates, since the discard indicates that
there are now no peers subscribed to that subject.
In detail, the ActivePublisher
's
DataProvider
receives a call to
DataProvider.onRequest(RequestEvent)
every time a new
peer requests a subject. The DataProvider
must respond by
calling Publisher.publishInitialMessage(Message)
to
ensure that each requesting (subscribing) peer receives an initial image. Each call to
Publisher.publishInitialMessage(Message)
sends the image
to all peers that have requested the subject since the previous call to
Publisher.publishInitialMessage(Message)
.
The DataProvider
receives a single call to
DataProvider.onDiscard(DiscardEvent)
when the last peer
discards the subject. This is the signal to the
DataProvider
that it can stop sending updates, and
unsubscribe from streaming data for the subject from the back end system. As explained above, the
DataProvider
does not receive a call to
DataProvider.onDiscard(DiscardEvent)
every time a peer
discards the subject, it just receives one call when the last peer discards the subject.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
publishStatusEventToAllSubjects
(StatusEvent statusEvent) Publishes to all subscribed peers an event about the change in status of all subjects.Methods inherited from interface com.caplin.datasource.publisher.Publisher
getMessageFactory, publishInitialMessage, publishMappingMessage, publishSubjectErrorEvent, publishSubjectStatusEvent, publishToSubscribedPeers
-
Method Details
-
publishStatusEventToAllSubjects
Publishes to all subscribed peers an event about the change in status of all subjects. This method can be used to change the status of requested subjects when the status of theDataProvider
changes.- Parameters:
statusEvent
- The status event to be published.
-