Interface PersistenceModule
-
public interface PersistenceModule
Ein Objekt, das dieses Interface implementiert, stellt einem Archivsystem das sogenannte "PersistenceModule" zur Verfügung. Die Aufgabe des "PersistenceModule" ist es, Datensätze zu speichern und dieser einer Verwaltung zur Verfügung zu stellen.Eine weitere Aufgabe des "PersistenceModule" ist es, die gespeicherten Datensätze persistent zu speichern. Diese Aufgabe wird von einer Implementation des Interface
ArchiveFileSaver
übernommen, diese wird auch als Sicherung bezeichnet.
-
-
Method Summary
Modifier and Type Method Description boolean
checkPersistenceCapacity(long requiredCapacity)
Die Implementation dieser Methode überprüft, ob für die Persistenz genügend freier Speicherplatz zur Verfügung steht, der zum Archivieren von Archivdaten genutzt werden kann.PersistentDataContainer
createContainer(long containerId, DataContainerIdentification containerIdentification, long holdBackTime, boolean saveTypeB, int serializerVersion)
Diese Methode erzeugt ein Objekt, über das auf einen Archivdatensatzcontainer zugegriffen werden kann.PersistentContainerStreamSupplier
getAllContainers()
Die Implementation dieser Methode gibt ein Objekt zurück, über das alle Container, die sich im direkten Zugriff der Persistenz befinden, angefordert werden können.PersistentDataStreamSupplier[]
getArchiveDataStreams(PersistentDataRequest[] requests)
Startet eine Archivabfrage.PersistentDataContainer
getContainer(long containerId)
Gibt ein Objekt zurück, über das auf einen Archivdatensatzcontainer zugegriffen werden kann.java.util.Collection<java.lang.String>
getFiles(int volumeId)
Die Implementation dieser Methode gibt alle Dateinamen zurück, die sich auf einem Speichermedium des Typs B der Sicherung befinden und mit der MethodeArchiveFileSaver.saveFile(java.lang.String, java.io.File)
dort abgelegt wurden.java.util.Collection<java.lang.Integer>
getVolumes()
Die Implementation dieser Methode gibt die eindeutige Identifikation aller Speichermedien zurück, die sich im direkten Zugriff der Sicherung befinden.void
initialize(ClientDavInterface connection)
Die Implementation dieser Methode übernimmt ein Objekt vom Typ ClientDavInterface und stellt dieses intern zur Verfügung.void
parseArguments(de.bsvrz.sys.funclib.commandLineArgs.ArgumentList argumentList)
Diese Methode wird in der Initialisierungsphase aufgerufen um dem Persistenzmodul die Möglichkeit zu geben, Aufrufparameter der Applikation zu lesen und zu interpretieren.PersistentDataContainer
reloadContainer(long containerId, int volumeId)
Die Implementation dieser Methode lädt einen Container aus der Sicherung.
-
-
-
Method Detail
-
parseArguments
void parseArguments(de.bsvrz.sys.funclib.commandLineArgs.ArgumentList argumentList) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException
Diese Methode wird in der Initialisierungsphase aufgerufen um dem Persistenzmodul die Möglichkeit zu geben, Aufrufparameter der Applikation zu lesen und zu interpretieren.- Parameters:
argumentList
- Aufrufparameter der Applikation.- Throws:
java.lang.ClassNotFoundException
- Die angegebene Klasse, die das PersistenceModule implementieren soll, konnte nicht gefunden werdenjava.lang.IllegalAccessException
- Die angegebene Klasse, die das PersistenceModule implementieren soll, ist nicht im Zugriff der aufrufenden Klassejava.lang.InstantiationException
- Die angegebene Klasse, die das PersistenceModule implementieren soll, kann nicht instanziiert werden
-
getContainer
PersistentDataContainer getContainer(long containerId) throws java.io.IOException, java.lang.IllegalStateException
Gibt ein Objekt zurück, über das auf einen Archivdatensatzcontainer zugegriffen werden kann. Das zurückgegebene Objekt ermöglicht den Zugriff auf die ID des Container und auf die identifizierenden Informationen des Containers (Systemobjekt, Attributgruppe, Aspekt, Simulationsvariante und Datensatzart). Wesentliche Funktionen des Persistenzmoduls (z.B. das Archivieren von Online empfangenen Datensätzen) sind über entsprechende Methoden des zurückgegebenen Containerobjekts erreichbar.- Parameters:
containerId
- Eindeutige Nummer des Containers.- Returns:
- Archivdatensatzcontainer.
- Throws:
java.io.IOException
- Der Container ist auf dem benutzten Speichermedium nicht mehr vorhanden (gelöscht, verschoben, umbenannt, ...)java.lang.IllegalStateException
- Der Container ist zwar physisch vorhanden, konnte nicht mehr rekonstruiert werden (Daten im Container sind fehlerhaft und können nicht mehr ausgelesen/dekodiert werden)
-
createContainer
PersistentDataContainer createContainer(long containerId, DataContainerIdentification containerIdentification, long holdBackTime, boolean saveTypeB, int serializerVersion) throws java.io.IOException, java.lang.IllegalArgumentException
Diese Methode erzeugt ein Objekt, über das auf einen Archivdatensatzcontainer zugegriffen werden kann. Das zurückgegebene Objekt ermöglicht den Zugriff auf die ID des Container und auf die identifizierenden Informationen des Containers (Systemobjekt, Attributgruppe, Aspekt, Simulationsvariante und Datensatzart). Wesentliche Funktionen des Persistenzmoduls (z.B. das Archivieren von Online empfangenen Datensätzen) sind über entsprechende Methoden des zurückgegebenen Containerobjekts erreichbar.- Parameters:
containerId
- Eindeutiger Index, der den Container identifiziertcontainerIdentification
- Eindeutige Identifizierung des ContainersholdBackTime
- Vorhaltezeitraum des ContainerssaveTypeB
- Bestimmt ob der Container der Sicherung übergeben werden soll (true = ja; false = nein)serializerVersion
- Version mit der alle Datensätze des Containers serialisiert wurden- Returns:
- Archivdatensatzcontainer
- Throws:
java.io.IOException
- Der Container konnte auf dem Speichermedium nicht erzeugt werdenjava.lang.IllegalArgumentException
- Der Container konnte nicht erzeugt werden, da er bereits existiert
-
getArchiveDataStreams
PersistentDataStreamSupplier[] getArchiveDataStreams(PersistentDataRequest[] requests)
Startet eine Archivabfrage. Für jede Teilanfrage im übergebenen Array wird ein korrespondierendes Stream-Supplier-Objekt zurückgegeben. Je Teilanfrage können die Daten der Reihe nach vom entsprechenden Stream-Supplier-Objekt abgeholt werden. Die Reihenfolge der über einen Stream-Supplier zurückgegebenen Datensätzen ist in den Techischen Anforderungen zum Archivsystem detailliert beschrieben und kann über ein Attribut (PersistentDataRequest.isDelayedDataReorderedByDataTime()
) in der entsprechenden Teilanfrage beeinflusst werden. Je Stream-Supplier werden alle Datensätze im spezifizierten Intervall zurückgegeben. Dazu gehört auch der Datensatz der zu Beginn des Intervalls gültig ist. Dies ist i.a. nicht der erste Datensatz im Intervall, sondern der mit dem nächstkleineren Datensatzindex. Dieser hat i.a. einen Zeitstempel der vor dem angefragten Intervall liegt. Nach dem letzten Datensatz im Intervall wird ein Datensatz mit dem TypDataState.END_OF_ARCHIVE
zurückgegeben. Es ist zu beachten, das die Teilanfragen unabhängig voneinander und parallel bearbeitet werden müssen, da vom Abnehmer dynamisch gesteuert werden kann, in welcher Reihenfolge die entsprechender Stream-Supplier-Objekte in der Rückgabe ausgelesen werden. Weiterhin müssen mehrere Aufrufe parallel bearbeitet und die jeweiligen Ergebnis unabhängig voneinander abgefragt werden können.- Parameters:
requests
- Array mit den parallel zu verarbeitenden Teilanfragen.- Returns:
- Array, das je Teilanfrage ein Stream-Supplier-Objekt enthält, über das die Ergebnisse der Reihe nach ausgelesen werden können.
-
reloadContainer
PersistentDataContainer reloadContainer(long containerId, int volumeId) throws java.io.IOException, java.lang.IllegalStateException, BadVolumeException
Die Implementation dieser Methode lädt einen Container aus der Sicherung. Der Container wurde als Datei auf einem Speichermedium des Typs B abgelegt und wird dem PersistenceModule (Speichermedium Typ A) wieder zur Verfügung gestellt.- Parameters:
containerId
- Eindeutige Identifikation des ContainersvolumeId
- Eindeutige Identifiktation des Speichermediums auf dem der Container gesichert wurde. Der Container wurde mit dem AufrufPersistentDataContainer.saveAllData()
auf dem Speichermedium Typ B gesichert.- Returns:
- Archivdatensatzcontainer
- Throws:
java.io.IOException
- Fehler beim Zugriff auf die Datei, die von der Sicherung zurückgegeben wurde/solltejava.lang.IllegalStateException
- Der Container ist zwar physisch vorhanden, konnte nicht mehr rekonstruiert werden (Daten im Container sind fehlerhaft und können nicht mehr ausgelesen/dekodiert werden)BadVolumeException
- Das angegebene Speichermedium vom Typ B befindet sich nicht im direkten Zugriff der Sicherung
-
getVolumes
java.util.Collection<java.lang.Integer> getVolumes()
Die Implementation dieser Methode gibt die eindeutige Identifikation aller Speichermedien zurück, die sich im direkten Zugriff der Sicherung befinden.- Returns:
- Eindeutige Identifikation aller Speichermedien, die sich im direkten Zugriff der Sicherung befinden
-
getFiles
java.util.Collection<java.lang.String> getFiles(int volumeId) throws java.io.IOException, java.lang.IllegalArgumentException, BadVolumeException
Die Implementation dieser Methode gibt alle Dateinamen zurück, die sich auf einem Speichermedium des Typs B der Sicherung befinden und mit der MethodeArchiveFileSaver.saveFile(java.lang.String, java.io.File)
dort abgelegt wurden.- Parameters:
volumeId
- Eindeutige Identifikation des Speichermediums Typ B der Sicherung- Returns:
- Dateinamen aller Dateien, die auf dem gefordeten Speichermedium mit der Methode
ArchiveFileSaver.saveFile(java.lang.String, java.io.File)
gespeichert wurden - Throws:
java.io.IOException
- Der Zugriff auf die Datei über das Speichermedium der Sicherung ist fehlgeschlagenjava.lang.IllegalArgumentException
- Die angegebene Datei war auf dem angegebenen Datenträger nicht zu findenBadVolumeException
- Der angegebene Datenträger ist nicht mehr vorhanden oder nicht mehr im direkten Zugriff der Sicherung
-
getAllContainers
PersistentContainerStreamSupplier getAllContainers()
Die Implementation dieser Methode gibt ein Objekt zurück, über das alle Container, die sich im direkten Zugriff der Persistenz befinden, angefordert werden können.- Returns:
- Objekt, über das alle Container, die sich im direkten Zugriff der Persistenz befinden, angefordert werden können
-
initialize
void initialize(ClientDavInterface connection)
Die Implementation dieser Methode übernimmt ein Objekt vom Typ ClientDavInterface und stellt dieses intern zur Verfügung.- Parameters:
connection
- Objekt der Klasse ClientDavInterface
-
checkPersistenceCapacity
boolean checkPersistenceCapacity(long requiredCapacity)
Die Implementation dieser Methode überprüft, ob für die Persistenz genügend freier Speicherplatz zur Verfügung steht, der zum Archivieren von Archivdaten genutzt werden kann.- Parameters:
requiredCapacity
- Angabe des Speicherplatzes der Persistenz, der der Implementation des Interfaces zum Speichern von Archivdaten zur Verfügung stehen muss. Die Angabe erfolgt inByte
.- Returns:
- true = Der geforderte Speicherplatz steht der Persistenz zur Verfügung; false = Der geforderte Speicherplatz steht der Persistenz nicht zur Verfügung.
-
-