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 Summary
Modifier and TypeMethodDescriptionboolean
Die Implementation dieser Methode zeigt an, ob der Container von der Sicherung auf einem Speichermedium vom Typ B gesichert wurde.boolean
Löscht den gesamten Container mit allen gespeicherten Datensätzen vom Speichermedium Typ A.void
Dieser Aufruf signalisiert dem Persistenzmodul, dass kein weiterer Datensatz mehr in diesen Container abgelegt wird.void
flush()
Sichert alle Datensätze, die vom Container gepuffert wurden.long
Bestimmt die eindeutige laufende Nummer dieses Datensatzcontainers.Bestimmt die identifizierenden Informationen des Containers (Systemobjekt, Attributgruppe, Aspekt, Simulationsvariante und Datensatzart).int
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.long
Der Rückgabewert dieser Methode bestimmt, wann der Container zu löschen ist.Bestimmt die maximalen Werte von Datenzeitstempel, Archivzeitstempel und Datensatzindex aller in diesem Container mitstoreData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean)
gespeicherten Daten.Bestimmt die minimalen Werte von Datenzeitstempel, Archivzeitstempel und Datensatzindex aller in diesem Container mitstoreData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean)
gespeicherten Daten.boolean
Der Rückgabewert dieser Methode gibt darüber Auskunft, ob der Container der Sicherung übergeben werden soll.int
Bestimmt die Version des Serialisierers, der beim Serialisieren der Datensätze dieses Containers benutzt wurde.long
Bestimmt den Speicherbedarf des Containers.int
Die Implemetierung dieser Methode gibt die eindeutige Identifizierung des Speichermediums vom Typ B zurück, auf dem der Container gesichert wurde.boolean
Die Implemetierung dieser Methode gibt den Zustand des Containers wieder, wurde der Container mit der MethodefinalizeAllData()
abgeschlossen, wird der Wert true zurückgegeben in allen anderen Fällen der Wert false.void
loadAllData
(int mediaName) Lädt alle Datensätze eines Containers von einem externen Medium.int
Sichert alle Datensätze des Containers auf einem externen Medium.void
storeData
(DataTiming dataTiming, DataState dataState, byte[] dataBytes, boolean flush) Speichert einen Datensatz mit seinen Headerinformationen (Zeitstempel, laufende Nummer und Kompressionsart) im Container ab.
-
Method Details
-
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:
-
storeData
void storeData(DataTiming dataTiming, DataState dataState, byte[] dataBytes, boolean flush) throws 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 odernull
im Falle eines leeren Datensatzes ohne Nutzdaten.flush
-true
, wenn die Speicherung synchron durchgeführt werden soll, sonstfalse
.- Throws:
IOException
- Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler. Die Daten konnten nicht geschrieben werden.
-
finalizeAllData
Dieser Aufruf signalisiert dem Persistenzmodul, dass kein weiterer Datensatz mehr in diesen Container abgelegt wird. Nach dem Aufruf dieser Methode wird die MethodestoreData(de.bsvrz.dav.daf.main.impl.archive.DataTiming, de.bsvrz.dav.daf.main.DataState, byte[], boolean)
für diesen Container nicht mehr aufgerufen.- Throws:
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 mitstoreData(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 mitstoreData(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
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:
IllegalStateException
- Der Container wurde bisher noch nicht auf einem Speichermedium vom Typ B gesichert, somit ist die eindeutige Identifizierung unbekannt
-
saveAllData
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:
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
Lädt alle Datensätze eines Containers von einem externen Medium.- Parameters:
mediaName
- Name des Mediums auf dem die Datensätze vorher mit der MethodesaveAllData()
gesichert wurden.- Throws:
IOException
- Beim Zugriff auf die physische Abbildung des Containers auf einem Speichermedium kam es zu einem Fehler, der geforderte Container nicht wiederhergestellt werdenBadVolumeException
- Auf das Speichermedium der Sicherung konnte nicht Zugegriffen werden, obwohl sich dieses im Zugriff der Sicherung befindet
-
flush
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:
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 MethodefinalizeAllData()
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
-