2010-10-27 3 views
0

Je suis en train de développer un site de gestion de football, mais je n'arrive pas à comprendre comment utiliser correctement le plugin de fond et le plugin Quartz (il n'y a pas beaucoup de docs). Mon problème est .. J'ai une classe Controller of a Match, avec une fonction que j'ai besoin de démarrer à un moment donné. Avec le quartz j'ai essayé de créer un travail mais je ne peux pas appeler directement la fonction (et combien de travail devrais-je créer si j'ai plus de correspondance pour commencer?) Ou je ne sais pas comment le faire, et avec thread je crée la classe de service, mais je ne sais pas comment l'implémenter. Quelqu'un peut m'aider avec ça? MerciGrails background-thread, Quart

EDIT:

Solution dans ce post:

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

Répondre

1

Quelques fois juste besoin de garder tryng :) Avec le quartz, je aime ceci:

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() 
    } 
} 

Semble fonctionner. Mais je me demande toujours comment utiliser le thread d'arrière-plan

1

Le thread d'arrière-plan a été conçu comme un simple plugin à faire comme son nom l'indique - exécuter du code dans un thread d'arrière-plan.

Il ne vous donne pas une idée du fil d'arrière-plan (que je peux me rappeler), donc c'est juste un type de chose 'mettre et oublier'.

Quartz est le bon choix pour ce que vous voulez faire. Je n'aurais probablement pas besoin d'appeler le contrôleur. La logique de «jouer un match» semble être ce qu'elle devrait être dans un service. Vous pouvez injecter vos services dans les classes Job de la même manière que dans les contrôleurs.

acclamations

Lee

+0

vous avez raison avec le service est beaucoup mieux, je ne pensais pas, surtout quand vous avez besoin d'appeler une fonction dans différents contrôleurs. – Pietro

+0

Le service ne devrait probablement pas appeler des fonctions sur le contrôleur. Les contrôleurs sont destinés à gérer différentes actions des demandes http entrantes. Si votre service "a besoin" d'appeler une action du contrôleur, vous voudrez peut-être envisager de reconcevoir ce code. Peut-être retirer le code du contrôleur et dans un nouveau service; alors le contrôleur et tous les autres services peuvent l'appeler. –

+0

maintenant ce que je fais est par exemple: Appel de classe de la classe sur enregistrer, un service LeagueService avec une méthode qui génère tous les leauges dont j'ai besoin. Est-ce que je le fais bien? – Pietro