Ich bin nicht ganz sicher, ob das eher ein Openbravo-Problem oder mehr ein Quartz-Problem ist, aber wir haben einige manuelle Prozesse, die über Openbravo ProcessRequest
objects (OB v2.50MP24) in Zeitplänen laufen, aber es scheint so dass die Prozesse zur gleichen Zeit zweimal ausgeführt werden. Openbravo erweitert die Quartz-Plattform für ihre Planung. Ich habe versucht, dieses Problem selbst zu lösen, indem ich sicherstelle, dass meine Prozessklassen diese Klasse erweitern:
Das hat beim Test gut funktioniert, indem ich aufgefordert habe, den Prozess sofort zweimal zur gleichen Zeit auszuführen. Einer von ihnen abgebrochen. Es funktioniert jedoch nicht an den geplanten Prozessen. Ich habe S.o.p eingerichtet, um zu protokollieren, wenn die Prozesse starten, und wenn ich auf die Protokolle schaue, wird jede Zeile der Ausgabe zweimal angezeigt, jede Zeile eine direkt nach der anderen.
Ich habe den Verdacht, dass es daran liegt, dass die Prozesse entweder in zwei völlig verschiedenen Threads laufen, die nicht über die Prozesse der anderen wissen, aber ich bin mir nicht sicher, wie ich meinen Verdacht überprüfen kann oder ob ich Recht habe Was soll ich dagegen tun? Ich habe bereits überprüft, dass nur eine Instanz jedes ProcessRequest
-Objekts in der Datenbank gespeichert ist.
Hat jemand anderes das erfahren, wissen Sie, warum es zweimal läuft, oder wissen Sie, was ich tun kann, um zu verhindern, dass sie gleichzeitig ausgeführt werden?
Die häufigsten Gründe für eine doppelte Jobausführung sind folgende:
EDITED:
- Ihre Anwendung wird in einer Clusterumgebung bereitgestellt und Sie haben Quartz nicht für die Ausführung in einer Clusterumgebung konfiguriert.
- Ihre Anwendung wird mehrmals bereitgestellt. Es gibt viele Fälle, in denen die Anwendung speziell auf dem Tomcat-Server zweimal bereitgestellt wird. Als Konsequenz wird der QuartzInitializerListener zweimal aufgerufen und die Jobs werden zweimal ausgeführt. Wenn Sie den Tomcat-Server verwenden und Kontexte explizit in server.xml definieren, sollten Sie die automatische Anwendungsbereitstellung deaktivieren oder deployIgnore angeben. Sowohl die Einstellung von autoDeploy auf "true" als auch die Existenz des Kontextelements in "server.xml" haben zur Folge, dass die Anwendung zweimal bereitgestellt wird. Setzen Sie autoDeploy auf false oder entfernen Sie das context-Element von der Datei server.xml.
- Ihre Anwendung wurde erneut verteilt, ohne die aktuellen Prozesse zu verschieben.
Ich hoffe, das hilft dir.
Quartz verwendet einen Threadpool für die Jobausführung. So, wie Sie vermuten, wird die RBDDalProcess
wahrscheinlich separate Instanzen in einem separaten Thread haben und die Gegenprüfung wird fehlschlagen.
Sie können die im Scheduler registrierten Jobs auflisten (Sie können den Scheduler mit der OB-API als: OBScheduler.getScheduler()
abrufen):
Wenn Sie sehen, dass der Job zweimal hinzugefügt wurde, lesen Sie org.quartz. spi.JobFactory und der org.quartz.Scheduler.setJobFactory Methode zum Steuern von Job-Instanziierungen.
Stellen Sie außerdem sicher, dass Sie nur einen Eintrag für diesen Prozess in der Tabelle "Report and Process" in Openbravo haben.
Ich habe in Openbravo 3.0 DalBaseProcess
verwendet und kann dieses Verhalten, das Sie beschreiben, nicht bestätigen. In Anbetracht dessen wäre es wahrscheinlich eine gute Idee, die gemeldeten Fehler für Openbravov2.50MP24 und Quartz auszuprobieren oder einen Thread in Openbravo Forge zu posten Foren mit Ihrem Problem.
Tags und Links java quartz-scheduler openbravo