de.bsvrz.ars.ars.persistence
Class ContainerFile

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

public class ContainerFile
extends java.lang.Object

Diese Klasse enthaelt die Funktionalitaet zum Erzeugen, Lesen, Schreiben und Loeschen von Container-Dateien. Jeder Task, der mit Container-Dateien arbeitet, enthaelt ein Objekt dieser Klasse. Die Sichtbarkeit von Konstruktor und Methoden ist beschraenkt, da diese Klasse nur durch den PersistenceManager im gleichen Package benutzt wird. Dieser haelt fuer jede anfragende Task ein Objekt dieser Klasse und leitet Anfragen bzgl. Container-Dateien an dieses ContainerFile-Objekt weiter.

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.io.FilenameFilter CONT_FILENAME_FILTER
          Filter zur Erkennung von Containerdateien anhand des Dateinamens.
static boolean DECOMPRESS_QUERY_RESULTS
          Falls wahr, werden Archivanfragen komprimiert beantwortet (ist langsam, weil das Stream-Interface der Kernsoftware langsam ist)
static int MAX_UNCOMPRESSED
          Datensaetze bis zu dieser Laenge bleiben immer unkomprimiert.
static int NOT_COMPRESSED
          Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist
 
Method Summary
 void closeContainerRecount(long vorhalteZeit)
          Schliesst einen Container, indem jeder Datensatz-Header des Containers gelesen wird, um die Min-/Max-Werte und die Anzahl der Datensaetze zu bestimmen.
static long compareContainerFile(java.io.File file1, java.io.File file2)
          Vergleicht die ID's von zwei ContainerFiles:
- grösser 0, wenn die ID des ersten ContainerFiles grösser ist, als die Zweite;
- kleiner 0, wenn sie kleiner ist als die Zweite;
- 0, wenn sie gleich sind.
 long compareContainerFile(long fileID2CompareWith)
          Vergleicht die ID's von zwei ContainerFiles
grösser 0, wenn die ID dieses ContainerFiles grösser ist, als die zu Vergleichende
kleiner 0, wenn sie kleiner ist als die zu Vergleichende
0, wenn sie gleich sind
static java.lang.String getContainerFileName(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 angegebenen Container-Datei-Namen, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
static int getHeaderLen()
          Ermittelt die Gesamtlaenge des mit accessContainer() im Zugriff befindlichen Containers.
 java.util.ArrayList<java.lang.Long> getListOfIndexesDeleted()
           
static int getTotalDataOverhead()
          Ermittelt den vollstaendigen Overhead fuer einen Datensatz.
static boolean isContainerFile(java.io.File f)
          Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.
static boolean isContainerFileName(java.lang.String name)
          Liefert Kennzeichen, ob der angegebene Dateiname eine moegliche Container-Datei ist.
static void prepareForPerformanceTest(byte[] testDat)
          Wenn diese Methode aufgerufen wird, koennen keine Daten archiviert werden.
 void setListOfIndexesDeleted(java.io.RandomAccessFile raf)
          Erzeugt eine Liste der Datensatz-Indizes, die im durch raf spezifizierten Container vorkommen (sortiert)
 java.lang.String toString()
           
 void writeContainerHeader()
          Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NOT_COMPRESSED

public static final int NOT_COMPRESSED
Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist

See Also:
Constant Field Values

DECOMPRESS_QUERY_RESULTS

public static boolean DECOMPRESS_QUERY_RESULTS
Falls wahr, werden Archivanfragen komprimiert beantwortet (ist langsam, weil das Stream-Interface der Kernsoftware langsam ist)


MAX_UNCOMPRESSED

public static int MAX_UNCOMPRESSED
Datensaetze bis zu dieser Laenge bleiben immer unkomprimiert. Muss mindestens so gross sein wie NO_SOURCE, NO_DATA, POT_GAP lang sind!

Auf Integer.MAX_VALUE setzen, um die Komprimierung zu deaktivieren.


CONT_FILENAME_FILTER

public static final java.io.FilenameFilter CONT_FILENAME_FILTER
Filter zur Erkennung von Containerdateien anhand des Dateinamens.

Method Detail

prepareForPerformanceTest

public static void prepareForPerformanceTest(byte[] testDat)
Wenn diese Methode aufgerufen wird, koennen keine Daten archiviert werden. Stattdessen werden Dummy-Daten mit bekannter Laenge archiviert, um die Performance des Speichersystems testen zu koennen.

Parameters:
testDat - Daten, die pro Datensatz in die Container geschrieben werden.

compareContainerFile

public long compareContainerFile(long fileID2CompareWith)
Vergleicht die ID's von zwei ContainerFiles
grösser 0, wenn die ID dieses ContainerFiles grösser ist, als die zu Vergleichende
kleiner 0, wenn sie kleiner ist als die zu Vergleichende
0, wenn sie gleich sind

Parameters:
fileID2CompareWith -
Returns:
das ergebnis

compareContainerFile

public static long compareContainerFile(java.io.File file1,
                                        java.io.File file2)
                                 throws PersistenceException
Vergleicht die ID's von zwei ContainerFiles:
- grösser 0, wenn die ID des ersten ContainerFiles grösser ist, als die Zweite;
- kleiner 0, wenn sie kleiner ist als die Zweite;
- 0, wenn sie gleich sind.

Parameters:
file1 - das erste File
file2 - das zweite File
Returns:
Throws:
PersistenceException - falls die Dateien keine ContainerFiles sind

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

isContainerFile

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

Parameters:
f - Datei
Returns:
Kennzeichen

isContainerFileName

public static boolean isContainerFileName(java.lang.String name)
Liefert Kennzeichen, ob der angegebene Dateiname eine moegliche Container-Datei ist.

Parameters:
name - Dateiname
Returns:
Kennzeichen

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; siehe dazu #getContainerHeaderParam(KeyValParam).

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

getContID

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

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

getContainerFileName

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

Parameters:
containerId - Container-ID
Returns:
Dateiname

closeContainerRecount

public void closeContainerRecount(long vorhalteZeit)
                           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:
vorhalteZeit - parametrierte Vorhaltezeit in Sekunden
Throws:
PersistenceException

writeContainerHeader

public void writeContainerHeader()
                          throws PersistenceException
Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei. Bei einer neuen leeren Datei werden die Parameter an den Anfang der Datei angehangen, bei einer zu aendernden Container-Datei werden die vorhandenen Parameter ueberschrieben. Bevor mit dieser Methode der Header geschrieben werden kann, muss entweder mit #createDefaultContainerHeader(boolean, long) neuer Header erzeugt oder mit {@link #readContainerHeader()} ein Header eingelesen worden sein.

Throws:
PersistenceException

getHeaderLen

public static int getHeaderLen()
Ermittelt die Gesamtlaenge des mit accessContainer() im Zugriff befindlichen Containers.

Returns:
Laenge der Container-Datei
Throws:
PersistenceException

getTotalDataOverhead

public static int getTotalDataOverhead()
Ermittelt den vollstaendigen Overhead fuer einen Datensatz. Inklusive Laengenbyte, Datensatz-Header, Compress-Feld und abschliessendem Separator.

Returns:

setListOfIndexesDeleted

public void setListOfIndexesDeleted(java.io.RandomAccessFile raf)
                             throws java.io.IOException
Erzeugt eine Liste der Datensatz-Indizes, die im durch raf spezifizierten Container vorkommen (sortiert)

Parameters:
raf -
Throws:
java.io.IOException

getListOfIndexesDeleted

public java.util.ArrayList<java.lang.Long> getListOfIndexesDeleted()


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