Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handling container stop/reload event

A have lift app starting ssh daemon in Boot.scala. Here is the problem: when i run container:restart / in sbt session I get Address alread in use exception. Now two questions:

  1. Is it right way to start dependent service in Boot.scala?
  2. Anyway how is it possible to handle container:stop event?
like image 678
Andrey Kuznetsov Avatar asked Jan 29 '12 19:01

Andrey Kuznetsov


1 Answers

I think the Lift-y way to do it is with LiftRules.unloadHooks.

It's not well-documented (AFAIK), but if you look in the Lift source code, you'll see that when the LiftServlet is destroy()ed, the functions defined in LiftRules.unloadHooks are executed.

You can add functions to the unloadHooks RulesSeq with the append or prepend method, depending on what order you want them executed in. So, in your bootstrap.liftweb.Boot.boot method, you might do something like this:

sshDaemon.start()
LiftRules.unloadHooks.append( () => sshDaemon.stop() )

(Assuming that was how you started and stopped your SSH daemon.)

I'm not 100% certain the LiftServlet.destroy() method gets invoked when the sbt web-plugin's container:restart command is run - that's determined by the plugin and its interaction with Jetty, not by Lift - but the container:stop command should definitely do the trick.

like image 188
Mark Tye Avatar answered Sep 29 '22 12:09

Mark Tye