2015-06-08 2 views
0

Я пытаюсь реализовать крюк остановки в веб-приложении tomcat, где у меня мало контроля. В принципе, я реализовал lib, который использует клиент для брызг на основе актера. Я пробовал типичный крюк с закрытием, но он не срабатывал. Хуже всего это говорит о том, что доступ к системе актеров является незаконным, как будто все уже завершено.Tomcat shutdown hook

мне было интересно, если есть специфичная для кота, если один хочет назвать:

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

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

Возможно, у меня есть ваш вопрос. Вы используете только брызговик? Или вы также используете спрей-сервлет? –

ответ

1

Я не думаю, что вам нужно сделать это.

Вы должны были зарегистрировать spray.servlet.Initializer как ServletContextListener в своем web.xml.

Это как spray.servlet.Initializer переопределяет ServletContextListener.contextDestroyed копируется из 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()) 
    } 
} 

Смотрите также spray-servlet documentation.