Crochet d'arrêt Tomcat - spray

J'essaie d'implémenter un crochet d'arrêt dans untomcat web app où j'ai peu de contrôle. Fondamentalement, j'ai mis en place une lib, qui utilise un client de spray rest, basée sur l'acteur. J'ai essayé le crochet d'arrêt typique de la pulvérisation, mais cela n'a pas fonctionné. Le pire, c'est que l'accès au système d'acteurs est illégal, comme si tout était déjà arrêté.

Je me demandais s'il y a spécifique à tomcat si on veut appeler:

Runtime.getRuntime().addShutdownHook(new Thread() {

override def run() {
println("shutting down spray")
IO(Http) ! Http.CloseAll
IO(Http) ! PoisonPill
system.shutdown();
}
})

Réponses:

1 pour la réponse № 1

Je ne pense pas que vous ayez besoin de faire ça.

Vous devriez avoir enregistré spray.servlet.Initializer comme un ServletContextListener dans ton web.xml.

C'est ainsi spray.servlet.Initializer annule ServletContextListener.contextDestroyed copié de github.com/spray/spray

@volatile private[this] var actorSystem: Option[ActorSystem] = None

...

def contextDestroyed(e: ServletContextEvent): Unit = {
booted switchOff {
println("Shutting down spray application ...")
actorSystem.foreach(_.shutdown())
actorSystem.foreach(_.awaitTermination())
}
}

Voir également documentation de spray-servlet.