de.bsvrz.ars.ars.persistence
Class PersistenceManager

java.lang.Object
  extended by de.bsvrz.ars.ars.persistence.PersistenceManager

public class PersistenceManager
extends java.lang.Object

Zentrale Persistenz-Verwaltung fuer die Archivierung von Daten auf einem Speichermedium vom Typ A (Festplatte) und die entsprechende Meta-Daten-Verwaltung.

Version:
$Revision: 1.2 $ / $Date: 2008/01/22 16:55:57 $ / ($Author: yvonnes $)
Author:
beck et al. projects GmbH, Thomas Schaefer, Alexander Schmidt

Field Summary
static java.lang.String ACTIVITY_FLAG_FILE_NAME
          Dateiname des Lock-Files des Archivsystems.
static java.lang.String[] DATAKIND_SUFFIX
          Verzeichnisnamen der Datensatzarten.
static java.lang.String REBUILDINDEX_FILE_FLAG_NAME
          Eine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index moeglicherweise (wg.
 
Constructor Summary
PersistenceManager(ArchiveManager archMgr, java.lang.String archPath)
          Erzeugt den Persistenz-Manager.
 
Method Summary
 void accessContainer(Task task, int cfIdx, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, long containerId)
          Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken.
 void accessContainer(Task task, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, long containerId)
          Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken.
 void accessContainer(Task task, java.lang.String didPath, long containerId)
          Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken.
 void accessContainerReadOnly(Task task, java.io.File contFile)
          Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken.
 void accessContainerReadOnly(Task task, int cfIdx, java.io.File contFile)
          Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken.
 void appendSerializedData(Task task)
          Haengt den uebergebenen, serialisierten Archivdatensatz an den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container an.
 void assignIndexes(DataIdentTree dit, ArchiveDataSpecification ads, ArchiveDataKind adk, Task task, byte[] tempMem)
          Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu.
 void assignIndexes(DataIdentTree dit, long objID, long atgID, long aspID, int sv, ArchiveDataKind adk, Task task, byte[] tempMem)
          Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu.
 void checkPersistenceDir(java.lang.String mode)
          Prueft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen.
 void closeContainer(Task task, DataIdentNode din, ArchiveDataKind adk)
          Schliesst die Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container.
 void closeContainerRecount(Task task, DataIdentNode din, ArchiveDataKind adk)
          Schliesst einen Container, indem jeder Datensatz-Header des Containers gelesen wird, um die Min-/Max-Werte und die Anzahl der Datensaetze zu bestimmen.
 boolean closeIndex(DataIdentNode din, long objID, long atgID, long aspID, int sv, ArchiveDataKind adk, byte[] tmpMem)
          Schliesst die Indexe der Datensatzart des DataIndentNode.
 int countContainerEntries(Task task)
          Zaehlt die Anzahl der Datensaetze in dem mit einer accessContainer()-Methode im Zugriff befindlichen Container durch Iterieren ueber die Datensaetze in der Container-Datei.
 void createContainer(Task task, boolean toSave)
          Erzeugt eine neue Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container.
 java.lang.String createLockFile()
          Das Logfile isActive anlegen.
 void createRebuildIxdFlagFile(java.lang.String didPath)
          Legt im Verzeichnis der Datenidentifikation ein REBUILDINDEX_FILE_FLAG_NAME-Datei an.
 void deleteContainerData(Task task)
          Loescht alle Datensaetze eines Datencontainers, so dass lediglich der Header mit der Verwaltungs-Information in der Datei erhalten bleibt.
ACHTUNG:
Das Setzen des Header-Flags auf "geloescht" muss NACH dem Loeschen der Daten aus dem Container erfolgen!
 boolean deleteLockFile()
          Löscht das LogFile isActive, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder frei
 void deleteSimVar(long objId, long atgId, long aspId, int simVar)
          Diese Methode loescht das komplette Verzeichnis eines DataIdentNode mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensaetze einer Simulationsvariante geloescht.
 boolean existsContainer(Task task)
          Prueft ob bereits eine Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container existiert.
static long[] extractDIdFromPath(java.io.File path)
          Extrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Laenge 4 haben muss.
 ContainerDataIterator getArchiveData(Task task)
          Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
 ContainerDataIterator getArchiveData(Task task, boolean considerDeleted)
          Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
 ContainerDataIterator getArchiveData(Task task, int cfIdx)
          Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
 ContainerDataIterator getArchiveData(Task task, int cfIdx, boolean considerDeleted)
          Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
static ArchiveDataKind getArchiveDataKindFromDir(java.io.File dir)
           
 java.lang.String getArchivePath()
          Liefert den Wurzelpfad des Persistenzverzeichisses, der beim Systemstart in der Kommandozeile uebergeben wurde.
 ArchiveDataKind getContainerHeaderParamAsArchiveDataKind(Task task, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 boolean getContainerHeaderParamAsBoolean(Task task, int cfIdx, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 boolean getContainerHeaderParamAsBoolean(Task task, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 int getContainerHeaderParamAsInt(Task task, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 long getContainerHeaderParamAsLong(Task task, int cfIdx, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 long getContainerHeaderParamAsLong(Task task, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 java.lang.String getContainerHeaderParamAsString(Task task, int cfIdx, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 java.lang.String getContainerHeaderParamAsString(Task task, KeyValParam param)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.
 long getContainerSize(Task task)
          Ermittelt die Gesamtlänge des mit accessContainer()- im Zugriff befindlichen Containers.
static java.lang.String getContFileName(long containerId)
          Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
static long getContID(java.io.File file)
          Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
static long getContID(java.lang.String fileName)
          Liefert die Container-ID zum Namen der angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
 ContainerDataIterator getHdrData(Task task, int cfIdx)
          Liefert einen Iterator zum Durchlaufen der Min-/Maxwerte des Container-Headers Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.
static java.lang.String getIDPart(java.lang.String dirName)
           
 long getLargestContainerID(java.lang.String path)
          Liefert von allen Containerdateien im angegebenen Verzeichnis die hoechste Container-ID.
 long getLastContainerID()
           
 java.lang.String getPathName(ArchiveDataSpecification ads, ArchiveDataKind adk)
          Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart.
 java.lang.String getPathName(long objId, long atgId, long aspId, int sv)
          Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation.
 java.lang.String getPathName(long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind)
          Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart.
static java.lang.String getPathName(java.lang.String basePath, long objId, long atgId, long aspId, int sv)
          Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems.
static boolean isActivityFlagFile(java.lang.String name)
           
 boolean isContainerClosed(Task task)
          Prueft ob der mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierte Container bereits abgeschlossen ist.
 boolean isContainerClosed(Task task, int cfIdx)
          Prueft ob der mit accessContainer(Task, int, long, long, long, int, ArchiveDataKind, long) spezifizierte Container bereits abgeschlossen ist.
static boolean isContainerFile(java.io.File file)
          Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.
static boolean isIndexFile(java.lang.String name)
           
static boolean isRebuildIndexFlagFile(java.lang.String name)
           
static boolean isValidAspIdFolderName(java.lang.String dirName)
          Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Aspekt-ID repraesentiert.
static boolean isValidAtgIdFolderName(java.lang.String dirName)
          Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Attributgruppen-ID repraesentiert.
static boolean isValidDataKindFolderName(java.lang.String dirName)
           
static boolean isValidIDFolderName(java.lang.String dirName)
           
static boolean isValidObjIdFolderName(java.lang.String dirName)
          Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Objekt-ID repraesentiert.
static boolean isValidStorageArSFile(java.lang.String name)
           
static boolean isValidSvFolderName(java.lang.String dirName)
          Prueft, ob der gegebene Verzeichnisname ein gueltiger Name fuer ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.
static boolean isValidTopLevelArSFile(java.lang.String name)
           
 void leaveContainer(Task task)
          Beendet das Arbeiten mit dem zuvor ueber eine der accessContainer()-Methoden definierten Container.
 void leaveContainer(Task task, int cfIdx)
          Beendet das Arbeiten mit dem zuvor ueber eine der accessContainer()-Methoden definierten Container.
 long nextContainerID()
          Erhoeht nextContainerID um 1 und gibt den Wert zurueck.
 void prepareShutdown(DataIdentTree dit, byte[] tmpMem)
           
 void readContainerHeader(Task task)
          Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.
 void readContainerHeader(Task task, int cfIdx)
          Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.
 int[] rebuildIndex(Task task, byte[] tmpBuf, long objId, long atgId, long aspId, int sv, ArchiveDataKind adk)
          Baut Datenindex-, Archivzeit- und Datenzeitindexe der angegebenen Datenidentifikation und Datensatzart neu auf.
 int[] rebuildIndex(Task task, byte[] tmpBuf, java.lang.String didPath)
          Baut Datenindex-, Archivzeit- und Datenzeitindexe der Datenidentifikation und Datensatzart unter dem angegebenen Verzeichnis neu auf.
 void removeContainerFileObjects(Task task)
          Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte und den Index-Map.
 void removeContainerFileObjects(Task task, int minCFs)
          Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte bis auf das angegebene Minimum.
 void resetContainerFileMap()
          Leert die Hashtabelle fuer die ContainerFile-Objekte.
 void restoreHeader(Task task, java.io.File file)
          Der Container-Header der Container-Datei, die mit dem Aufruf accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifiziert worden ist, wird mit dem Container-Header aus der angegebenen Container-Datei ueberschrieben.
 int serializeData(Task task, ResultData newData, long arcTime, java.util.zip.Deflater compresser)
          Serialisiert den uebergebenen Datensatz und speichert ihn in ContainerFile#actualDataBuf und ContainerFile#actualDataSize.
 int serializeDataGap(Task task, long dataIndex, long dataTime, long archiveTime, java.util.zip.Deflater compresser)
          Serialisiert eine Datenluecke anstelle eines Datensatzes.
 int serializeReqData(Task task, ArchiveData newData, long arcTime, java.util.zip.Deflater compresser)
          Serialisiert den uebergebenen nachgeforderten Datensatz und speichert ihn in ContainerFile#actualDataBuf und ContainerFile#actualDataSize.
 void setAutoExtendLoeschutz(Task task, int cfIdx, long t_ls, long t_lsMax)
          Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2
 void setAutoExtendLoeschutz(Task task, long t_ls, long t_lsMax)
          Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2
 void setContainerHeaderParam(Task task, KeyValParam param, long val)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen Parameters im Container-Header geaendert werden.
 void setContainerHeaderParam(Task task, KeyValParam param, java.lang.String val)
          Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im Container-Header geaendert werden.
 void setPersistenceDir(java.lang.String archPath)
           
 boolean startupProcedure()
          Versucht, die StartUp-Properties-Datei einzulesen.
 void writeContainerHeader(Task task)
          Die mit setContainerHeaderParam(Task task, KeyValParam param, String val) gesetzten Parameter werden im Container-Header persistiert.
 void writeContainerHeader(Task task, int cfIdx)
          Die mit #setContainerHeaderParam(Task task, int cfIdx, KeyValParam param, String val) gesetzten Parameter werden im Container-Header persistiert.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DATAKIND_SUFFIX

public static final java.lang.String[] DATAKIND_SUFFIX
Verzeichnisnamen der Datensatzarten. Die ersten Indexe entsprechen Util.getDataKindIndex(ArchiveDataKind).


ACTIVITY_FLAG_FILE_NAME

public static final java.lang.String ACTIVITY_FLAG_FILE_NAME
Dateiname des Lock-Files des Archivsystems. Die Datei wird angelegt, wenn das Archivsystem gestartet wird. Die wird gelöscht, wenn das Archivsystem heruntergefahren wird.

See Also:
Constant Field Values

REBUILDINDEX_FILE_FLAG_NAME

public static java.lang.String REBUILDINDEX_FILE_FLAG_NAME
Eine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index moeglicherweise (wg. Caching) noch nicht auf die Platte durchgeschrieben wurde. Beim Herunterfahren des Systems werden alle Indexe durchgeschrieben und die Flag-Dateien geloescht. Existiert diese Datei beim Systemstart noch, ist dies ein Hinweis auf eine unkorrekte Beendigung des Archivsystems. Fuer jede DId, fuer die die Datei existiert, werden die Indexe neu aufgebaut.

Constructor Detail

PersistenceManager

public PersistenceManager(ArchiveManager archMgr,
                          java.lang.String archPath)
Erzeugt den Persistenz-Manager.

Parameters:
archMgr - Archiv-Manager
archPath - Archivierungs-Verzeichnis
Method Detail

setPersistenceDir

public void setPersistenceDir(java.lang.String archPath)

isContainerFile

public static boolean isContainerFile(java.io.File file)
Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.

Parameters:
file - zu pruefende Datei
Returns:
Kennzeichen

isIndexFile

public static boolean isIndexFile(java.lang.String name)
Parameters:
name - Name einer Datei
Returns:
Wahr, wenn es der Name einer Indexdatei ist

isRebuildIndexFlagFile

public static boolean isRebuildIndexFlagFile(java.lang.String name)
Parameters:
name - Name einer Datei
Returns:
Wahr, wenn es der Name einer _rebuildIndex.flag-Datei ist

isActivityFlagFile

public static boolean isActivityFlagFile(java.lang.String name)
Parameters:
name - Name einer Datei
Returns:
Wahr, wenn es der Name einer _isActive.flag-Datei ist

isValidStorageArSFile

public static boolean isValidStorageArSFile(java.lang.String name)
Parameters:
name - Name einer Datei
Returns:
Wahr, wenn es ein zulaessiger Dateiname des Archivsystems ist

isValidTopLevelArSFile

public static boolean isValidTopLevelArSFile(java.lang.String name)
Parameters:
name - Name einer Datei
Returns:
Wahr, wenn es ein zulaessiger Dateiname im obersten Persistenzverzeichnis des Archivsystems ist

getContID

public static long getContID(java.io.File file)
Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. Alternativ kann die Container-ID aus den Container-Header-Parametern gelesen werden.

Parameters:
file - Container-Datei
Returns:
Container-ID

getContID

public static long getContID(java.lang.String fileName)
Liefert die Container-ID zum Namen der angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. Alternativ kann die Container-ID aus den Container-Header-Parametern gelesen werden.

Parameters:
file - Container-Datei
Returns:
Container-ID

getContFileName

public static java.lang.String getContFileName(long containerId)
Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.

Parameters:
containerId - Container-ID
Returns:
Dateiname

getPathName

public java.lang.String getPathName(long objId,
                                    long atgId,
                                    long aspId,
                                    int sv)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe und pro SimVarwird ein Verzeichnis verwendet.

Parameters:
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
Returns:
Archiv-Pfad

getPathName

public static java.lang.String getPathName(java.lang.String basePath,
                                           long objId,
                                           long atgId,
                                           long aspId,
                                           int sv)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe und pro SimVarwird ein Verzeichnis verwendet.

Parameters:
basePath - Wurzelpfad des Archivsystems
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
Returns:
Archiv-Pfad

getPathName

public java.lang.String getPathName(long objId,
                                    long atgId,
                                    long aspId,
                                    int sv,
                                    ArchiveDataKind dataKind)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.

Parameters:
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
dataKind - Datensatzart
Returns:
Archiv-Pfad

getPathName

public java.lang.String getPathName(ArchiveDataSpecification ads,
                                    ArchiveDataKind adk)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.

Parameters:
ads - Spezifikation des Archivdatensatzes (enthaelt objID, atgID, aspID, sv)
adk - Datensatzart
Returns:
Name des Archiv-Pfads

getArchiveDataKindFromDir

public static ArchiveDataKind getArchiveDataKindFromDir(java.io.File dir)

getLargestContainerID

public long getLargestContainerID(java.lang.String path)
Liefert von allen Containerdateien im angegebenen Verzeichnis die hoechste Container-ID.

Parameters:
path - Zu durchsuchendes Verzeichnis
Returns:
Die hoechste vorhandene Container-Id, -1 falls das Container-Verzeichnis nicht vorhanden ist oder keine Container darin vorhanden sind.

deleteSimVar

public void deleteSimVar(long objId,
                         long atgId,
                         long aspId,
                         int simVar)
                  throws PersistenceException
Diese Methode loescht das komplette Verzeichnis eines DataIdentNode mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensaetze einer Simulationsvariante geloescht. Der DataIdentNode muss in der Verwaltung aus dem DataIdentTreegeloescht werden. Falls die Simulationsvariante gleich Null ist, oder das Verzeichnis nicht geloescht werden konnte, wird eine PersistenceException geworfen.

Parameters:
objId -
atgId -
aspId -
simVar -
Throws:
PersistenceException

accessContainer

public void accessContainer(Task task,
                            java.lang.String didPath,
                            long containerId)
                     throws PersistenceException
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken. Soll der Zugriff auf diesen Container beendet werden (um z.B. einen anderen Container zu adressieren), muss dazu die Methode leaveContainer(Task) aufgerufen werden. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.

Parameters:
task - Anfragender Task
didPath - Pfad bis zur Datensatzart
containerId - Container-ID
Throws:
PersistenceException

accessContainer

public void accessContainer(Task task,
                            long objId,
                            long atgId,
                            long aspId,
                            int sv,
                            ArchiveDataKind dataKind,
                            long containerId)
                     throws PersistenceException
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken. Soll der Zugriff auf diesen Container beendet werden (um z.B. einen anderen Container zu adressieren), muss dazu die Methode leaveContainer(Task) aufgerufen werden. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.

Parameters:
task - Anfragender Task
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
dataKind - Datensatzart
containerId - Container-ID
Throws:
PersistenceException

accessContainer

public void accessContainer(Task task,
                            int cfIdx,
                            long objId,
                            long atgId,
                            long aspId,
                            int sv,
                            ArchiveDataKind dataKind,
                            long containerId)
                     throws PersistenceException
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken. Soll der Zugriff auf diesen Container beendet werden (um z.B. einen anderen Container zu adressieren), muss dazu die Methode leaveContainer(Task) aufgerufen werden. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
dataKind - Datensatzart
containerId - Container-ID
Throws:
PersistenceException

accessContainerReadOnly

public void accessContainerReadOnly(Task task,
                                    java.io.File contFile)
                             throws PersistenceException
Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken. Es koennen nur lesende Operationen auf die Container-Datei ausgeführt werden. Vorgesehen fuer den Zugriff auf Containerdateien, die bereits auf ein Medium vom Typ B ausgelagert sind. Soll der Zugriff auf diesen Container beendet werden (um z.B. einen anderen Container zu adressieren), muss dazu die Methode leaveContainer(Task) aufgerufen werden.

Parameters:
task - Anfragender Task
contFile - Containerdatei
Throws:
PersistenceException

accessContainerReadOnly

public void accessContainerReadOnly(Task task,
                                    int cfIdx,
                                    java.io.File contFile)
                             throws PersistenceException
Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container wirken. Es koennen nur lesende Operationen auf die Container-Datei ausgeführt werden. Vorgesehen fuer den Zugriff auf Containerdateien, die bereits auf ein Medium vom Typ B ausgelagert sind. Soll der Zugriff auf diesen Container beendet werden (um z.B. einen anderen Container zu adressieren), muss dazu die Methode leaveContainer(Task) aufgerufen werden. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
contFile - Containerdatei
Throws:
PersistenceException

leaveContainer

public void leaveContainer(Task task)
                    throws PersistenceException
Beendet das Arbeiten mit dem zuvor ueber eine der accessContainer()-Methoden definierten Container. Diese Methode muss aufgerufen werden, wenn danach auf einen anderen Container zugegriffen werden soll.

Parameters:
task - Anfragender Task
Throws:
PersistenceException

leaveContainer

public void leaveContainer(Task task,
                           int cfIdx)
                    throws PersistenceException
Beendet das Arbeiten mit dem zuvor ueber eine der accessContainer()-Methoden definierten Container. Diese Methode muss aufgerufen werden, wenn danach auf einen anderen Container zugegriffen werden soll. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
Throws:
PersistenceException

existsContainer

public boolean existsContainer(Task task)
                        throws PersistenceException
Prueft ob bereits eine Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container existiert.

Parameters:
task - Anfragende Task
Returns:
Kennzeichen
Throws:
PersistenceException

createContainer

public void createContainer(Task task,
                            boolean toSave)
                     throws PersistenceException
Erzeugt eine neue Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container. Schreibt den Container-Header und befuellt diesen mit den angegebenen Parametern.

Parameters:
task - Anfragender Task
toSave - Sichern
Throws:
PersistenceException

createRebuildIxdFlagFile

public void createRebuildIxdFlagFile(java.lang.String didPath)
                              throws PersistenceException
Legt im Verzeichnis der Datenidentifikation ein REBUILDINDEX_FILE_FLAG_NAME-Datei an.

Parameters:
didPath - Pfad der Datenidentifikation
Throws:
PersistenceException
See Also:
REBUILDINDEX_FILE_FLAG_NAME

closeContainer

public void closeContainer(Task task,
                           DataIdentNode din,
                           ArchiveDataKind adk)
                    throws PersistenceException,
                           IndexException
Schliesst die Container-Datei fuer den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container. Der Container-Header wird entsprechend aktualisiert. Die Min/Max-Werte und die Anzahl der Datensaetze werden dem DataIdentNode und dessen Indexen entnommen.

Parameters:
task - Anfragender Task
din - DataIdentNode des aktuellen Containers
adk - Datensatzart des aktuellen Containers
Throws:
PersistenceException
IndexException

closeContainerRecount

public void closeContainerRecount(Task task,
                                  DataIdentNode din,
                                  ArchiveDataKind adk)
                           throws PersistenceException
Schliesst einen Container, indem jeder Datensatz-Header des Containers gelesen wird, um die Min-/Max-Werte und die Anzahl der Datensaetze zu bestimmen. Die Information der Indexe reicht nicht aus, weil dort die Anzahl der Datensaetze nicht verfuegbar ist.

Parameters:
task - Anfragender Task
din - DataIdentNode des aktuellen Containers
adk - Datensatzart des aktuellen Containers
Throws:
PersistenceException

isContainerClosed

public boolean isContainerClosed(Task task)
                          throws PersistenceException
Prueft ob der mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierte Container bereits abgeschlossen ist.

Parameters:
task - Anfragender Task
Returns:
Kennzeichen, ob Container abgeschlossen ist
Throws:
PersistenceException

isContainerClosed

public boolean isContainerClosed(Task task,
                                 int cfIdx)
                          throws PersistenceException
Prueft ob der mit accessContainer(Task, int, long, long, long, int, ArchiveDataKind, long) spezifizierte Container bereits abgeschlossen ist.

Parameters:
task - Anfragender Task
Returns:
Kennzeichen, ob Container abgeschlossen ist
Throws:
PersistenceException

removeContainerFileObjects

public void removeContainerFileObjects(Task task,
                                       int minCFs)
Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte bis auf das angegebene Minimum. Es werden die ContainerFiles mit den groessten ContainerFile-Indexen geloescht. Wenn das Minimum 0 ist, wird der Index-Map ebenfalls geloescht. Diese Methode ist notwendig, damit die ContainerFiles nicht stetig wachsen.

Parameters:
task - Anfragender Task
minCFs - Minimale Anzahl ContainerFiles, die nicht geloescht werden.

removeContainerFileObjects

public void removeContainerFileObjects(Task task)
Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte und den Index-Map. Diese Methode ist notwendig, damit die ContainerFiles nicht stetig wachsen.

Parameters:
task - Anfragender Task

assignIndexes

public void assignIndexes(DataIdentTree dit,
                          ArchiveDataSpecification ads,
                          ArchiveDataKind adk,
                          Task task,
                          byte[] tempMem)
                   throws DIdNodeNotFoundException,
                          IndexException,
                          PersistenceException
Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu.

Parameters:
dit - Baum bestehend aus DataIdentNode
ads - Spezifikation des Archivdatensatzes (enthaelt objID, atgID, aspID, sv)
adk - Datensatzart
task - Anfragender Task
tempMem - Temporaerer Speicher zum EInlesen der Indexe
Throws:
DIdNodeNotFoundException
IndexException
PersistenceException

assignIndexes

public void assignIndexes(DataIdentTree dit,
                          long objID,
                          long atgID,
                          long aspID,
                          int sv,
                          ArchiveDataKind adk,
                          Task task,
                          byte[] tempMem)
                   throws DIdNodeNotFoundException,
                          IndexException,
                          PersistenceException
Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu. Prueft dabei, ob der letzte Eintrag eines Index fortgefuehrt werden muss (wenn der letzte Container angebrochen ist und nicht abgeschlossen werden muss). Die Container werden nicht verändert. Wenn der Index nicht fortgefuehrt wird, werden der enstprechende DataIdentNode.containerEntries auf -1 gesetzt. Wenn der Index fortgefuehrt wird, wird im letzten Container nachgezaehlt (aufwendig) und DataIdentNode.containerEntries auf das Ergebnis gesetzt.

Parameters:
dit - Baum bestehend aus DataIdentNode
objID - Objekt-ID
atgID - Attributgruppen-ID
aspID - Aspekt-ID
sv - Simulationsvariante
adk - Datensatzart
task - Anfragender Task
tempMem - Temporaerer Speicher zum Einlesen der Indexe
Throws:
DIdNodeNotFoundException
IndexException
PersistenceException

prepareShutdown

public void prepareShutdown(DataIdentTree dit,
                            byte[] tmpMem)

closeIndex

public boolean closeIndex(DataIdentNode din,
                          long objID,
                          long atgID,
                          long aspID,
                          int sv,
                          ArchiveDataKind adk,
                          byte[] tmpMem)
                   throws IndexException
Schliesst die Indexe der Datensatzart des DataIndentNode.

Parameters:
din -
objID -
atgID -
aspID -
sv -
adk - Datensatzart
tmpMem - temporaerer Speicher, der zum Schliessen des Index benoetigt wird
Returns:
Wahr, falls der Index gescjhlossen werden musste, falsch, wenn der Index unveraendert war.
Throws:
IndexException

readContainerHeader

public void readContainerHeader(Task task)
                         throws PersistenceException
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header. Die Container-Header Parameter stehen dann als Key/Value-Paare zur Verfuegung und koennen mit #getContainerHeaderParam(Task, KeyValParam) abgefragt werden.

Parameters:
task - Anfragender Task
Throws:
PersistenceException

readContainerHeader

public void readContainerHeader(Task task,
                                int cfIdx)
                         throws PersistenceException
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header. Die Container-Header Parameter stehen dann als Key/Value-Paare zur Verfuegung und koennen mit #getContainerHeaderParam(Task, KeyValParam) abgefragt werden.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
Throws:
PersistenceException

getContainerHeaderParamAsString

public java.lang.String getContainerHeaderParamAsString(Task task,
                                                        KeyValParam param)
                                                 throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen Typ immer als String zurueck.

Parameters:
task - Anfragende Task
param - Container-Header-Parameter
Returns:
Parameter-Wert als String
Throws:
PersistenceException
See Also:
KeyValParam

getContainerHeaderParamAsString

public java.lang.String getContainerHeaderParamAsString(Task task,
                                                        int cfIdx,
                                                        KeyValParam param)
                                                 throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen Typ immer als String zurueck.

Parameters:
task - Anfragende Task
cfIdx - ContainerFile-Index
param - Container-Header-Parameter
Returns:
Parameter-Wert als String
Throws:
PersistenceException
See Also:
KeyValParam

getContainerHeaderParamAsArchiveDataKind

public ArchiveDataKind getContainerHeaderParamAsArchiveDataKind(Task task,
                                                                KeyValParam param)
                                                         throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als Datensatzart zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ ArchiveDataKind umgeformt werden kann.

Parameters:
task - Anfragende Task
param - Container-Header-Parameter
Returns:
Datensatzart
Throws:
PersistenceException

getContainerHeaderParamAsBoolean

public boolean getContainerHeaderParamAsBoolean(Task task,
                                                KeyValParam param)
                                         throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ boolean umgeformt werden kann.

Parameters:
task - Anfragende Task
param - Container-Header-Parameter
Returns:
true oder false
Throws:
PersistenceException

getContainerHeaderParamAsBoolean

public boolean getContainerHeaderParamAsBoolean(Task task,
                                                int cfIdx,
                                                KeyValParam param)
                                         throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ boolean umgeformt werden kann.

Parameters:
task - Anfragende Task
cfIdx - ContainerFile-Index
param - Container-Header-Parameter
Returns:
true oder false
Throws:
PersistenceException

getContainerHeaderParamAsLong

public long getContainerHeaderParamAsLong(Task task,
                                          KeyValParam param)
                                   throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.

Parameters:
task - Anfragende Task
param - Container-Header-Parameter
Returns:
Ganzzahl als long
Throws:
PersistenceException

getContainerHeaderParamAsLong

public long getContainerHeaderParamAsLong(Task task,
                                          int cfIdx,
                                          KeyValParam param)
                                   throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.

Parameters:
task - Anfragende Task
cfIdx - ContainerFile-Index
param - Container-Header-Parameter
Returns:
Ganzzahl als long
Throws:
PersistenceException

getContainerHeaderParamAsInt

public int getContainerHeaderParamAsInt(Task task,
                                        KeyValParam param)
                                 throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurueck. Wirfte eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.

Parameters:
task - Anfragende Task
param - Container-Header-Parameter
Returns:
Ganzzahl als long
Throws:
PersistenceException

setContainerHeaderParam

public void setContainerHeaderParam(Task task,
                                    KeyValParam param,
                                    java.lang.String val)
                             throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im Container-Header geaendert werden. Wirft eine PersistenceException, wenn die Aenderung nicht durchgefuehrt werden kann.

Parameters:
task - Anfragender Task
param - Container-Header-Parameter
val - Wert des Container-Header-Parameters
Throws:
PersistenceException

setContainerHeaderParam

public void setContainerHeaderParam(Task task,
                                    KeyValParam param,
                                    long val)
                             throws PersistenceException
Nachdem mit readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen Parameters im Container-Header geaendert werden. Wirft eine PersistenceException, wenn die Aenderung nicht durchgefuehrt werden kann.

Parameters:
task - Anfragender Task
param - Container-Header-Parameter
val - Numerischer Wert des Container-Header-Parameters
Throws:
PersistenceException

restoreHeader

public void restoreHeader(Task task,
                          java.io.File file)
                   throws PersistenceException
Der Container-Header der Container-Datei, die mit dem Aufruf accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifiziert worden ist, wird mit dem Container-Header aus der angegebenen Container-Datei ueberschrieben.

Parameters:
task - Anfragender Task
file - Container-Datei
Throws:
PersistenceException

writeContainerHeader

public void writeContainerHeader(Task task)
                          throws PersistenceException
Die mit setContainerHeaderParam(Task task, KeyValParam param, String val) gesetzten Parameter werden im Container-Header persistiert.

Parameters:
task - Anfragender Task
Throws:
PersistenceException

writeContainerHeader

public void writeContainerHeader(Task task,
                                 int cfIdx)
                          throws PersistenceException
Die mit #setContainerHeaderParam(Task task, int cfIdx, KeyValParam param, String val) gesetzten Parameter werden im Container-Header persistiert.

Parameters:
task - Anfragender Task
Throws:
PersistenceException

startupProcedure

public boolean startupProcedure()
Versucht, die StartUp-Properties-Datei einzulesen. Wenn das nicht gelingt, wird das gesamte Persistenzverzeichnis (RestorePersDirTsk) durchlaufen und versucht, einen gueltigen Startpunkt wiederherzustellen. Das Persistenzverzeichnis wird in InQueuesMgr.NUM_OF_ARCH_QUEUES Teile aufgeteilt, die jeweils von einem Thread bearbeitet werden (zwengs Performance). Am Schluss wird die StartUp-Properties-Datei geloescht. Beim Herunterfahren wird in prepareShutdown(DataIdentTree, byte[]) die Datei neu geschrieben. Daran kann das ArS beim naechsten Start erkennen, ob es ordnungsgemaess heruntergefahren wurde oder ob ein Wiederherstellungslauf erforderlich ist.

Returns:
Wahr, falls der Durchlauf des Persistenzverzeichnisses erfolgreich war und das Archivsystem starten kann, falsch sonst.

rebuildIndex

public int[] rebuildIndex(Task task,
                          byte[] tmpBuf,
                          java.lang.String didPath)
                   throws PersistenceException,
                          IndexException
Baut Datenindex-, Archivzeit- und Datenzeitindexe der Datenidentifikation und Datensatzart unter dem angegebenen Verzeichnis neu auf. Eventuell vorhandene Indexdateien werden vorher geloescht.

Parameters:
task - Anfragender Task
tmpBuf - Temporaerer Speicherbereich, der zum Neuaufbau der Indexe verwendet werden kann.
didPath - Vollstaendiger Pfad bis zur Datensatzart
Throws:
PersistenceException
IndexException
See Also:
rebuildIndex(Task, byte[], long, long, long, int, ArchiveDataKind)

rebuildIndex

public int[] rebuildIndex(Task task,
                          byte[] tmpBuf,
                          long objId,
                          long atgId,
                          long aspId,
                          int sv,
                          ArchiveDataKind adk)
                   throws IndexException,
                          PersistenceException
Baut Datenindex-, Archivzeit- und Datenzeitindexe der angegebenen Datenidentifikation und Datensatzart neu auf. Eventuell vorhandene Indexdateien werden vorher geloescht. Nach Moeglichkeit werden die Min/Max-Werte aus den Container-Headern verwendet. Falls diese nicht vorhanden sind (weil der Container nicht abgeschlossen ist), werden alle Datensatz-Header gelesen. Sollte ein Container eigentlich die Index-Info im Header stehen haben und sie steht dort nicht, wird der Header ergänzt.

Ruft #accessContainer() auf.

Parameters:
task - Anfragender Task
tmpBuf - Temporaerer Speicherbereich, der zum Neuaufbau der Indexe verwendet werden kann.
objId - Objekt-ID
atgId - Attributgruppen-ID
aspId - Aspekt-ID
sv - Simulationsvariante
adk - Datensatzart
Returns:
Ein zweielementiges Feld: der 1. Wert ist die Zahl der besuchten Container, der 2. ist die Zahl der Container, bei denen die Index-Info nicht aus dem Header gelesen werden konnte, sondern durch Durchlaufen aller Datensaetze ermittelt werden musste.
Throws:
PersistenceException
IndexException
PersistenceException

serializeData

public int serializeData(Task task,
                         ResultData newData,
                         long arcTime,
                         java.util.zip.Deflater compresser)
                  throws PersistenceException
Serialisiert den uebergebenen Datensatz und speichert ihn in ContainerFile#actualDataBuf und ContainerFile#actualDataSize. Da der ArchivTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf die Methoden ContainerFile#preserializeData() und ContainerFile#appendPreserializedData() aufgeteilt.

Parameters:
task - Anfragender Task
newData - Zu archivierender Datensatz
arcTime - Archivzeitstempel
Returns:
Laenge des serialisierten Datensatzes
Throws:
PersistenceException

serializeDataGap

public int serializeDataGap(Task task,
                            long dataIndex,
                            long dataTime,
                            long archiveTime,
                            java.util.zip.Deflater compresser)
                     throws PersistenceException
Serialisiert eine Datenluecke anstelle eines Datensatzes. Ansonsten Funktion indentisch zu #serializeData(Task, ResultData, long).

Parameters:
task - Anfragender Task
dataIndex - Datenindex der Luecke (= letzter echter Index mit gesetztem Archivbit)
dataTime - Datenzeit
archiveTime - Archivzeit
Returns:
Laenge des serialisierten Datensatzes
Throws:
PersistenceException

serializeReqData

public int serializeReqData(Task task,
                            ArchiveData newData,
                            long arcTime,
                            java.util.zip.Deflater compresser)
                     throws PersistenceException
Serialisiert den uebergebenen nachgeforderten Datensatz und speichert ihn in ContainerFile#actualDataBuf und ContainerFile#actualDataSize. Da der ArchivReqTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf die Methoden ContainerFile#preserializeData() und ContainerFile#appendPreserializedData() aufgeteilt.

Parameters:
task - Anfragender Task
newData - Zu archivierender Datensatz
arcTime - Archivzeitstempel
Returns:
Laenge des serialisierten Datensatzes
Throws:
PersistenceException

appendSerializedData

public void appendSerializedData(Task task)
                          throws PersistenceException
Haengt den uebergebenen, serialisierten Archivdatensatz an den mit accessContainer(Task, long, long, long, int, ArchiveDataKind, long) spezifizierten Container an.

Parameters:
task - Anfragender Task
Throws:
PersistenceException

getArchiveData

public ContainerDataIterator getArchiveData(Task task)
                                     throws PersistenceException
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.

Parameters:
task - Anfragender Task
Returns:
ContainerDataIterator fuer das Durchlaufen der Datensaetze
Throws:
PersistenceException

getArchiveData

public ContainerDataIterator getArchiveData(Task task,
                                            boolean considerDeleted)
                                     throws PersistenceException
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.

Parameters:
task - Anfragender Task
considerDeleted - gibt an, ob Sonderbehandlung für ausgelagerte Container nötig ist (wichtig beim Nachfordern).
Returns:
ContainerDataIterator fuer das Durchlaufen der Datensaetze
Throws:
PersistenceException

getArchiveData

public ContainerDataIterator getArchiveData(Task task,
                                            int cfIdx,
                                            boolean considerDeleted)
                                     throws PersistenceException
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers. (Evtl. mit Sonderbehandlung für ausgelagerte Container)

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
considerDeleted - Gibt an, ob Sonderbehandlung ausgelagerter Container nötig ist (wichtig beim Nachfordern).
Returns:
ContainerDataIterator fuer das Durchlaufen der Datensaetze
Throws:
PersistenceException

getArchiveData

public ContainerDataIterator getArchiveData(Task task,
                                            int cfIdx)
                                     throws PersistenceException
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
Returns:
ContainerDataIterator fuer das Durchlaufen der Datensaetze
Throws:
PersistenceException

getHdrData

public ContainerDataIterator getHdrData(Task task,
                                        int cfIdx)
                                 throws PersistenceException
Liefert einen Iterator zum Durchlaufen der Min-/Maxwerte des Container-Headers Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.

Parameters:
task - Anfragender Task
cfIdx - ContainerFile-Index
Returns:
ContainerDataIterator fuer das Durchlaufen der Min-/Maxwerte des Container-Headers
Throws:
PersistenceException

countContainerEntries

public int countContainerEntries(Task task)
                          throws PersistenceException
Zaehlt die Anzahl der Datensaetze in dem mit einer accessContainer()-Methode im Zugriff befindlichen Container durch Iterieren ueber die Datensaetze in der Container-Datei. Diese Methode ist nur notwendig, wenn ein noch nicht abgeschlossener Container wieder befuellt wird, weil dann die Anzahl nicht im Header steht. Im Normalbetrieb wird die Anzahl im DataIdentNode mitgefuehrt.

Parameters:
task - Anfragender Task
Returns:
Anzahl Datensaetze im Container
Throws:
PersistenceException

getContainerSize

public long getContainerSize(Task task)
                      throws PersistenceException
Ermittelt die Gesamtlänge des mit accessContainer()- im Zugriff befindlichen Containers.

Returns:
Länge der Container-Datei
Throws:
PersistenceException

deleteContainerData

public void deleteContainerData(Task task)
                         throws PersistenceException
Loescht alle Datensaetze eines Datencontainers, so dass lediglich der Header mit der Verwaltungs-Information in der Datei erhalten bleibt.
ACHTUNG:
Das Setzen des Header-Flags auf "geloescht" muss NACH dem Loeschen der Daten aus dem Container erfolgen!

Parameters:
task - Anfragender Task
Throws:
PersistenceException

createLockFile

public java.lang.String createLockFile()
Das Logfile isActive anlegen. Wird verwendet, um einem Archivsystem anzuzeigen, ob ein anderes Archivsystem dasselbe Persistenzverzeichnis verwendet

Returns:
Fehlermeldung, wenn das Erstellen nicht erfolgreich war, null sonst

deleteLockFile

public boolean deleteLockFile()
Löscht das LogFile isActive, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder frei

Returns:
true, wenn das File erfolgreich gelöscht werden konnte

checkPersistenceDir

public void checkPersistenceDir(java.lang.String mode)
Prueft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen. Die Ergebnisse werden ueber den Logger protokolliert. Kann durch einen Kommandozeilenparameter beim Systemstart aufgerufen werden.


extractDIdFromPath

public static long[] extractDIdFromPath(java.io.File path)
                                 throws PersistenceException
Extrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Laenge 4 haben muss. Voraussetzung ist, dass alle Verzeichnisnamen entsprechend den Konventionen des PersistenceManagers gebildet sind. Das unterste Verzeichnis kann entweder die SimVar bezeichnen oder eine Datensatzart sein.

Parameters:
path - Pfad bis zum Verzeichnis der Simulationsvariante
Returns:
Feld bestehend aus [ObjID, AtgID, AspID SimVar] wenn der Pfad ein gueltiges Verzeichnis ist
Throws:
PersistenceException - wenn der Pfad kein gueltiges Verzeichnis ist
See Also:
isValidObjIdFolderName(String), isValidAtgIdFolderName(String), isValidAspIdFolderName(String), isValidSvFolderName(String)

isValidObjIdFolderName

public static boolean isValidObjIdFolderName(java.lang.String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Objekt-ID repraesentiert.

Parameters:
dirName - Verzeichisname
Returns:
Wahr, wenn der Verzeichnisname korrekt ist, falsch sonst.
See Also:
OBJ_DIRNAME_PAT

isValidAtgIdFolderName

public static boolean isValidAtgIdFolderName(java.lang.String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Attributgruppen-ID repraesentiert.

Parameters:
dirName - Verzeichisname
Returns:
Wahr, wenn der Verzeichnisname korrekt ist, falsch sonst.
See Also:
ATG_DIRNAME_PAT

isValidAspIdFolderName

public static boolean isValidAspIdFolderName(java.lang.String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Aspekt-ID repraesentiert.

Parameters:
dirName - Verzeichisname
Returns:
Wahr, wenn der Verzeichnisname korrekt ist, falsch sonst.
See Also:
ASP_DIRNAME_PAT

isValidSvFolderName

public static boolean isValidSvFolderName(java.lang.String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name fuer ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.

Parameters:
dirName - Verzeichisname
Returns:
Wahr, wenn der Verzeichnisname korrekt ist, falsch sonst.
See Also:
SV_DIRNAME_PAT

isValidDataKindFolderName

public static boolean isValidDataKindFolderName(java.lang.String dirName)

isValidIDFolderName

public static boolean isValidIDFolderName(java.lang.String dirName)

getIDPart

public static java.lang.String getIDPart(java.lang.String dirName)

resetContainerFileMap

public void resetContainerFileMap()
Leert die Hashtabelle fuer die ContainerFile-Objekte. Dies ist notwendig, wenn (zu Testzwecken) ein neuer InQueuesMgr angelegt wird.


getArchivePath

public java.lang.String getArchivePath()
Liefert den Wurzelpfad des Persistenzverzeichisses, der beim Systemstart in der Kommandozeile uebergeben wurde.

Returns:
Wurzelpfad des Persistenzverzeichisses

nextContainerID

public long nextContainerID()
Erhoeht nextContainerID um 1 und gibt den Wert zurueck.

Returns:
als naechste zu verwendende Container-ID

getLastContainerID

public long getLastContainerID()
Returns:
Letzte vergebe ContainerID

setAutoExtendLoeschutz

public void setAutoExtendLoeschutz(Task task,
                                   int cfIdx,
                                   long t_ls,
                                   long t_lsMax)
                            throws PersistenceException
Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2

Parameters:
task - anfragender Task
t_ls - Zeitdauer, um die der LS verlaengert wird (aus atg.archivEinstellung)
t_lsMax - maximale Zeitdauer, um die verlaengert werden darf (gemessen ab Vorhaltezeitraum)
Throws:
PersistenceException

setAutoExtendLoeschutz

public void setAutoExtendLoeschutz(Task task,
                                   long t_ls,
                                   long t_lsMax)
                            throws PersistenceException
Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2

Parameters:
task - anfragender Task
t_ls - Zeitdauer, um die der LS verlaengert wird (aus atg.archivEinstellung)
t_lsMax - maximale Zeitdauer, um die verlaengert werden darf (gemessen ab Vorhaltezeitraum)
Throws:
PersistenceException


Copyright © 2005-2008 beck et al. projects GmbH All Rights Reserved.