Wir müssen einen Housekeeping-Thread in einem EJB3.0-Container ausführen. Wir haben derzeit ein "TimerService" @Stateless EJB (notwendig, weil es andere @ EJBs injiziert hat), die einen Intervall-EJB-Timer erzeugen, wenn die startTimer() -Methode aufgerufen wird. Es sollte nur eine Instanz dieses Timer-Threads geben. Die aktuelle Lösung beinhaltet den Aufruf von startTimer() von der init() -Methode eines unserer Servlets, wobei das Servlet beim Start in der web.xml geladen werden muss, aber das fühlt sich an wie ein zufälliges Verhalten anstelle der richtigen Vorgehensweise . Wir hatten bereits ein Problem, weil jemand anderes das Servlet unterklassifiziert hat, was bedeutete, dass init() zweimal aufgerufen wurde, was zwei Timer-Threads bedeutete.Einzelner Hintergrund-Thread in einem EJB3.0-Container
Dies fühlt sich an, als ob es keine ungewöhnliche Anforderung ist, also, was ist der richtige Weg, dies zu tun, wenn überhaupt? Es scheint mir so, als müsste es einen einfachen Weg geben, den Container zu bitten, beim Start einen Thread zu starten, ohne ihn an andere Ressourcen im Container binden zu müssen.
vielleicht verwandt? http://stackoverflow.com/questions/2707733/eager-auto-loading-of-ejb-load-ejb-on-startup-on-jboss – Bozho
Danke - die angenommene Antwort gilt für EJB3.1, die wir nicht sind Verwenden, aber von Interesse ist die andere Antwort, die erwähnt, dass der beste Weg vor 3.1 ist die Lösung, die wir derzeit verwenden :( – RevBingo