2012-09-04 84 views
2

我有我的Boot.scala与启动方法在其中我做我的设置。 最后,我调用LiftRules.statelessDispatchTable并追加一个新类的实例,该实例扩展了RestHelper,它具有发球区块。如何重新启动liftweb?

在某些时候,我得到一个信号并需要更改此类,所以我需要再次调用无状态的DispatchTable来删除原来的并添加一个新的。

这样做的好方法是什么?

谢谢!

编辑:我要更新的答案,我从DAVID POLLAK问题:

你不能。一旦您的应用程序启动,就无法更改LiftRules。

但是,你加入statelessDispatchTable东西是PartialFunction [询价,盒[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) 
+0

也许你可以使用'LiftRules.statelessDispatchTable.prepend'来为原来的RestHelper映射一个新的? – Rogach

回答

0

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

如果你需要做的是基于信号切换它(例如它会在某个点恢复),或者如果有额外的逻辑会从适当的方面受益抽象。