public class SubscriptionManager
extends java.lang.Object
Diese interne Subkomponente SubscriptionManager ist für die An und Abmeldungen zuständig. Sie startet beim Aufruf die notwendigen Anmeldungen für die gerichtete Kommunikation zwischen Applikation und Konfiguration oder Archiv. Sie bietet Methoden, um Anmeldungen und Abmeldungen, als Empfänger, Senke, Sender oder Quelle, über die Protokollsteuerung DaVDAF, beim Datenverteiler durchzuführen. Die Anmeldungen werden hier verwaltet, so dass keine doppelten Anmeldungen der gleichen Daten beim Datenverteiler existieren. Weiterhin bietet sie Methoden, um Daten, über die Protokollsteuerung DaV-DAF, zum Datenverteiler zu senden. Die zu sendenden Datensätze werden mit dem passenden Datensatzindex2 versehen (alter Datensatzindex + 1). Falls eine Empfangsanmeldung auch Archivdaten verlangt, werden die Anfrage aktueller Daten und die Archivanfrage so gesteuert, dass keine Lücken entstehen. Sie wird vom Cache-Manager benachrichtigt, falls neue Daten angekommen sind. Diese werden dann in eine Tabelle eingefügt. Diese wird von einem Aktualisierungsthread zyklisch entleert, und die Daten werden an den Interessenten weitergeleitet. Durch die zyklische en-bloc- Bearbeitung der in der Tabelle aufgelaufenen Daten erreicht man eine bessere Durchsatzrate im Vergleich zur Einzelbearbeitung der Datensätze.
Alle Sende und Empfangsanmeldungen werden in entsprechenden Hashtables gespeichert. Ein Thread leitet empfangene Telegramme an die entsprechenden angemeldeten Empfänger weiter.
Constructor and Description |
---|
SubscriptionManager(ClientDavParameters dafParameters) |
Modifier and Type | Method and Description |
---|---|
void |
addConfiguration(ConfigurationManager configurationManager,
java.lang.String name)
Fügt einen ConfigurationManager für eine entfernte Konfiguration hinzu
|
void |
close()
Schließt diese Subkomponente und terminiert den Aktualisierungsthread.
|
void |
completeInitialisation(boolean skipConfiguration)
Initialisierung der Anmeldungsverwaltung.
|
ClientHighLevelCommunication |
getHighLevelCommunication()
Bestimmt die Kommunikationsschicht von der der SubscriptionManager abhängig ist
|
java.util.List<ConfigurationManager> |
getSecondaryConfigurationManagers()
Gibt eine Liste mit ConfigurationManagern zurück, die entfernte Konfigurationen verwalten
|
int |
getTimeStampFromSenderSubscription(BaseSubscriptionInfo info)
Gibt den Zeitpunkt einer Sender-Anmeldung zurück
|
boolean |
isInitialisationComplete()
Überprüft, ob die notwendigen Anmeldungen einer gerichtete Kommunikation durch die Konfiguration erfolgt sind oder nicht.
|
void |
notifySenderApplication(BaseSubscriptionInfo info,
byte state)
Wenn eine Sendeanmeldung mit aktivierter Benachrichtigungsoption vorliegt, dann wird ihr über diese Methode mitgeteilt, welche Aktion von ihr durchzuführen
ist.
|
void |
sendData(ResultData result)
Sendet einen Ergebnisdatensatz zum Datenverteiler.
|
void |
setConfigurationManager(ConfigurationManager configurationManager)
Setzt den ConfigurationManager dieser Subkomponente und benachrichtigt die Protokollsteuerung DaV-DAF über die Bereitschaft, Konfigurationsdaten zu
empfangen.
|
void |
setHighLevelCommunication(ClientHighLevelCommunication highLevelCommunication)
Setzt die ClientHighLevelCommunication-Subkomponente um Anmeldungen, Abmeldungen und Datensätze an den Datenverteiler weiterzuleiten.
|
void |
subscribeReceiver(ClientReceiverInterface receiver,
SystemObject[] objects,
DataDescription dataDescription,
ReceiveOptions options,
ReceiverRole role,
long cacheTime)
Anmeldung zum Empfangen von Daten.
|
void |
subscribeSender(ClientSenderInterface sender,
SystemObject[] objects,
DataDescription dataDescription,
SenderRole role)
Anmeldung zum Senden von Daten.
|
void |
unsubscribeReceiver(ClientReceiverInterface receiver,
SystemObject[] objects,
DataDescription dataDescription)
Abmeldung von angemeldeten Daten.
|
void |
unsubscribeSender(ClientSenderInterface sender,
SystemObject[] objects,
DataDescription dataDescription)
Abmeldung von angemeldeten Daten.
|
void |
waitForInitialization(long configAuthorityId)
Wartet auf den Verbindungsaufbau zu einer Konfiguration
|
public SubscriptionManager(ClientDavParameters dafParameters)
dafParameters
- Startparameter der Verbindungpublic final void setHighLevelCommunication(ClientHighLevelCommunication highLevelCommunication)
highLevelCommunication
- Referenz auf die zu setzende Kommunikationsschichtpublic final ClientHighLevelCommunication getHighLevelCommunication()
public final void completeInitialisation(boolean skipConfiguration)
Für alle Applikationen außer der Konfiguration sorgt diese Methode für die Anmeldung als Sender von Lese- und Schreibkonfigurationsanfragen und als Senke für Lese- und Schreibkonfigurationsantworten, um eine gerichtete Kommunikation mit der Konfiguration zu gewährleisten. Diese Methode wird von ClientDavConnection aufgerufen.
skipConfiguration
- Anmeldung von Konfigurationsanfragen unterdrückenpublic final boolean isInitialisationComplete()
public final void setConfigurationManager(ConfigurationManager configurationManager)
configurationManager
- Referenz auf den zu setzenden Konfigurationsmanagerpublic final void subscribeReceiver(ClientReceiverInterface receiver, SystemObject[] objects, DataDescription dataDescription, ReceiveOptions options, ReceiverRole role, long cacheTime)
receiver
- Ein von der Applikation bereitzustellendes Objekt, das bei Aktualisierungen entsprechende Methodenaufrufe erhält.objects
- Liste mit System-Objekten für die die spezifizierten Daten anzumelden sind.dataDescription
- Beschreibende Informationen zu den anzumeldenden Daten.options
- Für die Anmeldung zu verwendende Optionen.role
- Für die Anmeldung zu verwendende Rolle (Empfänger oder Senke).cacheTime
- Vorhaltezeitraum in Millisekunden. Der Vorhaltezeitraum spezifiziert, wie lange empfangene Daten zwischengespeichert werden sollen.java.lang.IllegalArgumentException
- Die angegebene ReceiverRole verstößt gegen die Attributgruppenverwendung.public int getTimeStampFromSenderSubscription(BaseSubscriptionInfo info)
info
- Anmeldungpublic final void unsubscribeReceiver(ClientReceiverInterface receiver, SystemObject[] objects, DataDescription dataDescription)
subscribeReceiver(de.bsvrz.dav.daf.main.impl.subscription.ReceiverSubscription)
durchgeführte Empfangsanmeldung wieder rückgängig.receiver
- Das Anwendungsobjekt, das bei der Anmeldung benutzt wurde.objects
- Feld mit System-Objekten für die die spezifizierten Daten abzumelden sind.dataDescription
- Beschreibende Informationen zu den abzumeldenden Daten.public final void subscribeSender(ClientSenderInterface sender, SystemObject[] objects, DataDescription dataDescription, SenderRole role) throws OneSubscriptionPerSendData
sender
- Applikationsobjekt zur Verarbeitung von Sendesteuerungenobjects
- Feld mit System-Objekten für die spezifizierten Daten anzumelden sind.dataDescription
- Beschreibende Informationen zu den anzumeldenden Daten.role
- Für die Anmeldung zu verwendende Rolle (Quelle oder Sender).java.lang.IllegalArgumentException
- Die SenderRole verstößt gegen die AttributgruppenverwendungOneSubscriptionPerSendData
- Wenn bereits eine lokale Sendeanmeldung für diese Datenidentifikation vorhanden istpublic final void unsubscribeSender(ClientSenderInterface sender, SystemObject[] objects, DataDescription dataDescription)
subscribeSender(de.bsvrz.dav.daf.main.ClientSenderInterface, de.bsvrz.dav.daf.main.config.SystemObject[], de.bsvrz.dav.daf.main.DataDescription, de.bsvrz.dav.daf.main.SenderRole)
durchgeführte Sendeanmeldung wieder rückgängig.sender
- Das Anwendungsobjekt, das bei der Anmeldung benutzt wurde.objects
- Feld mit System-Objekten für die die spezifizierten Daten abzumelden sind.dataDescription
- Beschreibende Informationen zu den abzumeldenden Daten.public final void sendData(ResultData result) throws DataNotSubscribedException, SendSubscriptionNotConfirmed
result
- Ergebnis mit dem zu sendenden Datensatz.DataNotSubscribedException
- Wenn die Daten nicht zum Senden angemeldet waren.SendSubscriptionNotConfirmed
- Wenn die Sendesteuerung abgewartet werden muss, bevor gesendet werden kann.public void notifySenderApplication(BaseSubscriptionInfo info, byte state)
info
- Anmeldeinfo, auf die sich die Sendesteuerung beziehtstate
- Zustand der Sendesteuerungpublic final void close()
public void addConfiguration(ConfigurationManager configurationManager, java.lang.String name)
configurationManager
- ConfigurationManagername
- Name der Konfigurationpublic java.util.List<ConfigurationManager> getSecondaryConfigurationManagers()
public void waitForInitialization(long configAuthorityId) throws ConfigurationTaskException
configAuthorityId
- Konfigurationsverantwortlichen-IdConfigurationTaskException