2009-05-15 5 views

Antwort

1

Nein, es wird nicht (zumindest keine App-Server, die ich kenne). Die Servlet-Spezifikation gibt Ihnen den ServletContextListener Hook, um den App-Lebenszyklus zu verwalten. Einige App-Server wie JBoss verfügen über spezielle Anmerkungen für Singleton-Beans (@Service), und EJB 3.1 enthält die Annotation @Singleton. Eine andere Sache, über die Sie bei der Verwendung von Singletons nachdenken sollten, ist die Frage, was passiert, wenn Sie Ihre App clustern, hohe Verfügbarkeit (High Availability, HA) oder eine Art der Replikation benötigen, es sei denn, Sie verwenden einen Share-Nothing-Ansatz. Verteilte Caches sind aus diesem Grund gut.

1

Die kurze Antwort auf diese Frage ist nein. Ich kenne keinen Anwendungsserver, der sich so verhält. Es gibt jedoch einige Dinge, auf die hingewiesen werden sollte. Es folgt eine vereinfachte Erklärung:

Wenn Ihr Anwendungsserver (dh JBoss w/Tomcat) gestartet wird, lädt er einige Klassen in einem Klassenlader, die von allen Anwendungen gemeinsam genutzt werden. Wenn die Anwendung bereitgestellt wird, lädt sie diese Klassen in ihren eigenen Klassenlader. Wenn Sie Ihre Anwendung deimplementieren, werden der Klassenlader und alle zugehörigen Klassen unbemerkt gesammelt. Wenn die Anwendung erneut bereitgestellt wird, werden alle Ihre Klassen neu geladen, und Ihre Singletons werden erneut installiert.

Ihre Anwendung wird sich (theoretisch, atleast) nach einer erneuten Bereitstellung wie nach einem JVM/Application Server-Neustart gleich verhalten.

Noch ein letzter Tipp: Wenn Sie das Singleton-Muster in Ihrer Unternehmens-Java-Anwendung verwenden möchten, müssen Sie die Einschränkungen von Singleton-Objekten in einer Anwendungsserverumgebung kennen. Sie können Probleme feststellen, wenn Sie beispielsweise Ihre Anwendung clustern möchten.

Verwandte Themen