2010-10-27 85 views
0

我正在開發一個足球經理的網站,但我無法弄清楚如何正確使用後臺線程插件和Quartz插件(沒有太多的文檔)。 我的問題是.. 我有一個匹配類的控制器,具有我需要在某個時候開始的功能。 隨着石英我試圖創造一個工作,但然後我不能直接調用函數(如果我有更多的匹配開始,我應該創建多少工作?),或者我不知道如何去做,線程我創建服務類,但是我不知道如何實現它。 有人可以幫助我嗎? 感謝Grails後臺線程,石英

編輯:

解決方案在這篇文章:

grails thread -> hibernateException: No Hibernate session bound to thread

回答

1

有些時候只需要保持tryng :) 石英我這樣做:

class TestJob { 

    MatchController match = new MatchController() 

    static triggers = { 
     /* 
     * firstThread runs every minute from 8 to 9:59 on wednsday 
     */ 
     cron name: 'firstThread', cronExpression: "0 0/1 8-9 ? * WED" 
     cron name: 'secondThread', cronExpression: "0 0/5 8-9 ? * WED" 
     cron name: 'thirdThread', cronExpression: "0 0/10 8-9 ? * WED" 
     cron name: 'forthThread', cronExpression: "0 0/15 8-9 ? * WED" 
    } 

    def group = "MyGroup" 

    def execute() { 
     /* 
     * execute task 
     * call playMatch from match controller 
     */ 
     println "run thread: " 
      + String.format('%tH:%<tM:%<tS.%<tL',System.currentTimeMillis()) 

     match.playMatch() 
    } 
} 

似乎工作。 但仍然奇怪我使用後臺線程

1

後臺線程被設計爲一個簡單的插件,只是顧名思義 - 在後臺線程中運行一些代碼。

它不給你一個後臺線程的句柄(我可以記得),所以它只是一種「設定而忘記」類型的東西。

石英是您想要做的正確選擇。我可能不會讓Job調用控制器。 「打比賽」的邏輯聽起來應該是在服務中。您可以將您的服務注入到Job類中,就像在控制器中一樣。

歡呼

+0

你說得對與服務要好得多,我沒想到這件事,尤其是當你需要調用一個函數不同的控制器。 – Pietro 2010-10-27 09:08:40

+0

服務可能不應該在控制器上調用功能。控制器旨在處理來自傳入http請求的不同操作。如果您的服務「需要」調用控制器操作,則可能需要重新設計該代碼。也許將代碼從控制器中提取出來並轉換成新的服務;那麼控制器和任何其他服務都可以調用它。 – 2010-10-27 10:01:55

+0

現在我正在做的是,例如: 聯賽級別的保存呼叫,一個聯盟服務與一個方法,產生我需要的所有課程。 我在做對吧? – Pietro 2010-10-27 11:02:18