2013-12-20 3 views
0

Я разрабатываю приложение в Grails 2.1.3 и должен иметь возможность динамически планировать работу. У меня возникла проблема с методом MyJob.schedule() из версии Quartz Plugin версии 1.0.1.Кварцевый плагин. Нет подписи метода: .schedule() применим для типов аргументов: (Long, Integer, LinkedHashMap)

В настоящее время у меня есть код вызова работы, которая выглядит как:

MyJob.schedule((Long)thing.processInterval,-1,[keyName:thing.value]) 

С классом MyJob выглядит как:

package com.a.b.jobs 
import com.a.b.thing.ThingsService 

class MyJob{ 

    static triggers = {} 

    def ThingsService 

    def execute(context) { 
     def scheduledThing = ThingsService.getInstance(context.mergedJobDataMap.get('keyName')) 
     //Do things 
     scheduledThing.dateProcessed = new Date() 
    } 
} 

Ошибка Я сейчас вижу это:

заводных. lang.MissingMethodException: Нет сигнатуры метода: static com.abjobs.MyJob.schedule() применим для типов аргументов: (java.lang.Long, java.lang.Integer, java.util.LinkedHashMap)

Но в соответствии с http://grails-plugins.github.io/grails-quartz/guide/triggers.html это должен быть приемлемый звонок.

Я следовал указания, даваемые this post импортировать пакет, содержащий класс заданий, но не сам

import com.a.b.jobs.*; 

работы класс против

import com.a.b.jobs.MyJob; 

, но это не решило мою проблему.

Любое руководство будет высоко оценено!

Отредактировано для добавления модульного испытания & & обслуживание.

package com.a.b.thing 

import spock.lang.Specification 
import com.a.b.thing.Thing 

@TestFor(JobStartService) 
@Mock([Thing]) 
@TestMixin(grails.test.mixin.support.GrailsUnitTestMixin) 
class JobStartServiceSpec extends Specification { 
    def "test schedule"() { 
     when: 
      def myThing = new Thing() 
      myThing.processInterval = 1 
      myThing.name = "name" 
      myThing.save(failOnError:true) 
      assert Thing.findAll().size() == 1 
      service.startJobs() 

     then: "the returned Thing has been processed" 
      assert myThing.dateProcessed != null 

    } 
} 


//service 
package com.a.b.thing 

import groovy.time.* 
import com.a.b.jobs.*; 

class JobStartService { 

    def thingsService 

    def startJobs(){ 
     Thing.findAll().each{ 
      if(!it.dateProcessed){ 
       MyJob.schedule(((Long)it.processInterval), -1,[keyName:it.value]) 
      }else { 
       //other stuff 
      } 
     } 
    } 
} 
+1

Где у вас есть класс заданий в проекте? Когда вы получите эту ошибку? – dmahapatro

+0

Он находится в grails-app/jobs/com/a/b/jobs/MyJob.groovy, и я получаю эту ошибку во время модульного тестирования службы с использованием .schedule(). – Blake

+1

Можете ли вы также добавить блок тестирования? – dmahapatro

ответ

0

график метод метакласса магии. Для того, чтобы модульное тестирование планирования динамической работы, проще всего сделать, это сделать свои собственные магии:

given: 
def isScheduled = false 
MyJob.metaClass.static.schedule = { Long repeatInterval, Integer repeatCount, Map params -> 
    isScheduled = true 
} 

...

when: 
service.startJobs() 


then: 
isScheduled 
Смежные вопросы