Singleton in einem Servlet
Kann ich ein singleton in einem servlet zu teilen Informationen zwischen verschiedenen session.
Weiß ich, dass nur 1 Beispiel-Servlet ausgeführt wird, zu jeder Zeit. Aufruf der service-Methode für jede eingehende Anfrage. Aber wie um die Schaffung eines anderen Singleton-Klasse (zB: ShareSingleton) die Anrufe Ihrer getInstance() der servlets die Init () - Methode. Diese ShareSingleton transportieren können-Daten, dass muss geteilt werden zwischen Sitzungen/reqests.
Ist es bedenklich, einen solchen Ansatz in servlets ?
- Hat es funktioniert, wenn du es ausprobiert? Was gab / gibt es Schwierigkeiten?
- Der servlet-Kontext ist vielleicht einen besseren Ort, um gemeinsame Informationen. Siehe docs.oracle.com/javaee/6/api/javax/servlet/...
- Es funktioniert. Ich bin nur besorgt über die Konsistenz dieses Ansatzes
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten..sehen Sie dies für das beste Konzept der singletons: http://javarevisited.blogspot.com/2012/07/why-enum-singleton-are-better-in-java.html
Zweiten: denken Sie Daran, singletons sind nur einzelne der JVM. Also..wenn Sie mehr als eine JVM läuft, erwarten Sie nicht, jedes singleton haben den gleichen Status.
Drittens: um sicher Zu sein, ich würde instanziieren des singleton-von einem Zuhörer von der servlet-Kontext.
sehen http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html
definieren Sie eine Klasse in Ihrem web.xml und instanziieren Sie es dort. Das singleton wird erstellt, wenn Sie Ihre webapp startet, statt, wenn n Leute getroffen die service-Methode des servlet auf einmal.
Ja, Sie können. Beachten Sie, dass der servlet-container kann mehrere Instanz der Servlet-Objekt, so haben Sie, um sicherzustellen, dass man Objekt ist freigegeben, alle diese Instanzen.
Beispielsweise könnten Sie tun:
Und dann den Wert im cache, wenn es verfügbar ist, oder anderweitig zu aktualisieren, den cache mit einem neu berechneten Wert. Beachten Sie, dass das Objekt, das geteilt werden muss thread-sicher.