org.quartz trigger

thommy.s

Aktives Mitglied
Hallo liebe Leute,

ich bin nicht ganz sicher, ob ich in dieser Forumecke richtig bin... Falls nicht, sorrry, aber ich werde meine Frage trotzdem mal hier stellen.

Ich versuche mich an der Zeitgeber-API 'org.quartz'.

Ich habe also einen Scheduler erstellt, der soweit erst einmal arbeitet.

Dazu noch ein paar Worte zum Umfeld. Der Timer soll eine bestimmte Methode ausführen, die sich Daten von einem entfernten WebService holt. Funktioniert auch, nun ist es aber so, dass ich gern in Abhängigkeit vom Erfolg der Methode (Daten sind im client da oder eben nicht) gern das Intervall des Ausführens der 'Datenholmethode' verändern würde. Mit anderen Worten; sind die Daten im Clienten vorhanden, braucht sie nur alle paar Stunden mal abzuholen, ging aber etwas schief, so soll sie alle 10 sec einen neuen Versuch starten.

Das Ganze läuft in einem App Server, bei dessen Hcohfahren die Daten nicht vorhanden sind, also zunächst geholt werden müssen.

Hier der Code des Timers:

Java:
SchedulerFactory schedFact = new StdSchedulerFactory();

Scheduler sched;

try {

         sched = schedFact.getScheduler();

         sched.start();

         JobDetail job1 = newJob(myClass.class)
         .withIdentity("myJob" , "group1")
         .build

         simpleSchedule();

         Trigger trigger_null = newTrigger()
         .withIdentity("myTrigger","group1")
         .startNow();
         .withSchedule(simpleSchedule()
         .withIntervalInSeconds(20)
         .repeatForever())
         .build();

         sched.scheduleJob(job1, trigger_null)

        } catch (SchedulerException e) {

           e.printStacktrace();

        }

Die auszuführende Klasse würde ich mir an dieser Stelle sparen, da sie IMHO hier nicht erheblich ist, außerdem korrekt ausgeführt wird.

Ich habe das Gefühl, dass ich "von außen" nichts mehr machen kann, das Teil läuft also stur vor sich hin, bei ' sched.scheduleJob(job1, trigger_null)' scheint keine Möglichkeit mehr zu sein, darauf noch Einfluss zu nehmen.

Ich hatte also einen zweiten Trigger mit dem anderen Zeitintervall geschrieben, mit dem ich gern den aktiven ersetzen würde. Krieg's aber nicht hin, reagiert auf nichts.

Was mach ich hier falsch? Gibt's ne Möglichkeit, den Trigger dynamisch zu ersetzen? Laut JavaDoc müsste es eigentlich gehen, aber bin wohl zu dämlich.

Bitte um Augenöffnen.

VG Thomas
 

freez

Top Contributor
Ich habe nur am Rande von Quartz gehört, aber hätte trotzdem 2 Ideen:
1. Du könntest deiner Klasse den Trigger übergeben (setTrigger(Trigger)). Die Frage ist nur, kommst du an deine Klasse ran?
2. Alternativ könntest du prüfen, ob du mit
Java:
schedFact.getScheduler()
in deiner Klasse an den gleichen Scheduler kommst (wenn der Scheduler als Singleton implementiert ist), und dir über den Scheduler somit den Trigger holen kannst.
 

JimK

Bekanntes Mitglied
Hi thommy,

ich glaube, wenn du den selben Trigger nimmst, dass updatet er diesen. Ansonsten könntest du doch den Scheduler beenden, den Trigger neu bauen und den Scheduler wieder starten.
 

Ähnliche Java Themen

Neue Themen


Oben