Interface PersistentDataContainer


  • public interface PersistentDataContainer
    Schnittstelle mit der das Persistenzmodul die Grundfunktionalität eines Archivdatensatzcontainers zur Verfügung stellt (siehe auch Technische Anforderungen ArS). Konkrete Objekte dieses Typs werden von der Methode PersistenceModule.getContainer(long) des Persistenz-Moduls erzeugt.
    • Method Detail

      • getContainerId

        long getContainerId()
        Bestimmt die eindeutige laufende Nummer dieses Datensatzcontainers.
        Returns:
        Eindeutige laufende Container-Nummer.
      • getDataContainerIdentification

        DataContainerIdentification getDataContainerIdentification()
        Bestimmt die identifizierenden Informationen des Containers (Systemobjekt, Attributgruppe, Aspekt, Simulationsvariante und Datensatzart).
        Returns:
        Identifizierende Informationen des Containers.
      • getSerializerVersion

        int getSerializerVersion()
        Bestimmt die Version des Serialisierers, der beim Serialisieren der Datensätze dieses Containers benutzt wurde.
        Returns:
        Version des Serialisierers
        See Also:
        Serializer.getVersion()
      • storeData

        void storeData​(DataTiming dataTiming,
                       DataState dataState,
                       byte[] dataBytes,
                       boolean flush)
                throws java.io.IOException
        Speichert einen Datensatz mit seinen Headerinformationen (Zeitstempel, laufende Nummer und Kompressionsart) im Container ab. Weitere Headerinformationen (Objekt-Id, Attributgruppe, Aspekt etc.) werden nicht mit jedem Datensatz gespeichert, weil sie sich innerhalb eines Containers nicht verändern. Bezüglich eines Containers kann davon ausgegangen werden, dass die Daten- und Archivzeitstempel sowie der Datensatzindex in aufeinanderfolgenden Aufrufen der Methode monoton steigend sind. Das übergebene Bytearray kann bei Bedarf von einer Implementierung komprimiert werden. Über ein Flag kann bei Bedarf spezifiziert werden, ob die Speicherung synchron erfolgen soll und abgeschlossen sein muss, bevor die Methode sich beendet. Dies wird vom ContainerManager gesetzt, wenn der Datensatz nach dem Speichern quittiert werden soll. Wenn das Flag nicht gesetzt ist, kann eine Implementierung die Speicherung bei Bedarf asynchron bzw. gepuffert durchführen.
        Parameters:
        dataTiming - Datenzeitstempel, Archivzeitstempel und Datensatzindex des Datensatzes.
        dataState - Typ des Datensatzes (Nutzdaten, keine Daten, keine Quelle, potentielle Datenlücke etc.).
        dataBytes - Byte-Array mit den unkomprimierten, serialisierten Nutzdaten oder null im Falle eines leeren Datensatzes ohne Nutzdaten.
        flush - true, wenn die Speicherung synchron durchgeführt werden soll, sonst false.
        Throws:
        java.io.IOException - Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler. Die Daten konnten nicht geschrieben werden.
      • finalizeAllData

        void finalizeAllData()
                      throws java.io.IOException
        Dieser Aufruf signalisiert dem Persistenzmodul, dass kein weiterer Datensatz mehr in diesen Container abgelegt wird. Nach dem Aufruf dieser Methode wird die Methode storeData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean) für diesen Container nicht mehr aufgerufen.

        Throws:
        java.io.IOException - Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler. Der Container konnte nicht abgeschlossen werden.
      • getMinimumDataTiming

        DataTiming getMinimumDataTiming()
        Bestimmt die minimalen Werte von Datenzeitstempel, Archivzeitstempel und Datensatzindex aller in diesem Container mit storeData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean) gespeicherten Daten. Nach einem unkontrollierten Beenden des Archivsystems wird diese Methode in der Initialisierungsphase für jeden noch nicht abgschlossenen Container aufgerufen um die notwendigen Verwaltungsinformationen zu aktualisieren.
        Returns:
        Datenstruktur mit den minimalen Werten von Datenzeitstempel, Archivzeitstempel und Datensatzindex.
      • getMaximumDataTiming

        DataTiming getMaximumDataTiming()
        Bestimmt die maximalen Werte von Datenzeitstempel, Archivzeitstempel und Datensatzindex aller in diesem Container mit storeData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean) gespeicherten Daten. Nach einem unkontrollierten Beenden des Archivsystems wird diese Methode in der Initialisierungsphase für jeden noch nicht abgschlossenen Container aufgerufen um die notwendigen Verwaltungsinformationen zu aktualisieren.
        Returns:
        Datenstruktur mit maximalen Werte von Datenzeitstempel, Archivzeitstempel und Datensatzindex.
      • getDataCount

        int getDataCount()
        Bestimmt die Anzahl Datensätze in diesem Container Nach einem unkontrollierten Beenden des Archivsystems wird diese Methode in der Initialisierungsphase für jeden noch nicht abgschlossenen Container aufgerufen um die notwendigen Verwaltungsinformationen zu aktualisieren.
        Returns:
        Anzahl der Datensätze dieses Containers.
      • getStorageSize

        long getStorageSize()
        Bestimmt den Speicherbedarf des Containers. Diese Methode wird vom ContainerManager bei der Entscheidung ob ein Container abgeschlossen und ein neuer Container angelegt werden soll verwendet. Ein Implementierung sollte den vom Container beanspruchten Platz nach eventueller Komprimierung der Datensätze ermitteln und zurückgeben.
        Returns:
        Speicherbedarf dieses Containers in Anzahl Bytes.
      • getSaveStatus

        boolean getSaveStatus()
        Der Rückgabewert dieser Methode gibt darüber Auskunft, ob der Container der Sicherung übergeben werden soll.
        Returns:
        true = Der Container soll der Sicherung übergeben werden. false = Der Container soll nicht der Sicherung übergeben werden
      • containerSavedTypeB

        boolean containerSavedTypeB()
        Die Implementation dieser Methode zeigt an, ob der Container von der Sicherung auf einem Speichermedium vom Typ B gesichert wurde.
        Returns:
        true = Der Container wurde der Sicherung übergeben und diese hat den Container auf einem Speichermedium vom Typ B gesichert; false = Der Container wurde noch nicht von der Sicherung auf einem Speichermedium vom Typ B gesichert
      • getDeleteDate

        long getDeleteDate()
        Der Rückgabewert dieser Methode bestimmt, wann der Container zu löschen ist. Dieser Wert entspricht dem Vorhaltezeitraum in den technischen Anforderungen. Ist der Vorhaltezeitraum abgelaufen wird der Container vom Speichermedium Typ A entfernt.
        Returns:
        Vorhaltezeitraum
      • getVolumeIdTypeB

        int getVolumeIdTypeB()
                      throws java.lang.IllegalStateException
        Die Implemetierung dieser Methode gibt die eindeutige Identifizierung des Speichermediums vom Typ B zurück, auf dem der Container gesichert wurde.
        Returns:
        Eindeutige Identifizierung des Speichermediums vom Typ B, auf dem der Container gesichert wurde
        Throws:
        java.lang.IllegalStateException - Der Container wurde bisher noch nicht auf einem Speichermedium vom Typ B gesichert, somit ist die eindeutige Identifizierung unbekannt
      • saveAllData

        int saveAllData()
                 throws java.io.IOException
        Sichert alle Datensätze des Containers auf einem externen Medium.
        Returns:
        Name des Mediums auf das der Container gespeichert wurde. TODO: Notwendige Interaktionen mit Benutzer klären. TODO: Exceptions mit entsprechenden Meldungen für Fehler (kein Medium, Medium voll etc.) definieren.
        Throws:
        java.io.IOException
      • deleteAllData

        boolean deleteAllData()
        Löscht den gesamten Container mit allen gespeicherten Datensätzen vom Speichermedium Typ A.
        Returns:
        true = Der Container konnte gelöscht werden; false = Der Container konnte nicht gelöscht werden
      • loadAllData

        void loadAllData​(int mediaName)
                  throws java.io.IOException,
                         BadVolumeException
        Lädt alle Datensätze eines Containers von einem externen Medium.
        Parameters:
        mediaName - Name des Mediums auf dem die Datensätze vorher mit der Methode saveAllData() gesichert wurden.
        Throws:
        java.io.IOException - Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler, der geforderte Container nicht wiederhergestellt werden
        BadVolumeException - Auf das Speichermedium der Sicherung konnte nicht Zugegriffen werden, obwohl sich dieses im Zugriff der Sicherung befindet
      • flush

        void flush()
            throws java.io.IOException
        Sichert alle Datensätze, die vom Container gepuffert wurden. Nachdem diese Methode verlassen wird, sind alle Datensätze des Containers persistent auf einem Datenträger gespeichert und befinden sich im direkten Zugriff des Archivsystems.
        Throws:
        java.io.IOException - Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler, gepufferte Datensätze konnten nicht geschrieben werden.
      • isContainerFinalized

        boolean isContainerFinalized()
        Die Implemetierung dieser Methode gibt den Zustand des Containers wieder, wurde der Container mit der Methode finalizeAllData() abgeschlossen, wird der Wert true zurückgegeben in allen anderen Fällen der Wert false.
        Returns:
        true = der Container wurde abgeschlossen; false = der Container wurde noch nicht abgeschlossen