Java Web Application: Wie implementiert man Caching-Techniken?

Ich bin die Entwicklung einer Java web-Anwendung, Grundlagen it-Verhalten durch große XML-Konfigurationsdateien, die geladen werden, die von einem web-service. Da diese Dateien sind eigentlich nicht erforderlich, bis zu einem bestimmten Abschnitt der Anwendung zugegriffen wird, belastet Sie träge. Wenn man diese Dateien sind erforderlich, eine Abfrage an den webservice zum abrufen der entsprechenden Datei. Als einige der Konfigurationsdateien verwendet werden könnten viel, viel öfter als andere, würde ich mag, um das setup irgendeine Art von caching (mit vielleicht 1 Stunde Ablauf Zeit) zu vermeiden, erbitten, die gleiche Datei über und über.

Dateien, die vom Webdienst zurückgegeben werden, sind die gleichen für alle Benutzer in allen Sitzungen. Ich nicht mit JSP, JSF oder andere ausgefallene Rahmen, einfach nur servlets.

Meine Frage ist, was als beste Praxis zur Umsetzung eines solchen globalen, statischen cache innerhalb einer java Web-Anwendung? Ist eine singleton-Klasse geeignet, oder gibt es seltsame Verhaltensweisen durch den J2EE Container? Sollte ich aussetzen, irgendwo etwas über JNDI? Was soll ich tun, damit mein cache nicht geschraubt bekommen in Cluster-Umgebungen (es ist OK, aber nicht notwendig, um eine cache-pro-Cluster-server)?

Angesichts der Angaben oben, Wäre es, eine korrekte Umsetzung auf ein Objekt, verantwortlich für das caching als ServletContext Attribut?

Hinweis: ich möchte nicht, laden Sie alle am Start-und mit ihm getan werden, denn das würde

1). überlastung der webservice immer, wenn meine Anwendung gestartet
2). Die Dateien ändern kann, während meine Anwendung läuft, ich hätte also requery Sie trotzdem
3). Ich bräuchte noch einen Global zugänglichen cache, damit ist meine Frage immer noch hält

Update: Mit einem caching-proxy (wie squid), kann eine gute Idee sein, aber jede Anfrage an den webservice senden ziemlich große XML-Abfrage in die post-Daten, die kann jedes mal anders. Nur die web-Anwendung wirklich weiß, dass zwei unterschiedliche Aufrufe an den webservice sind tatsächlich gleichwertig.

Vielen Dank für Ihre Hilfe

InformationsquelleAutor der Frage LordOfThePigs | 2009-03-31

Schreibe einen Kommentar