de.bsvrz.dav.dav.main
Class SubscriptionsManager
java.lang.Object
de.bsvrz.dav.dav.main.SubscriptionsManager
public class SubscriptionsManager
- extends Object
Diese Komponente ist für die Verwaltung der Anmeldungen zuständig. Für jede Anmeldung wird ein Repräsentant erzeugt, der in einer Tabelle gehalten wird.
- Author:
- Kappich Systemberatung
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SubscriptionsManager
public SubscriptionsManager()
- Dieser Konstruktor wird für Testzwecke benötigt.
subscribe
public void subscribe(SubscriptionComponent subscriptionComponent)
- Anmelden einer Anmeldekomponente
- Parameters:
subscriptionComponent
- Die Anmeldekomponente
unsubscribe
public final void unsubscribe(SubscriptionComponent subscriptionComponent)
- Abmelden einer Anmeldekomponente
- Parameters:
subscriptionComponent
- Die Anmeldekomponente
sendData
public void sendData(T_A_HighLevelCommunication inputApplicationConnection,
ApplicationDataTelegram applicationDataTelegram)
- Diese Methode wird von der Protokollsteuerung DaV-DAF aufgerufen, wenn von einer Applikation ein neuer Datensatz empfangen wurde. Zuerst wird überprüft ob
dieser Datenverteiler der Zentraldatenverteiler der Datensätze, d. h., ob die Quelle oder Senke der Datensätze bei diesen Datenverteiler angemeldet ist. Ist
dies nicht der Fall, so wird überprüft, ob ein positiv quittierter Anmeldungsvermerk für einen Sender vorhanden ist. In diesem Fall wird der Datensatz mit
der ID des Senders versehen und dem zum Datenverteiler weitergeleitet, bei dem eine positiv quittierte Folgeanmeldung vorliegt. Erst der
Zentraldatenverteiler sorgt für einen gültigen, eindeutigen Datensatzindex. Bis zu diesem Zeitpunkt muss der Sender eindeutig benannt werden. Dies ist
gerade dann notwendig, wenn mehrere Sender ihre Datensätze über einen Datenverteiler im System verteilen und die Telegramme zerstückelt sind. Wenn dieser
Datenverteiler der Zentraldatenverteiler für diese Datensätze ist, wird überprüft ob der Datensatz zerstückelt ist. In diesem Fall wird der Datensatzindex
dieses Datensatzes bestimmt und an die Applikationen und Datenverteiler weitergeleitet, die positiv quittierte Anmeldungen initiiert haben. Wenn der
Datensatz kein nachgelieferter Datensatz ist, wird er in der Datenbestand aufgenommen. Für den Fall das der Datensatz zerstückelt ist gibt es zwei
Möglichkeiten:
- Das empfangene Telegramm ist das erste. Dann wird der Datensatzindex bestimmt und die Relation zwischen altem und neuem
Datensatzindex in einer Tabelle festgehalten. Diese Zuordnung ist notwendig, damit die anderen Teile des zerstückelten Datensatzes den gleichen Index
erhalten können. Das Telegramm wird in die sogenannte Zerstückelungstabelle aufgenommen und an die Applikationen und Datenverteiler weitergeleitet, die
positiv quittierte Anmeldungen initiiert haben.
- Das empfangene Telegramm ist nicht das erste. Dann wird es mit dem Datensatzindex versehen, der dem
ersten Telegramm der Zerstückelung zugewiesen wurde. Das Telegramm wird in die Zerstückelungstabelle aufgenommen, und es wird überprüft, ob alle Teile der
Zerstückelung angekommen sind. Sind alle vorhanden, und sind sie nicht als nachgeliefert markiert, so werden sie in den Datenbestand des DaVs aufgenommen.
Nachgelieferte Telegramme hingegen werden nicht im DaV vorgehalten. Das empfangene Telegramm wird dann an die Applikationen und Datenverteiler
weitergeleitet, die positiv quittierte Anmeldungen initiiert haben.
Der Datensatzindex wird so gebildet, dass die oberen 32 Bits die Zeit und die
unteren 30 Bits den um eins erhöhten Index der Basisanmeldeinformation enthalten. Die Zeit wird entweder aus dem Datensatzindex des im Datenbestand
vorhandenen Datensatzes gewonnen oder ist die Zeit des Startens dieses Datenverteilers. Für jede Basisanmeldeinformation wird ein Index in einer Tabelle
eingerichtet, der bei jedem neuen Datensatz um eins erhöht wird und in der Tabelle wieder abgespeichert wird. Wenn ein Telegramm an eine Applikation
weitergeleitet wird, muss überprüft werden, ob sich die Applikation evtl. nur für Delta-Daten oder für einen Teil der Attribute (oder beides) angemeldet
hat. Wenn keine Einschränkung vorliegt, wird das Telegramm an die Applikation weitergeleitet. Bei Einschränkungen hingegen wird zunächst gewartet, bis der
Datensatz komplett verfügbar ist (Zerstückelung). Je nachdem, welche Einschränkungen vorliegen, wird der Datensatz wie folgt an die Applikation
weitergeleitet: - Keine nachgelieferten Daten: Sind die Daten nachgeliefert, werden sie nicht gesendet.
- Delta-Daten: Es wird überprüft, ob die
Änderungsindikatoren gesetzt sind. Nur dann wird der Datensatz zur Applikation weitergeleitet.
- Teilattribute: die angemeldeten Teilattribute werden aus
dem Datensatz herausge- filtert und als neuer Datensatz zur Applikation weitergeleitet.
- Delta-Daten und Teilattribute: Es wird die Schnittmenge aus den
Indikatoren der angemeldeten Attribute und den Indikatoren der geänderten Attribute gebildet. Aus den Attributen dieser Schnittmenge wird ein neuer
Datensatz gebildet und an die Applikation weitergeleitet.
Das Senden eines Datensatzes wird natürlich nur dann erfolgen, wenn der Empfänger be-
rechtigt ist, die Daten zu empfangen. Andernfalls wird ein spezieller Datensatz generiert, welcher den Empfänger darüber informiert, dass er keine
Berechtigung hat.
- Parameters:
inputApplicationConnection
- VerbindungapplicationDataTelegram
- Applikations-Daten-Telegramm
sendData
public final void sendData(T_T_HighLevelCommunication inputTransmitterConnection,
TransmitterDataTelegram transmitterDataTelegram)
- Diese Methode wird von der Protokollsteuerung DaV-DaV aufgerufen, wenn von einem Datenverteiler ein neuer Datensatz empfangen wurde.
- Sind die Daten
auf dem Weg von einem Sender zu einem Zentraldatenverteiler, so wird bei jedem Datenverteiler zunächst überprüft, ob dieser bereits der gesuchte
Zentraldatenverteiler dieser Datensätze ist, d. h., ob die Quelle oder Senke der Datensätze an diesem Datenverteiler angemeldet ist. Ist der Datensatz nicht
zerstückelt, wird der Datensatzindex dieses Datensatzes bestimmt, und er wird an die Applikationen und Datenverteiler weitergeleitet, für die bei diesem
Datenverteiler positiv quittierte Anmeldungen vorliegen. Wenn der Datensatz nicht nachgeliefert ist, wird er in den Datenbestand aufgenommen.
Ist der
Datensatz zerstückelt, dann gibt es zwei Möglichkeiten: - Das empfangene Telegramm ist das erste.
- Das empfangene Telegramm ist nicht das
erste.
Wenn dieser Datenverteiler nicht der Zentraldatenverteiler für diese Datensätze ist dann wird überprüft, ob ein positiv quittierter
Anmeldungsvermerk für einen Sender vorliegt. Ist dies der Fall, dann wird der Datensatz zum dem Datenverteiler weitergeleitet, an dem eine positiv
quittierte Folgeanmeldung vorliegt. - Sind die Daten auf dem Weg von einem Zentraldatenverteiler zu einem Empfänger, so wird bei jedem Datenverteiler
überprüft, ob der Datensatz zerstückelt ist. Ist der Datensatz nicht zerstückelt, wird der Datensatzindex dieses Datensatzes bestimmt und an die
Applikationen und Datenverteiler weitergeleitet, für die bei diesem Datenverteiler positiv quittierte Anmeldungen vorliegen. Wenn der Datensatz nicht
nachgeliefert ist, wird er in den Datenbestand aufgenommen. Anschließend wird die updatePendingSubscription-Methode der Verbindungsverwaltung aufgerufen, um
die Umleitungsanträge mit den Informationen der neuen Datensätze zu versehen.
Ist der Datensatz zerstückelt, dann gibt es zwei Möglichkeiten:
- Das empfangene Telegramm ist das erste.
- Das empfangener Telegramm ist nicht das erste. Dann wird es mit dem Datensatzindex versehen, der dem
ersten Telegramm der Zerstückelung zugewiesen wurde. Das Telegramm wird in die Zerstückelungstabelle aufgenommen, und es wird überprüft, ob alle Teile der
Zerstückelung angekommen sind. Sind alle vorhanden, und sind sie nicht als nachgeliefert markiert, so werden sie alle in den Datenbestand aufgenommen.
Anschließend wird die updatePendingSubscription- Methode der Verbindungsverwaltung aufgerufen, um die Umleitungsanträge mit den Informationen der neuen
Datensätze zu versehen. Das empfangene Telegramm wird dann an die Applikationen und Datenverteiler weitergeleitet, die positiv quittierte Anmeldungen
initiiert haben.
Der Datensatzindex wird so gebildet, dass die oberen 32 Bits die Zeit und die unteren 30 Bits den um eins erhöhten Index der
Basisanmeldeinformation enthalten. Die Zeit wird entweder aus dem Datensatzindex des im Datenbestand vorhandenen Datensatzes gewonnen oder ist die Zeit des
Startens dieses Datenverteilers. Für jede Basisanmeldeinformation wird ein Index in einer Tabelle eingerichtet, der bei jedem neuen Datensatz um eins erhöht
wird und in der Tabelle wieder abgespeichert wird. Wenn ein Telegramm an eine Applikation weitergeleitet wird, muss überprüft werden, ob sich die
Applikation evtl. nur für Delta-Daten oder für einen Teil der Attribute (oder beides) angemeldet hat. Wenn keine Einschränkung vorliegt, wird das Telegramm
an die Applikation weitergeleitet. Bei Einschränkungen hingegen wird zunächst gewartet, bis der Datensatz komplett verfügbar ist (Zerstückelung). Je
nachdem, welche Einschränkungen vorliegen, wird der Datensatz wie folgt an die Applikation weitergeleitet: - Keine nachgelieferten Daten: Sind die
Daten nachgeliefert, werden sie nicht gesendet.
- Delta-Daten: Es wird überprüft, ob die Änderungsindikatoren gesetzt sind. Nur dann wird der Datensatz zur
Applikation weitergeleitet.
- Teilattribute: die angemeldeten Teilattribute werden aus dem Datensatz herausgefiltert und als neuer Datensatz zur
Applikation weitergeleitet.
- Delta-Daten und Teilattribute: Es wird die Schnittmenge aus den Indikatoren der angemeldeten Attribute und den Indikatoren
der geänderten Attribute gebildet. Aus den Attributen dieser Schnittmenge wird ein neuer Datensatz gebildet und an die Applikation weitergeleitet.
Das
Senden eines Datensatzes wird natürlich nur dann erfolgen, wenn der Empfänger berechtigt ist, die Daten zu empfangen. Andernfalls wird ein spezieller
Datensatz generiert, welcher den Empfänger darüber informiert, dass er keine Berechtigung hat.
- Parameters:
inputTransmitterConnection
- VerbindungtransmitterDataTelegram
- Transmitter-Daten-Telegramm
printSubscriptions
public void printSubscriptions()
- Gibt alle Anmeldungen zu Debug-Zwecken aus