2 Stimmen

JSF 2 + Quartz Scheduling-Bibliothek

Ich habe eine Webanwendung, die JSF 2 verwendet. In dieser Anwendung verwende ich eine Diagrammbibliothek, die Daten aus einer Xml-Datei erhält, die Anwendung aktualisiert die Xml-Datei, wenn jemand auf die Website zugreift, weil der JSF 2 Aktion. Jetzt möchte ich die Quartz-Bibliothek die Open-Source-Scheduling-Bibliothek zu implementieren, um die Xml-Datei zu aktualisieren und nicht auf die Benutzer Aktion verlassen, aber ich habe keine Ahnung, wie eine Aktion von Quartz mit JSF 2 aufrufen.

Vielen Dank im Voraus, Leute.

8voto

Ken Chan Punkte 75086

Im Allgemeinen sollten Sie Ihre geplante Logik implementieren, festlegen, wann sie ausgeführt werden soll, und Ihre geplanten Aufträge initialisieren, wenn der Anwendungsserver startet.

Implementierung der geplanten Logik

Ihre geplante Klasse sollte Folgendes implementieren org.quartz.Job Schnittstelle und überschreiben Sie deren ausführen() die die Logik Ihres geplanten Auftrags enthält. In Ihrem Fall ist es die Methode zur Aktualisierung der XML-Datei. Sie sollten dafür sorgen, dass diese Methode keine Abhängigkeiten von JSF hat, damit sie außerhalb von JSF aufgerufen werden kann.

public class MyScheduledJob implements Job {

   public void execute(JobExecutionContext context) throws JobExecutionException {
          updateXML();
   }
}

Quartz initialisieren und starten

Quarz bietet eine ServletContextListener genannt. QuartzInitializerListener die es Ihnen ermöglicht, Quartz beim Start des Anwendungsservers zu initialisieren und zu starten.

Fügen Sie diesen Listener zu Ihrem web.xml

<listener>
     <listener-class> org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>

Standardmäßig sucht es nach einer Datei namens quartz.properties im Klassenpfad, um Quartz zu initialisieren. Sie können auf este für weitere Informationen über konfigurierbare Optionen, die in quartz.properties

Definieren Sie, welcher Job zu welcher Zeit ausgeführt wird

Sie können es in einer XML-Datei definieren (Die Schemadefinition finden Sie unter ici ) und konfigurieren XMLSchedulingDataProcessorPlugin in quartz.properties um diese XML zu laden, wenn Quartz initialisiert wird.

Zum Beispiel, in der quartz.properties

org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true

Dann im quartz-config.xml

<?xml version="1.0" encoding="UTF-8"?>

    <job-scheduling-data
        xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
        version="1.8">

        <schedule>
            <job>
                <name>MyScheduledJob</name>
                <group>MyScheduledGroup</group>
                <description>Job to update XML </description>
                <job-class>com.xxxx.xxxx.xxxx.MyScheduledJob </job-class>
            </job>

            <trigger>
                    <cron>
                            <name>midNightTrigger</name>
                            <job-name>MyScheduledJob</job-name>
                            <job-group>MyScheduledGroup</job-group>
                            <!-- It will run every night at 3:30 am -->
                            <cron-expression>0 30 3 * * ?</cron-expression>  
                    </cron>
              </trigger>
        </schedule>
    </job-scheduling-data>

Alle oben genannten Informationen beziehen sich auf die neueste Version 2.1 von Quartz. Sie können sich die Beispielcodes et Tutorials von Quartz für weitere Informationen.

0voto

jhouse Punkte 2656

Wenn Sie eine JSF-Aktion aus einem geplanten Job heraus aufrufen wollen, muss die execute()-Methode des Jobs Code enthalten, der eine HTTP-Anfrage an die JSF-Aktion stellt. Sie werden wahrscheinlich eine Code-Bibliothek wie Apache HttpClient oder HTTP Unit verwenden wollen, wenn die URLConnection-Klasse von Java Ihren Anforderungen nicht gerecht wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X