I am trying to reschedule a job and I have defined my method like so :
private def updateTriggerInterval(context: JobExecutionContext): Unit = {
val randomInterval = rand.nextInt((max - min) + 1) + min
val oldTrigger: Trigger = context.getTrigger
val up: TriggerBuilder[SimpleTrigger] = oldTrigger.getTriggerBuilder.withSchedule[SimpleTrigger](simpleSchedule()
.withIntervalInMinutes(randomInterval).repeatForever())
val scheduler = StdSchedulerFactory.getDefaultScheduler
scheduler.rescheduleJob(oldTrigger.getKey, up.build())
}
This gives me the following error :
Error:(33, 55) type arguments [org.quartz.SimpleTrigger] do not conform to method withSchedule's type parameter bounds [SBT <: ?0] val up = oldTrigger.getTriggerBuilder.withScheduleSimpleTrigger.build()
Now looking at the signature of withSchedule :
public <SBT extends T> TriggerBuilder<SBT> withSchedule(ScheduleBuilder<SBT> schedBuilder)
T is a type parameter on the class of withSchedule which looks like class TriggerBuilder<T extends Trigger>. So T should be defined by the type parameter of the instance returned by getTriggerBuilder, which here should be TriggerBuilder<SimpleTrigger> getTriggerBuilder(), so T is a SimpleTrigger. In the Trigger interface getTriggerBuilder is defined like so : TriggerBuilder<? extends Trigger> getTriggerBuilder().simpleSchedule returns a SimpleScheduleBuilder (which extends ScheduleBuilder<SimpleTrigger>).
What I'm understanding here is that SBT (i.e SimpleTrigger too if we look at the error) should extends a class that extends Trigger. Problem here is we have SimpleTrigger <: SimpleTrigger. Totally not sure I read this right though.
If I do not type withSchedule I end up with the same error, plus this one :
Error:(37, 46) type mismatch; found : org.quartz.SimpleScheduleBuilder required: org.quartz.ScheduleBuilder[SBT] .withIntervalInMinutes(randomInterval).repeatForever)
^
Can somebody help me out here ? For the record the official Quartz example isn't compiling either (same error).
TforTrigger, and what's the result type ofsimpleSchedule(). Looks to me like some ugliness coming from Java's use-site variance. For that in Scala you usually need existential types, likewithSchedule[_ <: SimpleTrigger]. Not sure - 0__