Class SubscriptionManager


  • public class SubscriptionManager
    extends java.lang.Object
    Verwaltung der Sende- und Empfangsanmeldungen der Datenverteiler-Applikationsfunktionen

    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 Detail

      • SubscriptionManager

        public SubscriptionManager​(ClientDavParameters dafParameters)
        Parameters:
        dafParameters - Startparameter der Verbindung
    • Method Detail

      • getHighLevelCommunication

        public final ClientHighLevelCommunication getHighLevelCommunication()
        Bestimmt die Kommunikationsschicht von der der SubscriptionManager abhängig ist
        Returns:
        Die Kommunikationsschicht.
      • setHighLevelCommunication

        public final void setHighLevelCommunication​(ClientHighLevelCommunication highLevelCommunication)
        Setzt die ClientHighLevelCommunication-Subkomponente um Anmeldungen, Abmeldungen und Datensätze an den Datenverteiler weiterzuleiten. Diese interne Methode wird von der ClientHighLevelCommunication während der Initialisierungsphase aufgerufen, um die interne Kommunikation zwischen beiden Subkomponenten zu gewährleisten.
        Parameters:
        highLevelCommunication - Referenz auf die zu setzende Kommunikationsschicht
      • completeInitialisation

        public final void completeInitialisation​(boolean skipConfiguration)
        Initialisierung der Anmeldungsverwaltung. Diese Methode wird nach erfolgreicher Authentifizierung beim Datenverteiler aufgerufen und meldet sich auf Konfigurationsanfragen und -antworten an.

        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.

        Parameters:
        skipConfiguration - Anmeldung von Konfigurationsanfragen unterdrücken
      • isInitialisationComplete

        public final boolean isInitialisationComplete()
        Überprüft, ob die notwendigen Anmeldungen einer gerichtete Kommunikation durch die Konfiguration erfolgt sind oder nicht.
        Returns:
        true wenn die Initialisierungsphase abgeschlossen ist; sonst false
      • setConfigurationManager

        public final void setConfigurationManager​(ConfigurationManager configurationManager)
        Setzt den ConfigurationManager dieser Subkomponente und benachrichtigt die Protokollsteuerung DaV-DAF über die Bereitschaft, Konfigurationsdaten zu empfangen. Diese interne Methode wird während der Initialisierungsphase vom ConfigurationManager aufgerufen, um die interne Kommunikation zwischen beiden Subkomponenten zu gewährleisten.
        Parameters:
        configurationManager - Referenz auf den zu setzenden Konfigurationsmanager
      • subscribeReceiver

        public final void subscribeReceiver​(ClientReceiverInterface receiver,
                                            SystemObject[] objects,
                                            DataDescription dataDescription,
                                            ReceiveOptions options,
                                            ReceiverRole role,
                                            long cacheTime)
        Anmeldung zum Empfangen von Daten. Mit der Anmeldung wird von der Applikation ein Objekt bereitgestellt, daß bei nachfolgenden Aktualisierungen der Daten entsprechend benachrichtigt wird.
        Parameters:
        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.
        Throws:
        java.lang.IllegalArgumentException - Die angegebene ReceiverRole verstößt gegen die Attributgruppenverwendung.
      • getTimeStampFromSenderSubscription

        public int getTimeStampFromSenderSubscription​(BaseSubscriptionInfo info)
        Gibt den Zeitpunkt einer Sender-Anmeldung zurück
        Parameters:
        info - Anmeldung
        Returns:
        Sekunden seit 1970
      • subscribeSender

        public final void subscribeSender​(ClientSenderInterface sender,
                                          SystemObject[] objects,
                                          DataDescription dataDescription,
                                          SenderRole role)
                                   throws OneSubscriptionPerSendData
        Anmeldung zum Senden von Daten.
        Parameters:
        sender - Applikationsobjekt zur Verarbeitung von Sendesteuerungen
        objects - 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).
        Throws:
        java.lang.IllegalArgumentException - Die SenderRole verstößt gegen die Attributgruppenverwendung
        OneSubscriptionPerSendData - Wenn bereits eine lokale Sendeanmeldung für diese Datenidentifikation vorhanden ist
      • notifySenderApplication

        public 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. Es gibt folgende mögliche Aktionen: o Sendung starten. o Sendung anhalten. o Sendung anhalten (Grund: keine Rechte vorhanden). o Sendung anhalten (Grund: mehrere Quellen vorhanden). Wenn eine Sendung wegen mehrerer vorhandener Quellen angehalten werden muss, wird der zugehörige Vermerk der Anmeldung aus dem Anmelde-Manager entfernt. Die Nachricht wird durch den Aufruf der ClientSenderInterface-Methode dataRequest(SystemObject object, DataDescription dataDescription, byte state) zum Sender weitergeleitet: Auch die Sendeanmeldungen der Konfiguration wird hierdurch bestätigt. So wird ersichtlich, ob eine Konfiguration im System vorhanden ist.
        Parameters:
        info - Anmeldeinfo, auf die sich die Sendesteuerung bezieht
        state - Zustand der Sendesteuerung
      • close

        public final void close()
        Schließt diese Subkomponente und terminiert den Aktualisierungsthread.
      • addConfiguration

        public void addConfiguration​(ConfigurationManager configurationManager,
                                     java.lang.String name)
        Fügt einen ConfigurationManager für eine entfernte Konfiguration hinzu
        Parameters:
        configurationManager - ConfigurationManager
        name - Name der Konfiguration
      • getSecondaryConfigurationManagers

        public java.util.List<ConfigurationManager> getSecondaryConfigurationManagers()
        Gibt eine Liste mit ConfigurationManagern zurück, die entfernte Konfigurationen verwalten
        Returns:
        eine unveränderliche Liste mit Konfigurationsmanagern
      • waitForInitialization

        public void waitForInitialization​(long configAuthorityId)
                                   throws ConfigurationTaskException
        Wartet auf den Verbindungsaufbau zu einer Konfiguration
        Parameters:
        configAuthorityId - Konfigurationsverantwortlichen-Id
        Throws:
        ConfigurationTaskException