2010-11-22 1 views
1

Zusammenfassung FrageWie empfiehlt es sich, Threads zu starten oder freigegebene Ressourcen in einem Java-Anwendungsserver außerhalb des Servlet-Aufrufs zu laden?

Was ist der beste Weg, Ressourcen in den Speicher zu laden, die über Servlets in einem Java-Anwendungsserver gemeinsam genutzt werden?

Was ich tue eigentlich

Ich möchte einen Daemon-Thread erstellen, die eine Warteschlange überwacht. Dieser Warteschlange können Objekte aus Servlet-Threads hinzugefügt werden. Der Thread würde bis zu einem festgelegten Zeitraum warten und die Warteschlange überprüfen, ob darin Elemente enthalten sind. Wenn dies der Fall ist, würde sie sie verarbeiten und entfernen. Dieser Thread müsste irgendwo irgendwann gestartet werden. Ich dachte, dass ein Servlet mit nur der init-Methode, die implementiert wird, für diese Aufgabe funktionieren würde, oder gibt es einen besseren Ort, um Startcode wie diesem in einem Anwendungsserver zu platzieren? Nähme ich mich dem Problem, alles wackelig?

Updates

Ich fand this question und die akzeptierte Antwort war die LifeCycle Zuhörer zu verwenden. Ist dies ein portabler Weg, Dinge zu tun, oder ist mein Code an einen einzigen Anwendungsserver gebunden? Ein bisschen mehr Nachforschungen führten mich zu ein paar Posts in Foren, die sagten, dass ich dies in einer ServletContextListener Implementierung tun könnte.

Antwort

2

Normalerweise starte ich diese Art von Worker-Threads indirekt von einem Servlet mit der von Ihnen beschriebenen Methode (normalerweise existieren sie in einem anderen Objekt, das die Queue-Extraktion ausführt und die Verarbeitung steuert).

Um Objekte aus dem Thread zu entfernen, müssen Sie dies nicht zeitabhängig tun. Sie könnten Ihren Thread warten() auf das Warteschlangenobjekt und wenn ein Objekt von einem anderen Thread in die Warteschlange gestellt wird thread würde notify() in der Warteschlange aufrufen, um den beobachtenden "worker" thread freizugeben.

Google 'Java Worker Thread warten Benachrichtigung' für viele Beispiele.

+0

Danke für den Tipp auf warten/benachrichtigen. – Elijah

Verwandte Themen