Hallo
ich möchte bei einer Web-Anwendung auf Basis von Servlets die Clientrequests „mitloggen“ und nach einer gewissen Zeit aber auch wieder löschen z.B. jede Woche. DAs ganze sollte „in Memory“ Passieren da wenige Anfragen und wegen ein paar weiteren ANforderungen. (das ganze ist auch nur exemplarisch also nicht kritisieren weil ich das nicht in einre DB oder sonst wie mache)
Meine Frage was ist hier effektiver ist. Eine Hashtable in den Servlet/Web-App-Context zu speichern die die ForeignHosts als Key benutzt sowie eine zusätzlich Variable welche die letzte Reset-ZEit speichert (timestamp) __oder___ das ganze in ein Singleton zu packen. Anzumerken für die obere Variante ist, dsas man die ganzen Zugriffe natürlich synchronisieren muss.
Ein singleton würde mir wesentlich besser gefallen, da es später auch unabhängig von der Web-Anwendung genutzt werden kann. ABer mir ist aus Unwissenheit:wink: nicht klar, wie lange der Lebenszyklus eines Singleton ist.
(Es dürfte somit nur ein einziges mal instanziert werde und bis zur Ende der VM bzw. der Anwendung laufen!! Tut es das wirklich?)
Beim ersten Zugriff darauf wird mittels einer statischen getInstance() Methode die Instanz in einer statischen Klassenvariable gespeichert. Heisst das, dass egal ob ich danach auch wieder sämtliche Referenzen auf dieses Singletoninstanz „nulle“, die Instanz dennoch weiterexistiert, bis die VM gestoppt wird (sprich niemals garbagecollected wird.) =Es existiert ja noch die interne Referenz der Singletoninstanz in der statischen klassenvariablen. Somit existiert ständig eine Referenz auf dieses Singleton.
Andererseits könnte ja auch die VM so intelligent sein und merken, dass das eine rein „zirkuläre“ Referenz ist, die nicht von „aussen“ referensiert wird und somit das Singleton für die garbage collection freigeben.
(Als Ausweg wäre hier, die Singletoninstanz im Webabb/Servlet-Context zu speichern…)
Wer kann mir das erklären oder Infos dazu geben was da konkret geschieht und wie der Lebenzyklus einer Singleton-Instanz aussieht.
vielen Dank
Julian