de.bsvrz.dav.daf.main.impl
Class CacheManager

java.lang.Object
  extended by de.bsvrz.dav.daf.main.impl.CacheManager

public class CacheManager
extends Object

Die interne Subkomponente Cache-Manager ist für das Speichern der ankommenden Daten und für die Bereitstellung bereits gespeicherte Daten zuständig. Die gespeicherten Daten werden nach ihrem Index sortiert festgehalten. Ein im Hintergrund laufender Thread, der CacheCleaner, sorgt dafür, dass die Daten, nach ihrer beim Anmelden angegebenen Verweilzeit, aus dem Cache gelöscht werden. Diese Subkomponente wird von ClientDavConnection erzeugt.

Author:
Kappich Systemberatung

Nested Class Summary
(package private)  class CacheManager.CacheCleaner
           
 
Field Summary
private  DataModel _dataModel
          Der Konfigurationsmanager
private static Debug _debug
           
private  Hashtable cache
          Der Datensätzecache.
private  CacheManager.CacheCleaner cleaner
          Der Verwalter der Datensätze im Cache
private  SubscriptionManager subscriptionManager
          Der Anmeldemanager
 
Constructor Summary
CacheManager(SubscriptionManager _subscriptionManager, ConfigurationManager _configurationManager)
          Dieser Konstruktor erzeugt eine Instanz und hält eine Referenz auf die Subkomponenten Anmeldemanager und Konfigurationsmanager fest.
CacheManager(SubscriptionManager _subscriptionManager, DataModel dataModel)
          Dieser Konstruktor erzeugt eine Instanz und hält eine Referenz auf die Subkomponenten Anmeldemanager und Konfigurationsmanager fest.
 
Method Summary
(package private)  void cleanCache(BaseSubscriptionInfo baseSubscriptionInfo)
          Diese Methode wird vom SubscriptionManager aufgerufen.
 void close()
          Schliesst diese Komponente und beendet den Thread CacheCleaner
 List getCachedData(BaseSubscriptionInfo baseSubscriptionInfo, boolean delayedDataFlag, int n)
          Diese Methode iteriert durch den Cache-Inhalt und sammelt die letzen n Datensätze, vom aktuellen Datensatz startend in die Vergangenheit.
 List getCachedData(BaseSubscriptionInfo baseSubscriptionInfo, boolean delayedDataFlag, long fromTime, long toTime)
          Diese Methode iteriert durch den Cache-Inhalt und sammelt die Datensätze, deren Zeitstempel zwischen den spezifizierten Zeiten liegt.
(package private)  Thread getCleaner()
          Diese Methode wird für JUnit-Tests benötigt.
 CachedObject getLastValueOfCachedData(BaseSubscriptionInfo baseSubscriptionInfo, boolean delayedDataFlag)
          Gibt den aktuellen Datensatz der spezifizierten Daten zurück.
 void update(SendDataObject newData)
          Diese Methode wird von der Protokollsteuerung DaV-DAF aufgerufen, wenn ein aktuelles Datum angekommen ist.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_debug

private static final Debug _debug

subscriptionManager

private SubscriptionManager subscriptionManager
Der Anmeldemanager


_dataModel

private final DataModel _dataModel
Der Konfigurationsmanager


cache

private Hashtable cache
Der Datensätzecache. Als Key dient die BaseSubscriptionInfo, der Value ist eine Liste von CachedObject-Objekten.


cleaner

private CacheManager.CacheCleaner cleaner
Der Verwalter der Datensätze im Cache

Constructor Detail

CacheManager

public CacheManager(SubscriptionManager _subscriptionManager,
                    ConfigurationManager _configurationManager)
Dieser Konstruktor erzeugt eine Instanz und hält eine Referenz auf die Subkomponenten Anmeldemanager und Konfigurationsmanager fest. Auch eine Instanz des CacheCleaners wird gestartet.

Parameters:
_subscriptionManager - Im Konstruktor wird die Methode SubscriptionManager.setCacheManager(CacheManager) aufgerufen und dieses Objekt übergeben.
_configurationManager - Wird zum anfordern des Datenmodells benötigt.

CacheManager

CacheManager(SubscriptionManager _subscriptionManager,
             DataModel dataModel)
Dieser Konstruktor erzeugt eine Instanz und hält eine Referenz auf die Subkomponenten Anmeldemanager und Konfigurationsmanager fest. Auch eine Instanz des CacheCleaners wird gestartet.

Parameters:
_subscriptionManager - Im Konstruktor wird die Methode SubscriptionManager.setCacheManager(CacheManager) aufgerufen und dieses Objekt übergeben.
dataModel - Datenmodell
Method Detail

update

public void update(SendDataObject newData)
            throws InterruptedException
Diese Methode wird von der Protokollsteuerung DaV-DAF aufgerufen, wenn ein aktuelles Datum angekommen ist. Die Datensätze, die als Bytestrom ankommen, werden zuerst in Attribute umgewandelt, und ein neues CachedObject wird gebildet. Dieses wird nach dem Datensatzindex sortiert in den Cache eingefügt, und die SubscriptionManager- Subkomponente wird über das Ankommen des aktuellen Datums benachrichtigt.

Parameters:
newData - Neuer Datensatz
Throws:
InterruptedException - Wenn der Thread während eines blockierenden Aufrufs unterbrochen wurde

close

public final void close()
Schliesst diese Komponente und beendet den Thread CacheCleaner


getCleaner

Thread getCleaner()
Diese Methode wird für JUnit-Tests benötigt.

Returns:
Thread, der den Cache aufräumt.

cleanCache

final void cleanCache(BaseSubscriptionInfo baseSubscriptionInfo)
Diese Methode wird vom SubscriptionManager aufgerufen. Wenn keine Anmeldung der spezifizierten Daten (mehr) vorliegt, bewirkt der Aufruf dieser Methode, dass die entsprechenden Datensätze aus dem Cache entfernt werden.

Parameters:
baseSubscriptionInfo - Alle Daten, die zu dieser Anmeldeinformationen vorhanden sind, werden aus dem Cache entfernt.

getLastValueOfCachedData

public final CachedObject getLastValueOfCachedData(BaseSubscriptionInfo baseSubscriptionInfo,
                                                   boolean delayedDataFlag)
Gibt den aktuellen Datensatz der spezifizierten Daten zurück. Wenn der Datensatz kein nachgelieferter sein darf, dann wird der letzte nicht nachgeliefert Datensatz zurückgegeben. Ist kein passender Datensatz vorhanden, so wird null zurückgegeben.

Parameters:
baseSubscriptionInfo - Anmeldeinformation eines Datensatzes
delayedDataFlag - Nachgelieferte Daten
Returns:
Datensatz, der die Parameter erfüllt oder null, falls kein Datensatz vorhanden ist.

getCachedData

public final List getCachedData(BaseSubscriptionInfo baseSubscriptionInfo,
                                boolean delayedDataFlag,
                                int n)
Diese Methode iteriert durch den Cache-Inhalt und sammelt die letzen n Datensätze, vom aktuellen Datensatz startend in die Vergangenheit. Wenn keine nachgelieferten erwünscht sind, so werden alle nachgelieferte Daten übersprungen. Ist kein passender Datensatz vorhanden, so wird null zurückgegeben. Sind weniger als n Datensätze vorhanden, so werden diese zurückgegeben.

Parameters:
baseSubscriptionInfo - Anmeldeinformation eines Datensatzes
delayedDataFlag - Nachgelieferte Daten
n - Anzahl der gültigen Versionen eines Datensatzes
Returns:
Datensätze/satz oder null, falls kein Datensatz vorhanden ist. Der Datensatz, der als letztes gecasht wurde steht an Index 0.

getCachedData

public final List getCachedData(BaseSubscriptionInfo baseSubscriptionInfo,
                                boolean delayedDataFlag,
                                long fromTime,
                                long toTime)
Diese Methode iteriert durch den Cache-Inhalt und sammelt die Datensätze, deren Zeitstempel zwischen den spezifizierten Zeiten liegt. Wenn keine nachgelieferten erwünscht sind, so werden alle nachgelieferte Daten übersprungen. Ist kein passender Datensatz vorhanden, so wird null zurückgegeben.

Parameters:
baseSubscriptionInfo - Anmeldeinformation eines Datensatzes
delayedDataFlag - Nachgelieferte Daten
fromTime - Start Zeitintervall. Wird der Wert -1 übergeben, so wird die Datenzeit des zuletzt gecachten Objekts benutzt.
toTime - Ende Zeitintervall. Wird der Wert -1 übergeben, so wird die Datenzeit des zuletzt gecachten Objekts benutzt.
Returns:
Datensätze/Datensatz für den die übergebenen Parameter erfüllt sind oder null wenn kein Datensatz vorhanden ist