2012-09-04 82 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

您可以創建一個第二級調度例如,接收請求的對象,然後根據其他邏輯代理請求到真實處理程序。那麼你根本就不必亂用頂級調度表。

如果你需要做的是基於信號切換它(例如它會在某個點恢復),或者如果有額外的邏輯會從適當的方面受益抽象。