Wicket: Wie man lange laufende Aufgaben erledigt

Ich habe eine Wicket + Hibernate + Spring-Webanwendung eingerichtet, in der einige Daten gesammelt (einige Dateien generiert und zurückgegeben), in einer Datenbank gespeichert, einige Bilder erstellt und alles auf einer Webseite angezeigt werden.

Dies alles funktioniert gut für kurze Läufe, aber manchmal dauert das Sammeln der Daten (was einige Zahlen aus der Ferne erfordert) zu lange (mehr als 20 Minuten) und es kommt zu einer Zeitüberschreitung. Ich habe versucht, dies mit zwei Ansätzen zu lösen, aber beide weisen einige Probleme auf.

Der erste Ansatz war mitAjaxLazyLoadPanels und mache einfach alles innerhalb der getLazyLoadComponent. Dies funktionierte gut für die kurzen Läufe, aber für die Läufe von mehr als 20 Minuten wurden die LazyLoadComponents aufgrund von Zeitüberschreitungen nicht geladen (schönes Oxymoron dort).

Der zweite Ansatz umfasste die Erstellung eines Zwischenfragments mit einem hinzugefügtenAjaxSelfUpdatingTimerBehavior mit einer auf 10 Sekunden festgelegten Dauer, die nach den Dateien abfragt, die bei der Zahlenberechnung erstellt wurden. Dies scheint zu bewirken, dass die Tasks problemlos im Hintergrund ausgeführt werden, schlägt jedoch fehl, wenn die zurückgegebenen Daten in der Datenbank gespeichert werden müssen. Ich verwende das Open Session in View-Muster, aber möglicherweise schlägt dies fehl, wenn nach 20 Minuten versucht wird, Daten zu speichern? (Die Lösung könnte in der Lösung dieses Problems liegen.)

Aufgrund der oben genannten Probleme lese ich jetzt alternative Ansätze zur Bewältigung dieser langwierigen Aufgaben und bin auf Folgendes gestoßen:

org.apache.wicket.util.time.Taskorg.apache.wicket.util.watch.ModificationWatcher

Ich frage mich jetzt, ob eine dieser beiden Methoden besser geeignet ist, um die Timeout-Probleme zu lösen, die ich beim Ausführen der Aufgaben und beim anschließenden Speichern der Daten in der Datenbank habe, oder ob jemand andere Lösungen hat, die diesbezüglich hilfreich sein könnten Lage.

Ich würde wirklich gerne wissen, ob ein neuer Ansatz durchführbar ist, bevor ich einen weiteren Tag damit verbringe, etwas zu implementieren, das sich schließlich als nicht funktionierend herausstellt.

Freundliche Grüße,
Tim

Antworten auf die Frage(1)

Ihre Antwort auf die Frage