2013-11-01 1 views
7

Ich versuche mit akka-quartz-scheduler in regelmäßigen Abständen ein Bereinigungsereignis auszulösen. Ich bekomme den Scheduler, um die Nachricht an den Akteur zu senden, aber nur, wenn dem Zeitplan kein Kalender zugeordnet ist. Immer wenn ich einen Kalender an einen Zeitplan anschließe, erhält der Schauspieler niemals Nachrichten.Akka-Quartz-Scheduler löst nie meinen Akteur aus

Dies ist der Abschnitt application.conf, der für akka-quartz-scheduler relevant ist. Wenn ich die Linie

Kalender = [ "Minimal"]“

aus der Config, meine Schauspieler ausgelöst entfernen. Wenn ich die Linie in, verlassen wird kein Schauspieler genannt.

akka { 
    quartz { 
     defaultTimezone = "Europe/Oslo" 
     schedules { 
      NowAndThen { 
       description ="Delete temp files now and then, eg every hour" 
       expression = "*/10 * * * * ?" 
       calendars = ["Minimal"] 
      } 
     } 
     calendars { 

      Minimal { 
       type = Daily 
       exclude { 
        startTime = "15:00" 
        endTime = "15:01" 
       } 
      } 

     } 
    } 
} 

I am Initialisieren der Erweiterung von einer playframework Anwendung, in Global.java:

import akka.actor.ActorRef; 
import akka.actor.ActorSystem; 
import akka.actor.Extension; 
import akka.actor.Props; 
import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension; 
import play.Application; 
import play.GlobalSettings; 
import play.Logger; 
import play.libs.Akka; 
import uttrekk.CleanupRunner; 

public class Global extends GlobalSettings { 

    public void onStart(Application app) { 
    AkkaStartUp.startup(app); 
    } 

    static class AkkaStartUp { 

    public static void startup(Application app) { 
     // Starter autoamtiske avelveringer norges eiendommer 
     ActorSystem system = Akka.system(); 

     ActorRef cleanupRef =system.actorOf(new Props(CleanupRunner.class)); 

    QuartzSchedulerExtension scheduler = (QuartzSchedulerExtension) QuartzSchedulerExtension.get(system); 
    scheduler.schedule("NowAndThen",cleanupRef,"Clean"); 

    } 
    } 
} 

der Schauspieler Implementierung in etwa wie folgt aussieht:

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem. – Frane

Antwort

2

Das Problem tritt während der Kalenderinitialisierung auf. prüfen Linie 245 in QuartzSchedulerExtension Klasse: scheduler.addCalendar (name.toUpperCase, Kalender, true, true)

Der Kalender hinzugefügt wird Uppercase verwenden, so Quarz findet es nie, produziert, dass kein Job dann ausgelöst wird. Wenn Sie Ihren Kalender in akka config mit UpperCase-Namen definieren, sollte es funktionieren.

+0

Niemals die Notwendigkeit für die Oberschale verstanden, aber so ist es. Entschuldigung für die lange Verzögerung der Annahme der Antwort :) –