2010-10-27 50 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