de.bsvrz.dav.daf.main.impl.archive
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.

Author:
Kappich+Kniß Systemberatung Aachen (K2S), Roland Schmitz (rs)

Method Summary
 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.
 Collection<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 Methode ArchiveFileSaver.saveFile(java.lang.String, java.io.File) dort abgelegt wurden.
 Collection<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(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(ArgumentList argumentList)
                    throws ClassNotFoundException,
                           IllegalAccessException,
                           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:
ClassNotFoundException - Die angegebene Klasse, die das PersistenceModule implementieren soll, konnte nicht gefunden werden
IllegalAccessException - Die angegebene Klasse, die das PersistenceModule implementieren soll, ist nicht im Zugriff der aufrufenden Klasse
InstantiationException - Die angegebene Klasse, die das PersistenceModule implementieren soll, kann nicht instanziiert werden

getContainer

PersistentDataContainer getContainer(long containerId)
                                     throws IOException,
                                            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:
IOException - Der Container ist auf dem benutzten Speichermedium nicht mehr vorhanden (gelöscht, verschoben, umbenannt, ...)
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 IOException,
                                               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 identifiziert
containerIdentification - Eindeutige Identifizierung des Containers
holdBackTime - Vorhaltezeitraum des Containers
saveTypeB - 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:
IOException - Der Container konnte auf dem Speichermedium nicht erzeugt werden
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 Typ DataState.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 IOException,
                                               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 Containers
volumeId - Eindeutige Identifiktation des Speichermediums auf dem der Container gesichert wurde. Der Container wurde mit dem Aufruf PersistentDataContainer.saveAllData() auf dem Speichermedium Typ B gesichert.
Returns:
Archivdatensatzcontainer
Throws:
IOException - Fehler beim Zugriff auf die Datei, die von der Sicherung zurückgegeben wurde/sollte
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

Collection<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

Collection<String> getFiles(int volumeId)
                            throws IOException,
                                   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 Methode ArchiveFileSaver.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:
IOException - Der Zugriff auf die Datei über das Speichermedium der Sicherung ist fehlgeschlagen
IllegalArgumentException - Die angegebene Datei war auf dem angegebenen Datenträger nicht zu finden
BadVolumeException - 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 in Byte.
Returns:
true = Der geforderte Speicherplatz steht der Persistenz zur Verfügung; false = Der geforderte Speicherplatz steht der Persistenz nicht zur Verfügung.