2010-10-27 2 views
0

Я разрабатываю сайт футбольного менеджера, но я не могу понять, как правильно использовать плагин background-thread и плагин Quartz (там не много документов). Моя проблема в том, что ... У меня есть контроллер класса соответствия, с функцией, которую мне нужно начинать через некоторое время. С кварцем я попытался создать задание, но тогда я не могу напрямую вызвать функцию (и сколько работы я должен создать, если у меня больше времени для начала?), Или я не знаю, как это сделать, thread Я создаю класс службы, но потом я понятия не имею, как его реализовать. Кто-нибудь может мне помочь? БлагодаряGrails background-thread, Quartz

EDIT:

Решение в этом посте:

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, так же, как вы можете в контроллерах.

веселит

Lee

+0

вы правы с обслуживанием гораздо лучше, я не думаю об этом, особенно когда вам нужно вызвать функцию в разных контроллерах. – Pietro

+0

Служба, вероятно, не должна вызывать функции на контроллере. Контроллеры предназначены для обработки различных действий от входящих HTTP-запросов. Если ваша служба «нуждается» для вызова действия контроллера, вам может потребоваться пересмотреть этот код. Возможно, вытащите код из контроллера и в новый сервис; то и контроллер, и любые другие службы могут его вызвать. –

+0

теперь то, что я делаю, например: Вызов класса Лиги для сохранения, LeagueService с методом, который генерирует все необходимые мне листы. Я делаю это правильно? – Pietro

Смежные вопросы