Hallo Gemeinde,
leider erhielt ich in einer anderen Community keine Antwort auf meine Frage, daher probiere ich es mal hier.
Nachdem ich mir ein Buch zu JavaEE besorgt habe und dort keine entsprechenden Antworten fand, frage ich noch mal hier:
Wie realisiert man einen Cache in einem Servlet?
Hintergrund:
Es gibt Dateien oder Datenbankeinträge, die vom Servlet zur Erfüllung seiner Aufgabe benötigt werden. Es ist dabei aber nicht zwingend notwendig, dass die bis auf die Millisekunde aktuell sind.
Ich habe nun die Idee eines Heartbeats: Alle x Minuten fülle ich eine HashMap mit den neuesten Daten an.
Die Methoden des Servlets greifen dabei auf diese zurück. Datenbankanfragen oder ständiges Datei-parsen fällt weg.
Meine Frage ist jetzt allerdings: Wie greife ich darauf am besten (und saubersten) zu.
Gesetz dem Fall ich habe ein komplexes Projekt mit hunderten Klassen. Ich möchte, dass ich von jeder dieser Klassen aus die theoretische Möglichkeit habe, auf den Cache zuzugreifen, der die Daten vorhält.
Wenn ich den Cache jetzt als einfache Variable meines Servlets abspeichere, kann ich darauf aber nicht mehr zugreifen.
Gut, ich könnte die HashMap als Variable des Servlets angeben und diese dem Konstruktor von bestimmten Request-Handler-Objekten mitgeben. Dann wäre das Ganze gekapselt.
Aber ist das wirklich Best Practice?
Wohlbemerkt: Wir reden hier nicht von einem HTML-Cache. Das ist zwar ein interessantes Thema, da man sich dann die Arbeit erspart, den Request überhaupt komplett durchzuarbeiten, sondern das Ergebnis sofort liefern kann - aber hier geht es wirklich um einen Cache, der Daten aus Dateien oder Datenbanken rausholt und für die eigene Arbeit vorhält.
Cache-Events
Was mich auch noch interessiert, ist, ob ich ein Objekt dazu zwingen kann, nach einer bestimmten Zeit automatisch eine Methode aufzurufen. Also das z.B. alle 30 Sekunden im Cache überprüft wird, ob die gecachten Daten nicht schon zu alt sind oder etwas Ähnliches. Bisher habe ich noch nirgends etwas zu so einem objektinternen Micromanagement finden können.
Danke!
Beste Grüße
leider erhielt ich in einer anderen Community keine Antwort auf meine Frage, daher probiere ich es mal hier.
Nachdem ich mir ein Buch zu JavaEE besorgt habe und dort keine entsprechenden Antworten fand, frage ich noch mal hier:
Wie realisiert man einen Cache in einem Servlet?
Hintergrund:
Es gibt Dateien oder Datenbankeinträge, die vom Servlet zur Erfüllung seiner Aufgabe benötigt werden. Es ist dabei aber nicht zwingend notwendig, dass die bis auf die Millisekunde aktuell sind.
Ich habe nun die Idee eines Heartbeats: Alle x Minuten fülle ich eine HashMap mit den neuesten Daten an.
Die Methoden des Servlets greifen dabei auf diese zurück. Datenbankanfragen oder ständiges Datei-parsen fällt weg.
Meine Frage ist jetzt allerdings: Wie greife ich darauf am besten (und saubersten) zu.
Gesetz dem Fall ich habe ein komplexes Projekt mit hunderten Klassen. Ich möchte, dass ich von jeder dieser Klassen aus die theoretische Möglichkeit habe, auf den Cache zuzugreifen, der die Daten vorhält.
Wenn ich den Cache jetzt als einfache Variable meines Servlets abspeichere, kann ich darauf aber nicht mehr zugreifen.
Gut, ich könnte die HashMap als Variable des Servlets angeben und diese dem Konstruktor von bestimmten Request-Handler-Objekten mitgeben. Dann wäre das Ganze gekapselt.
Aber ist das wirklich Best Practice?
Wohlbemerkt: Wir reden hier nicht von einem HTML-Cache. Das ist zwar ein interessantes Thema, da man sich dann die Arbeit erspart, den Request überhaupt komplett durchzuarbeiten, sondern das Ergebnis sofort liefern kann - aber hier geht es wirklich um einen Cache, der Daten aus Dateien oder Datenbanken rausholt und für die eigene Arbeit vorhält.
Cache-Events
Was mich auch noch interessiert, ist, ob ich ein Objekt dazu zwingen kann, nach einer bestimmten Zeit automatisch eine Methode aufzurufen. Also das z.B. alle 30 Sekunden im Cache überprüft wird, ob die gecachten Daten nicht schon zu alt sind oder etwas Ähnliches. Bisher habe ich noch nirgends etwas zu so einem objektinternen Micromanagement finden können.
Danke!
Beste Grüße