如何重新启动liftweb?

时间:2012-09-04 17:20:15

标签: scala lift

我的Boot.scala带有启动方法,我可以在其中进行设置。 最后,我调用LiftRules.statelessDispatchTable并附加我的类的新实例,该实例扩展了RestHelper,它具有服务块。

在某些时候,我收到一个信号并需要更改此类,因此我需要再次调用statelessDispatchTable来删除原始类并添加一个新类。

这样做的好方法是什么?

谢谢!

编辑:我要回答大卫·普拉克的回答:

你做不到。启动应用后,就无法更改LiftRules。

但是,你添加到statelessDispatchTable的东西是PartialFunction [Req,Box [LiftResponse]],所以你可以编写一个看起来像的PartialFunction:

object RestThing1 extends RestHelper { .... }

object RestThing2 extends RestHelper {....}

object MyDynamicRestThing extends PartialFunction[Req, Box[LiftResponse]] {
  def isDefinedAt(in: Req): Boolean = if (testCondition) RestThing1.isDefinedAt(in) else RestThing2.isDefinedAt(in)
  def apply(in: Req): Box[LiftRequest] = if (testCondition) RestThing1.apply(in) else RestThing2.apply(in)
}

LiftRules.statelessDispatchTable.append(MyDynamicRestThing)

1 个答案:

答案 0 :(得分:0)

你可以创建一个二级调度......例如,一个接收请求的对象,然后根据一些其他逻辑代理对真实处理程序的请求。然后你根本不必乱用顶级调度表。

如果您需要做的是基于信号切换它(例如它会在某个时刻恢复),或者是否有其他逻辑可以从适当的抽象中受益,那么这样做真的很有意义吗