AMETAS.util.cache
Class Cache

java.lang.Object
  extended byAMETAS.util.cache.Cache

public class Cache
extends java.lang.Object

Diese Klasse implementiert die Funktionalität eines Caches. Cacheable-Objekte, die in einem solchen Cache gespeichert werden, werden nach bestimmten Metriken in einen persistenten Speicher ausgelagert, bzw. bei Gebrauch wieder eingelagert. Diese Metriken werden durch die Cacheable-Objekte, bzw. deren Implementierer bestimmt. Der Cache ist mit einem PersistentStorage-Objekt assoziiert, das den Hintergrundspeicher kapselt. Hierbei sind verschiedenste Implementierungen von PersistentStorage-Klassen denkbar. Beispielsweise könnte eine solche Klasse die Objekte in einer SQL-Datenbank ablegen oder einfach auf Platte schreiben.

Ein Objekt kann sich in folgenden Zuständen befinden:

Ein Cache besitzt keinen eigenen Kontrollfluß, der für das Aufräumen zuständig ist. Dies ist von dem Programm durchzuführen, das die Cache-Klassen verwendet.

Since:
Version 2.1.0

Field Summary
protected  boolean m_bWriteThrough
          Gibt an, ob jedes Ablegen im Cache zu einer Speicherung im persistenten Speicher führen soll.
protected  java.util.Hashtable m_htbCachedObjects
          Speichert die gecacheten Objekte.
protected  int m_nHits
          Gesamtzahl der angefragten Objekte, die im Cache gefunden wurden.
protected  int m_nMisses
          Gesamtzahl der angefragten Objekte, die nicht im Cache gefunden wurden und nachgeladen werden mußten.
protected  int m_nNotFound
          Gesamtzahl der angefragten Objekte, die weder im Cache noch im Hintergrundspeicher gefunden wurden.
protected  PersistentStorage m_psStorage
          Der persistente Speicher, der für die Auslagerung verwendet wird.
 
Constructor Summary
Cache(PersistentStorage psStorage)
          Konstruktor.
 
Method Summary
 void cache(Cacheable cch)
          Nimmt ein neues Objekt in der Cache auf.
 void cleanup()
          Räumt diesen Cache auf.
 void clear()
          Löscht alle Objekte aus dem Cache.
 void clearPersistently()
          Löscht alle Objekte aus dem Cache und dem Hintergrundspeicher.
 void discard(java.lang.String sName)
          Verwirft das Objekt mit dem Namen sName.
 Cacheable get(java.lang.String sName)
          Liefert ein Objekt aus dem Cache zurück.
 Cacheable[] getAllCachedObjects()
          Liefert alle im Cache befindlichen Objekte in einem Array zurück.
 double getCacheRatio()
          Liefert der Anteil der im Cache befindlichen Objekte bezogen auf die Zahl aller gespeicherten Objekte.
 int getFaults()
          Liefert die Zahl aller nicht gefundenen und nachgeladenen Objekte seit dem letzten Reset zurück.
 int getHits()
          Liefert die Zahl der Cache-Hits seit dem letzten Reset zurück.
 int getMisses()
          Liefert die Zahl der Cache-Misses seit dem letzten Reset zurück.
 int getNotFound()
          Liefert die Zahl der nicht gefundenen Objekte seit dem letzten Reset zurück.
 int getSize()
          Liefert die Anzahl der im Cache befindlichen Objekte zurück.
 java.lang.String getStatsString()
          Liefert eine Zusammenfassung der Cache-Statistik in einem String.
 int getStorageSize()
          Liefert die Anzahl der Objekte im Hintergrundspeicher zurück.
 void remove(java.lang.String sName)
          Entfernt das Objekt mit dem Namen sName aus dem Cache.
 void removePersistently(java.lang.String sName)
          Entfernt das Objekt mit dem Namen sName aus dem Cache.
 void resetStats()
          Setzt die statistisch erfaßten Werte zurück.
 void setDebug(boolean b)
          Schaltet die Augabe von Debug-Meldungen ein und aus.
 void setModified(Cacheable cch)
          Gibt dem Cache bekannt, daß das übergebene Cacheable-Objekt verändert wurde.
 void setWriteThrough(boolean b)
          Setzt das WriteThrough-Flag.
 void write()
          Schreibt alle schmutzigen Objekte in den persistenten Speicher und stellt so die Konsistenz her.
 void writeAll()
          Schreibt alle Objekte, ob schmutzig oder nicht, in den persistenten Speicher und stellt so die Konsistenz her.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_psStorage

protected PersistentStorage m_psStorage
Der persistente Speicher, der für die Auslagerung verwendet wird.


m_htbCachedObjects

protected java.util.Hashtable m_htbCachedObjects
Speichert die gecacheten Objekte.


m_bWriteThrough

protected boolean m_bWriteThrough
Gibt an, ob jedes Ablegen im Cache zu einer Speicherung im persistenten Speicher führen soll.


m_nMisses

protected int m_nMisses
Gesamtzahl der angefragten Objekte, die nicht im Cache gefunden wurden und nachgeladen werden mußten. Diese Variable hat rein statistische Bedeutung und Hilft bei der Bewertung der Auslagerungsstrategie.


m_nHits

protected int m_nHits
Gesamtzahl der angefragten Objekte, die im Cache gefunden wurden. Diese Variable hat rein statistische Bedeutung und Hilft bei der Bewertung der Auslagerungsstrategie.


m_nNotFound

protected int m_nNotFound
Gesamtzahl der angefragten Objekte, die weder im Cache noch im Hintergrundspeicher gefunden wurden. Diese Variable hat rein statistische Bedeutung und Hilft bei der Bewertung der Auslagerungsstrategie. Nicht gefundene Objekte sind zwar auch misses, werden in diesen aber nicht gezählt.

Constructor Detail

Cache

public Cache(PersistentStorage psStorage)
Konstruktor.

Parameters:
psStorage - ein PersistentStorage-Objekt, das als Hintergrundspeicher verwendet werden soll.
Method Detail

setDebug

public void setDebug(boolean b)
Schaltet die Augabe von Debug-Meldungen ein und aus.

Parameters:
b - true wenn Debug-Ausgaben gemacht werden sollen, false sonst.

getSize

public int getSize()
Liefert die Anzahl der im Cache befindlichen Objekte zurück.

Returns:
Anzahl der im Cache befindlichen Objekte.

getStorageSize

public int getStorageSize()
Liefert die Anzahl der Objekte im Hintergrundspeicher zurück.

Returns:
Anzahl der Objekte im Hintergrundspeicher.

getCacheRatio

public double getCacheRatio()
Liefert der Anteil der im Cache befindlichen Objekte bezogen auf die Zahl aller gespeicherten Objekte.

Returns:
Verhältnis zwischen der Anzahl der im Cache befindlichen Objekte und der Anzahl der Objekte, die sich im Hintergrundspeicher befinden.

cleanup

public void cleanup()
             throws java.io.IOException
Räumt diesen Cache auf. Hier werden alle Objekte, die swapable sind, in den persistenten Speicher ausgelagert.

Throws:
java.io.IOException - wenn beim Schreiben eines Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt.

write

public void write()
           throws java.io.IOException
Schreibt alle schmutzigen Objekte in den persistenten Speicher und stellt so die Konsistenz her.

Throws:
java.io.IOException - wenn beim Schreiben eines Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt.

writeAll

public void writeAll()
              throws java.io.IOException
Schreibt alle Objekte, ob schmutzig oder nicht, in den persistenten Speicher und stellt so die Konsistenz her.

Throws:
java.io.IOException - wenn beim Schreiben eines Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt.

cache

public void cache(Cacheable cch)
           throws java.io.IOException
Nimmt ein neues Objekt in der Cache auf.

Parameters:
cch - das Cacheable-Objekt, das in den Cache gelegt werden soll.
Throws:
java.io.IOException - wenn beim Schreiben des Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt (write through eingeschaltet).

setModified

public void setModified(Cacheable cch)
                 throws java.io.IOException
Gibt dem Cache bekannt, daß das übergebene Cacheable-Objekt verändert wurde. Das Objekt wird als dirty gekennzeichnet. Falls write through eingeschaltet ist, wird die Änderung direkt in den persistenten Speicher geschrieben. Merke: Diese Methode muß aufgerufen werden, wenn man den write through-Mechanismus verwenden will, da der Cache sonst nicht weiß, ob sich das Objekt verändert hat. Diese Methode ruft setModified(true) auf dem Cacheable auf, um es als dirty zu kennzeichnen. Danach wird es in den Hintergrundspeicher geschrieben, falls write through eingeschaltet ist.

Parameters:
cch - das Cacheable-Objekt, das als modifiziert gekennzeichnet werden soll.
Throws:
java.io.IOException - wenn beim Schreiben des Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt (write through eingeschaltet).

get

public Cacheable get(java.lang.String sName)
              throws java.io.IOException
Liefert ein Objekt aus dem Cache zurück. Wenn das Objekt nicht im Cache ist, so wird im persistenten Speicher nachgeschaut und das Objekt wird eingelagert.

Parameters:
sName - der Name des gewünschten Objektes. Dies ist der Name der von der Methode getName() des Cacheable geliefert wird.
Returns:
Das Cacheable, das unter dem angegebenen Namen im Cache gespeichert ist, oder null, falls kein Objekt unter diesem Namen gefunden wurde.
Throws:
java.io.IOException - wenn beim Laden des Objektes ein I/O-Fehler auftritt.
See Also:
Storeable.getName()

remove

public void remove(java.lang.String sName)
            throws java.io.IOException
Entfernt das Objekt mit dem Namen sName aus dem Cache. Falls das Objekt dirty ist, wird es zuvor persistent gespeichert.

Parameters:
sName - der Name des zu entfernenden Objektes. Dies ist der Name der von der Methode getName() des Cacheable geliefert wird.
Throws:
java.io.IOException - wenn beim Schreiben des Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt (Objekt dirty).
See Also:
Storeable.getName()

discard

public void discard(java.lang.String sName)
Verwirft das Objekt mit dem Namen sName. Das Objekt wird nicht in der Hintergrundspeicher geschrieben. Alle Änderungen, die seit der letzten Speicherung geschehen sind, gehen verloren!

Parameters:
sName - der Name des zu verwerfenden Objektes. Dies ist der Name der von der Methode getName() des Cacheable geliefert wird.
See Also:
Storeable.getName()

clear

public void clear()
           throws java.io.IOException
Löscht alle Objekte aus dem Cache. Zuvor werden alle schmutzigen Objekte persistent gespeichert. Es wird nicht geprüft, ob die Objekte swapable sind.

Throws:
java.io.IOException - wenn beim Schreiben eines Objektes in den Hintergrundspeicher ein I/O-Fehler auftritt.

removePersistently

public void removePersistently(java.lang.String sName)
Entfernt das Objekt mit dem Namen sName aus dem Cache. Diese Aktion wirkt sich direkt auf den persistenten Speicher aus. Das Objekt wird auch aus diesem entfernt.

Parameters:
sName - der Name des zu verwerfenden Objektes. Dies ist der Name der von der Methode getName() des Cacheable geliefert wird.
See Also:
Storeable.getName()

clearPersistently

public void clearPersistently()
Löscht alle Objekte aus dem Cache und dem Hintergrundspeicher. Diese Aktion wirkt sich direkt auf den persistenten Speicher aus. Auch in ihm werden alle Objekte gelöschen.


setWriteThrough

public void setWriteThrough(boolean b)
Setzt das WriteThrough-Flag.

Parameters:
b - true, falls alle Veränderungen direkt in den Hintergrundspeicher geschrieben werden sollen, false sonst.
See Also:
Cacheable.setModified(boolean)

getAllCachedObjects

public Cacheable[] getAllCachedObjects()
Liefert alle im Cache befindlichen Objekte in einem Array zurück.

Returns:
Ein Array von Cacheable-Objekten, in dem sich alle Objekte befinden, die zur Zeit im Cache liegen.

getMisses

public int getMisses()
Liefert die Zahl der Cache-Misses seit dem letzten Reset zurück.

Returns:
Anzahl der Cache-Misses

getHits

public int getHits()
Liefert die Zahl der Cache-Hits seit dem letzten Reset zurück.

Returns:
Anzahl der Cache-Hits

getNotFound

public int getNotFound()
Liefert die Zahl der nicht gefundenen Objekte seit dem letzten Reset zurück.

Returns:
Anzahl der nicht gefundenen Objekte

getFaults

public int getFaults()
Liefert die Zahl aller nicht gefundenen und nachgeladenen Objekte seit dem letzten Reset zurück. Dies sind alle Objekte, die nicht im Cache waren.

Returns:
Anzahl der aller nicht gefundenen und nachgeladenen Objekte

resetStats

public void resetStats()
Setzt die statistisch erfaßten Werte zurück.


getStatsString

public java.lang.String getStatsString()
Liefert eine Zusammenfassung der Cache-Statistik in einem String.

Returns:
Eine Zusammenfassung der Cache-Statistik in einem String