de.bsvrz.ars.ars.persistence
Class CacheManager

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

public class CacheManager
extends Object

Diese Klasse implementiert die Verwaltung der Caches für die Schreibzugriffe auf Containerdateien. Die Klasse ist als Singleton realisiert, weil es im Original-Archivsystem keine zentrale Stelle zum Zugriff auf Container-Dateien gibt (der PersistenzManager war wohl dafür vorgesehen, allerdings gibt es auch einige Zugriffe auf Containerdateien, die am PersistenzManager vorbei gehen). Vor dem Zugriff auf Containerdateien muss die Cache-Verwaltung mit der Methode init() erzeugt und initialisiert werden. Beim Beenden des Archivsystems muss mit einem Aufruf der Methode close das Schreiben der noch in den einzelnen Caches vorhandenen Daten veranlasst werden.

Author:
Kappich Systemberatung

Nested Class Summary
static class CacheManager.Cache
          Realisiert den Zwischenspeicher für eine Containerdatei.
static class CacheManager.DataIdentificationIds
          Klasse, die die IDs der Objekte einer Datenidentifikation aufnehmen kann.
 
Field Summary
private  long _bufferedCountSum
          Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
private  boolean _cacheEnabled
           
private static CacheManager _cacheManager
          Singleton Objekt des CacheManagers.
private  HashMap<Long,CacheManager.Cache> _containerId2Cache
          Hashmap zur Zuordnung einer Container-ID zum zugehörigen Cache-Objekt.
private  Debug _debug
          Debug-Logger für Debug-Ausgaben.
private  int _defaultBufferSize
          Beim Anlegen der Cache-Objekte zu verwendende Puffergröße als Anzahl Bytes.
private  HashSet<CacheManager.DataIdentificationIds> _disabledCacheIdentifications
          Hashmap mit den Datenidentifikationen, die nicht gepuffert, sondern sofort persistiert werden.
private  long _processedCountSum
          Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.
private  long _unbufferedCountSum
          Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
private  long _writeCountSum
          Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.
private static boolean DEBUG_CALLS
          Zum aktivieren/deaktivieren von Testausgaben.
private static int DEFAULT_BUFFER_SIZE
          Standard-Puffergröße je Datenidentifikation als Anzahl Bytes.
private static int MAXIMUM_BUFFER_SIZE
          Maximale Puffergröße je Datenidentifikation als Anzahl Bytes.
private static int MINIMUM_BUFFER_SIZE
          Minimale Puffergröße je Datenidentifikation als Anzahl Bytes.
 
Constructor Summary
private CacheManager()
          Erzeugt eine neue Cacheverwaltung.
 
Method Summary
private  void aggregateCounts(CacheManager.Cache cache)
          Überträgt, die verschiedenen Ereigniszähler eines Cache-Objekts in die entsprechenden Summenzähler der Cache-Verwaltung.
 void close()
          Schreibt alle in den einzelnen Caches vorhandenen Daten und schließt die Cache-Verwaltung.
 CacheManager.Cache createCache(ContainerFile cont, boolean createFile)
          Erzeugt einen neuen Cache für den angegebenen Container.
 void flushAll()
          Schreibt alle in den einzelnen Caches vorhandenen Daten.
 void forgetCache(ContainerFile containerFile)
          Entfernt den Cache des angegebenen Containers aus der Containerverwaltung.
 void forgetCache(long containerId)
          Entfernt den Cache des angegebenen Containers aus der Containerverwaltung.
(package private)  long getBufferedCountSum()
           
 CacheManager.Cache getCache(ContainerFile containerFile)
          Liefert den Cache für den angegebenen Container zurück.
 long[] getCounts()
          Liefert ein Array mit folgenden statistischen Informationen:

Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.

static CacheManager getInstance()
           
(package private)  long getProcessedCountSum()
           
(package private)  long getUnbufferedCountSum()
           
(package private)  long getWriteCountSum()
           
 void init(ArgumentList argumentList)
          Initialisiert den CacheManager.
 boolean isCacheEnabled()
           
 void setCacheEnabled(boolean cacheEnabled)
           
 void setCachingEnabled(long objectId, long atgId, long aspectId, int simulationVariant, boolean enable)
          Mit dieser Methode kann die Zwischenspeicherung für eine angegebene Datenidentifikation ein- bzw.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MINIMUM_BUFFER_SIZE

private static final int MINIMUM_BUFFER_SIZE
Minimale Puffergröße je Datenidentifikation als Anzahl Bytes.

See Also:
Constant Field Values

DEFAULT_BUFFER_SIZE

private static final int DEFAULT_BUFFER_SIZE
Standard-Puffergröße je Datenidentifikation als Anzahl Bytes. Wird verwendet, wenn kein anderer Wert über das Aufrufargument cachePufferGroesse=... angegeben wurde.

See Also:
Constant Field Values

MAXIMUM_BUFFER_SIZE

private static final int MAXIMUM_BUFFER_SIZE
Maximale Puffergröße je Datenidentifikation als Anzahl Bytes.

See Also:
Constant Field Values

DEBUG_CALLS

private static final boolean DEBUG_CALLS
Zum aktivieren/deaktivieren von Testausgaben.

See Also:
Constant Field Values

_cacheManager

private static CacheManager _cacheManager
Singleton Objekt des CacheManagers.


_containerId2Cache

private HashMap<Long,CacheManager.Cache> _containerId2Cache
Hashmap zur Zuordnung einer Container-ID zum zugehörigen Cache-Objekt.


_defaultBufferSize

private int _defaultBufferSize
Beim Anlegen der Cache-Objekte zu verwendende Puffergröße als Anzahl Bytes. Der Wert kann über das Aufrufargument -cachePufferGroesse=... eingestellt werden.

See Also:
DEFAULT_BUFFER_SIZE, init(de.bsvrz.sys.funclib.commandLineArgs.ArgumentList)

_disabledCacheIdentifications

private HashSet<CacheManager.DataIdentificationIds> _disabledCacheIdentifications
Hashmap mit den Datenidentifikationen, die nicht gepuffert, sondern sofort persistiert werden. Die Hashmap wird von der Methode setCachingEnabled(long,long,long,int,boolean) modifiziert und dient dazu, die Zwischenspeicherung von Datenidentifikationen, bei denen der Quittierungsmechanismus des Archivsystems verwendet wird, zu verhindern.


_debug

private Debug _debug
Debug-Logger für Debug-Ausgaben.


_writeCountSum

private long _writeCountSum
Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.


_processedCountSum

private long _processedCountSum
Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.


_bufferedCountSum

private long _bufferedCountSum
Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.


_unbufferedCountSum

private long _unbufferedCountSum
Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.


_cacheEnabled

private boolean _cacheEnabled
Constructor Detail

CacheManager

private CacheManager()
Erzeugt eine neue Cacheverwaltung.

Method Detail

getInstance

public static CacheManager getInstance()
Returns:
Liefert das CacheManager-Objekt zurück.

init

public void init(ArgumentList argumentList)
Initialisiert den CacheManager. Das Aufrufargument -cachePufferGroesse=..., mit dem die Größe des Puffers pro Cache eingestellt werden kann, wird gelesen.

Parameters:
argumentList - Aufrufargumente der Applikation

close

public void close()
Schreibt alle in den einzelnen Caches vorhandenen Daten und schließt die Cache-Verwaltung. Vor einer erneuten Verwendung muss die Cache-Verwaltung mit einem erneuten Aufruf der Methode init initialisiert werden.


flushAll

public void flushAll()
Schreibt alle in den einzelnen Caches vorhandenen Daten.


getCache

public CacheManager.Cache getCache(ContainerFile containerFile)
Liefert den Cache für den angegebenen Container zurück.

Parameters:
containerFile - Container, dessen Cache bestimmt werden soll
Returns:
Cache des Containers oder null, wenn der Container keinen Cache hat.

createCache

public CacheManager.Cache createCache(ContainerFile cont,
                                      boolean createFile)
Erzeugt einen neuen Cache für den angegebenen Container.

Parameters:
cont - Container für den ein neuer Cache erzeugt werden soll.
createFile - true, falls eine neue Datei erzeugt werden soll; false, falls zu einer vorhandenen Dqtei hinzugefügt werden soll.
Returns:
Neuer Cache oder null, falls die Datenidentifikation des Containers nicht gecacht werden soll..

forgetCache

public void forgetCache(ContainerFile containerFile)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung. Eventuell noch im Cache befindliche Daten werden nicht automatisch geschrieben, sondern müssen vorher durch einen expliziten Aufruf der Methode CacheManager.Cache.flush() geschrieben werden.

Parameters:
containerFile - Container dessen Cache aus der Verwaltung entfernt werden soll.

forgetCache

public void forgetCache(long containerId)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung. Eventuell noch im Cache befindliche Daten werden nicht automatisch geschrieben, sondern müssen vorher durch einen expliziten Aufruf der Methode CacheManager.Cache.flush() geschrieben werden.

Parameters:
containerId - ID des Containers dessen Cache aus der Verwaltung entfernt werden soll.

aggregateCounts

private void aggregateCounts(CacheManager.Cache cache)
Überträgt, die verschiedenen Ereigniszähler eines Cache-Objekts in die entsprechenden Summenzähler der Cache-Verwaltung.

Parameters:
cache - Cache-Objekt, dessen Zählerstände übernommen werden sollen.

getCounts

public long[] getCounts()
Liefert ein Array mit folgenden statistischen Informationen:

Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.

Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.

Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.

Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.

Returns:
Array mit statistischen Informationen

setCachingEnabled

public void setCachingEnabled(long objectId,
                              long atgId,
                              long aspectId,
                              int simulationVariant,
                              boolean enable)
Mit dieser Methode kann die Zwischenspeicherung für eine angegebene Datenidentifikation ein- bzw. ausgeschaltet werden.

Parameters:
objectId - Objekt-ID der Datenidentifikation.
atgId - ID der Attribugruppe der Datenidentifikation.
aspectId - ID des Aspekts der Datenidentifikation.
simulationVariant - Simulationsvariante der Datenidentifikation.
enable - true, wenn die Zwischenspeicherung eingeschaltetwerden soll; false, wenn die Zwischenspeicherung ausgeschaltet werden soll.

isCacheEnabled

public boolean isCacheEnabled()

setCacheEnabled

public void setCacheEnabled(boolean cacheEnabled)

getWriteCountSum

long getWriteCountSum()

getProcessedCountSum

long getProcessedCountSum()

getBufferedCountSum

long getBufferedCountSum()

getUnbufferedCountSum

long getUnbufferedCountSum()