Class StreamedArchiveRequester

java.lang.Object
de.bsvrz.dav.daf.main.impl.archive.request.StreamedArchiveRequester
All Implemented Interfaces:
ArchiveRequestManager

public class StreamedArchiveRequester extends Object implements ArchiveRequestManager
Die Objekte dieser Klasse verwalten alle Arten von Anfragen an das Archivsystem, gleichzeitig werden auch alle Antworten vom Archivsystem, die für die Applikation bestimmt sind, entgegen genommen und in entsprechende Objekte umgewandelt (der Datensatz wird von einem Objekt der Klasse StreamedRequestManager empfangen, aber an den richtigen StreamedArchiveRequester weitergeleitet). Für jede anfragende Applikation wird ein solches Objekt erzeugt.
  • Constructor Details

    • StreamedArchiveRequester

      public StreamedArchiveRequester(ClientDavInterface archiveConnection, int timeOutArchiveRequest, SystemObject archiveSystem, short defaultSimulationVariant)
      Dieser Konstruktor erzeugt ein StreamedArchiveRequester Objekt und meldet sich gleichzeitig auf der übergebenen Verbindung als Sender für Anfragen an. Die Anfragen werden an das Archiv geschickt, das ebenfalls übergeben wird. Die Anfragen enthalten einmal die Archivanfragen und als zweites Tickets, die dem Archiv erlauben weitere Datensätze zu verschicken.
      Parameters:
      archiveConnection - Eine Verbindung auf der Datensätze verschickt werden sollen
      archiveSystem - Das Archiv, für das die Datensätze bestimmt sind
  • Method Details

    • request

      Diese Methode stellt eine Anfrage an das Archiv. Da eine Liste mit Objekten, die angefragt werden sollen, zur Verfügung gestellt wird, werden auch soviele Streams bereitgestellt, wie die Liste Einträge hat.
      Specified by:
      request in interface ArchiveRequestManager
      Parameters:
      priority - Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)
      specs - Eine Liste von Objekten, die alle Informationen enthalten, die zur Bearbeitung der Archivanfrage nötig sind. Für jedes Objekt der Liste wird ein Stream bereitgestellt, der die geforderten Informationen enthält.Wird eine leere Liste übergeben, wird das Objekt, das die Antwort auf diese Anfrage enthält, ein Array mit Streams zurückgegbene, das ebenfalls leer ist.
      Returns:
      Ein Objekt, das die Möglichkeit bietet zu prüfen ob die Anfrage erfolgreich war oder ob die Anfrage fehlgeschlagen ist. War die Anfrage erfolgreich, so kann das Objekt die Streams zur weiteren Bearbeitung weitergeben. War die Liste specs leer, ist das Array, das die Streams darstellt, ebenfalls leer.
      Throws:
      IllegalStateException - Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.
    • request

      Diese Methode stellt eine Anfrage an das Archiv. Da nur ein Objekt angefragt wird, steht auch nur ein Stream zur Verfügung, der Daten über das Objekt übermittelt
      Specified by:
      request in interface ArchiveRequestManager
      Parameters:
      priority - Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)
      spec - Ein Objekt, das alle Informationen enthält, die zur Bearbeitung der Archivanfrage nötig sind.
      Returns:
      Ein Objekt, das die Möglichekit bietet zu prüfen ob die Anfrage erfolgreich war oder ob die Anfrage fehlgeschlagen ist. War die Anfrage erfolgreich, so kann das Objekt die Streams zur weiteren Bearbeitung weitergeben.
      Throws:
      IllegalStateException - Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.
    • setReceiveBufferSize

      public void setReceiveBufferSize(int numberOfBytes)
      Die Puffergröße (in Byte) des Empfängers auf einen anderen Wert als den default Wert setzen. Der default Wert wird vom Archiv aus der Konfiguration ermittelt.
      Specified by:
      setReceiveBufferSize in interface ArchiveRequestManager
      Parameters:
      numberOfBytes -
    • dataReceiver

      public void dataReceiver(Data data)
      Diese Methode analisiert die Daten und ruft die passenden Methoden auf, die die Daten weiter reichen oder verarbeiten um sie dann weiter zu reichen. Falls ein Paket vom falschen Typ empfangen wird, wird eine entsprechende Exception geworfen.
      Parameters:
      data - Datensatz eines Archivs
    • isIncludingRequestedArchiveData

      public boolean isIncludingRequestedArchiveData()
      Gibt true zurück, wenn nachgeforderte Archivdaten defaultmäßig mit zurückgeliefert werden sollen, selbst wenn sie nicht angefordert wurden.
      Specified by:
      isIncludingRequestedArchiveData in interface ArchiveRequestManager
      Returns:
      true, wenn nachgeforderte Archivdaten defaultmäßig mit zurückgeliefert werden sollen, sonst false (Default = true)
      Since:
      3.16
    • setIncludeRequestedArchiveData

      public void setIncludeRequestedArchiveData(boolean includeRequestedArchiveData)
      Setzt, ob nachgelieferte Daten defaultmäßig (d.h. ohne Angabe von ArchiveDataKindCombination.requested() o.ä.) mit zurückgeliefert werden sollen, wenn Online-daten abgefragt werden.
      Specified by:
      setIncludeRequestedArchiveData in interface ArchiveRequestManager
      Parameters:
      includeRequestedArchiveData - Ob nachgeforderte Daten mit zurückgeliefert werden sollen. (Default = true)
      Since:
      3.16
    • requestInfo

      Start einer Archivinformationsanfrage an das Archivsystem. Diese Methode liefert ein Objekt zurück, über das asynchron auf das Ergebnis der Archivinformationsanfrage zugegriffen werden kann..
      Specified by:
      requestInfo in interface ArchiveRequestManager
      Parameters:
      spec - Spezifikation der Archivdaten zu denen Information gewünscht werden.
      Returns:
      Ergebnisobjekt über das asynchron auf die gewünschten Informationen zugegriffen werden kann.
    • subscribeReceiver

      public void subscribeReceiver(DatasetReceiverInterface receiver, SystemObject object, DataDescription dataDescription, ReceiveOptions options, HistoryTypeParameter historyType, long history)
      Description copied from interface: ArchiveRequestManager
      Die Implementation dieser Methode meldet sich als Empfänger von aktuellen Daten an. Die zurückgegebenen Datensätze unterscheiden sich von einer "normalen" Anmeldung als Empfänger, da Archivdaten zeitlich vor die aktuellen Daten gemischt werden. Der Benutzer legt dabei fest wie gross der Zeitraum sein soll, der vor die aktuellen Daten gemischt werden soll. Der Zeitraum wird als "Zeitspanne" oder als "Anzahl Datensätze" angegeben.
      Ist kein Archivsystem vorhanden oder bei der Archivanfrage tritt ein Fehler auf, werden nur die aktuellen Daten zurückgegeben.
      Specified by:
      subscribeReceiver in interface ArchiveRequestManager
      Parameters:
      receiver - Objekt, das Methoden zur Verfügung stellt um den Strom aus historischen und aktuellen Daten entgegen zu nehmen
      object - System-Objekt für die die spezifizierten Daten anzumelden sind
      dataDescription - Beschreibende Informationen zu den anzumeldenden Daten
      options - Für die Anmeldung zu verwendende Optionen
      historyType - HistoryTypeParameter.TIME = Der Parameter history bezieht sich auf einen Zeitraum, der vor den aktuellen Daten liegen soll (in ms); HistoryTypeParameter.INDEX = Der Parameter history bezieht sich auf die Anzahl Datensätze, die mindestens vor den aktuellen Daten liegen sollen
      history - Zeitraum der Archivdaten in Millisekunden, die vor den ersten aktuellen Datensätzen liegen
    • unsubscribeReceiver

      public void unsubscribeReceiver(DatasetReceiverInterface receiver, SystemObject object, DataDescription dataDescription)
      Description copied from interface: ArchiveRequestManager
      Specified by:
      unsubscribeReceiver in interface ArchiveRequestManager
      object - System-Objekt für die die spezifizierten Daten angemeldet wurden
      dataDescription - Beschreibende Informationen zu den angemeldeten Daten
    • requestInfo

      Start einer Archivinformationsanfrage an das Archivsystem. Diese Methode liefert ein Objekt zurück, über das asynchron auf das Ergebnis der Archivinformationsanfrage zugegriffen werden kann..
      Specified by:
      requestInfo in interface ArchiveRequestManager
      Parameters:
      specs - Liste mit Spezifikationen der Archivdaten zu denen Information gewünscht werden
      Returns:
      Ergebnisobjekt über das asynchron auf die gewünschten Informationen zugegriffen werden kann.
    • getNumArchiveQueries

      public ArchiveNumQueriesResult getNumArchiveQueries()
      Description copied from interface: ArchiveRequestManager
      Gibt Informationen über die Anzahl Anfragen zurück, die eine Applikation gleichzeitig stellen darf. Wenn die Anfrage fehlschlägt (ArchiveQueryResult.isRequestSuccessful() liefert false zurück und es gibt eine entsprechende Fehlermeldung) kann davon ausgegangen werden, dass eine ältere Archivsystem-Version eingesetzt wird und maximal 5 gleichzeitige Anfragen pro Applikation zulässig sind.
      Specified by:
      getNumArchiveQueries in interface ArchiveRequestManager
      Returns:
      Ergebnisobjekt, über dass Informationen zu der maximalen Anzahl Anfragen pro Applikation abgefragt werden können.
    • savePersistentData

      public ArchiveQueryResult savePersistentData()
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem Archivdaten der Sicherung ArchiveFileSaver zu übergeben. Eine Applikation ruft diese Methode auf, um alle Archivdaten, die gesichert werden können, zu sichern. Eine Implementierung dieser Methode sollte ohne zu blockieren ein Objekt zurückliefern über das asynchron auf das Ergebnis der Anfrage zugegriffen werden kann.
      Specified by:
      savePersistentData in interface ArchiveRequestManager
      Returns:
      Ergebnisobjekt über das Informationen über den Zustand des Auftrags abgefragt werden können
    • requestData

      public ArchiveQueryResult requestData(Collection<ArchiveInformationResult> requiredData, Collection<SystemObject> requestedArchives)
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen.
      Specified by:
      requestData in interface ArchiveRequestManager
      Parameters:
      requiredData - Datenidentifikation(en), die nachgefordert werden sollen. Jede Datenidentifikation speichert zusätzlich den Zeitbereich, in dem Daten zu dieser Datenidentifikation angefordert werden soll. Es muss mindestens eine Datenidentifikation vorhanden sein.
      requestedArchives - Archivsystem(e), bei denen Daten angefordert werden. Ist diese Liste leer werden alle Archivsystem angefragt, die beim automatischen Nachfordern angefragt werden.
      Returns:
      Ergebnisobjekt, über das Informationen über den Zustand des Auftrags abgefragt werden können
    • requestData

      public ArchiveQueryResult requestData(long startTime, long endTime, Collection<SystemObject> requestedArchives)
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen. Es werden alle Datenidentifikationen angefragt, die auch beim automatischen Nachfordern angefragt werden.
      Specified by:
      requestData in interface ArchiveRequestManager
      Parameters:
      startTime - Startzeitpunkt, ab dem Daten nachgefordert werden
      endTime - Endzeitpunkt, bis zu dem Daten nachgefordert werden
      requestedArchives - Archivsysteme die angefragt werden. Ist die Liste leer werden alle Archivsysteme angefragt, die beim automatischen Nachfordern angefragt werden
      Returns:
      Ergebnisobjekt, über das Informationen über den Zustand des Auftrags abgefragt werden können
    • restorePersistentData

      public ArchiveQueryResult restorePersistentData(List<ArchiveInformationResult> requiredData)
      Diese Methode beauftragt das Archivsystem bestimmten Daten, die sich nicht im direkten Zugriff befinden, von der Sicherung wieder in den direkten Zugriff des Archivsystems zu bringen.
      Specified by:
      restorePersistentData in interface ArchiveRequestManager
      Parameters:
      requiredData - Zeitbereiche, die wieder in den direkten Zugriff des Archivsystems gebracht werden sollen
      Returns:
      Ergebnisobjekt über das asynchron auf die gewünschten Informationen zugegriffen werden kann.
    • deleteDataSimulationVariant

      public ArchiveQueryResult deleteDataSimulationVariant(short simulationVariant)
      Diese Methode beauftragt das Archivsystem alle Daten, die zu einer bestimmten Simulationsvariante gehören, zu löschen.
      Specified by:
      deleteDataSimulationVariant in interface ArchiveRequestManager
      Parameters:
      simulationVariant - Simulationsvariante von der alle Daten aus dem Archivsystem entfernt werden sollen
      Returns:
      Ergebnisobjekt über das asynchron auf die gewünschten Informationen zugegriffen werden kann.
    • increaseDeleteTime

      public ArchiveQueryResult increaseDeleteTime(List<ArchiveInformationResult> requiredData, long timePeriod)
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem den Löschzeitpunkt der angegebenen Zeitbereiche zu verlängern. Die Methode wird von einer Applikation aufgerufen, um benötigte Zeitbereiche länger als vorgesehen im direkten Zugriff des Archivsystems zu halten.
      Specified by:
      increaseDeleteTime in interface ArchiveRequestManager
      Parameters:
      requiredData - Zeitbereiche, die länger im direkten Zugriff des Archivsystems bleiben sollen
      timePeriod - Zeitspanne, die die ausgewählten Daten länger im direkten Zugriff des Archivsystem bleiben sollen (in ms)
      Returns:
      Ergebnisobjekt, über das Informationen über den Zustand des Auftrags abgefragt werden können
    • deleteData

      public ArchiveQueryResult deleteData(List<ArchiveInformationResult> dataDisposedToDelete, boolean deleteImmediately)
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem die angegebenen Zeitbereiche ohne Rücksicht auf den mit ArchiveRequestManager.increaseDeleteTime(java.util.List<de.bsvrz.dav.daf.main.archive.ArchiveInformationResult>, long) festgelegten Wert zu löschen. Das Löschen der Zeitbereiche wird dabei in zwei Varianten unterteilt. In der ersten Variante werden die Zeitbereiche umgehend aus dem direkten Zugriff des Archivsystems entfernt. In der zweiten Variante werden die Zeitbereiche nur als "zu löschend" markiert, sobald das "automatische Löschen" des Archivsystems angstoßen wird (dies geschieht zyklisch), werden die Zeitbereiche entfernt.

      Bei allen Löschoperationen, die durch diesen Methodenaufruf ausgelöst werden, muss darauf geachtet werden, dass der Vorhaltezeitraum der Zeitbereiche abgelaufen sein muss und das die Zeitbereiche gesichert wurden, falls diese gesichert werden sollten. Wird gegen eine diese Forderungen verstossen, wird der angegebene Zeitbereich nicht gelöscht.

      Specified by:
      deleteData in interface ArchiveRequestManager
      Parameters:
      dataDisposedToDelete - Zeitbereich(e), die gelöscht werden sollen
      deleteImmediately - true = Variante 1, die Zeitbereiche werden umgehend aus dem direkten Zugriff des Archivsystems entfernt; false = Variante 2, die Zeitbereiche werden nur als "zu löschend" markiert und später aus dem direkten Zugriff des Archivsystems entfernt
      Returns:
      Ergebnisobjekt, über das Informationen über den Zustand des Auftrags abgefragt werden können
    • archiveFileSaverAlignment

      public ArchiveQueryResult archiveFileSaverAlignment(int volumeIdTypB)
      Description copied from interface: ArchiveRequestManager
      Beauftragt das Archivsystem seine Informationen zu gespeicherten Daten mit einem Speichermedium Typ B ArchiveFileSaver abzugleichen. Dies kann nötig werden, wenn die eindeutigen Identifizierungen der Speichermedien von Typ B durch die Sicherung geändert wurden (Beispiel: Die Daten wurden vorher auf CD gespeichert, nun werden die Daten auf DVD gespeichert und die alten Datenbestände auf DVD umkopiert, somit fallen mehrere CDŽs auf eine DVD und die eindeutigen Identifizierungen der CDŽs sind nutzlos. Die eindeutigen Identifizierungen der CDŽs wurde aber vom Archivsystem gespeichert und müssen folglich abgeglichen werden).
      Specified by:
      archiveFileSaverAlignment in interface ArchiveRequestManager
      Parameters:
      volumeIdTypB - Eindeutige Identifikation eines Speichermediums Typ B
      Returns:
      Ergebnisobjekt, über das Informationen über den Zustand des Auftrags abgefragt werden können
    • waitForConnection

      public void waitForConnection()
    • isArchiveAvailable

      public boolean isArchiveAvailable()
      Description copied from interface: ArchiveRequestManager
      Stellt fest ob das Archivsystem über den Datenverteiler derzeit erreichbar ist. Eine positive/negative Antwort ist keine Garantie, dass dieser Zustand auch in Zukunft gültig ist/bleibt.
      Specified by:
      isArchiveAvailable in interface ArchiveRequestManager
      Returns:
      true = Das Archivsystem ist derzeit erreichbar, es können alle im Interface spezifizierten Methoden benutzt werden; false = Das Archivsystem ist derzeit nicht erreichbar
    • addArchiveAvailabilityListener

      public void addArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
      Description copied from interface: ArchiveRequestManager
      Das übergebene Objekt listener wird benachrichtigt sobald sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert.
      Specified by:
      addArchiveAvailabilityListener in interface ArchiveRequestManager
      Parameters:
      listener - Objekt, das benutzt wird um Änderungen der Erreichbarkeit des Archivsystems über den Datenverteiler anzuzeigen
    • removeArchiveAvailabilityListener

      public void removeArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
      Description copied from interface: ArchiveRequestManager
      Das Objekt, das mit ArchiveRequestManager.addArchiveAvailabilityListener(de.bsvrz.dav.daf.main.archive.ArchiveAvailabilityListener) übergeben wurde, wird nicht mehr benachrichtigt sobald sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert.
      Specified by:
      removeArchiveAvailabilityListener in interface ArchiveRequestManager
      Parameters:
      listener - Objekt, das nicht mehr benachrichtigt werden soll, wenn sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert