JSF 2 + Кварцевая библиотека расписаний - PullRequest
2 голосов
/ 27 октября 2011

У меня есть веб-приложение, использующее JSF 2. В этом приложении я использую библиотеку диаграмм, которая получает данные из файла XML, приложение обновляет файл XML, когда кто-то обращается к сайту, из-за действия jsf 2. Теперь я хочу реализовать библиотеку Quartz и библиотеку планирования с открытым исходным кодом, чтобы обновить файл XML и не полагаться на действие пользователя, но я не знаю, как вызвать Action из Quartz с использованием JSF 2.

Заранее спасибо, ребята.

Ответы [ 2 ]

7 голосов
/ 27 октября 2011

Вообще говоря, вам следует реализовать запланированную логику, определить, когда она будет выполняться, и инициализировать запланированные задания при запуске сервера приложений.

Реализация запланированной логики

Ваш запланированный класс должен реализовать интерфейс org.quartz.Job и переопределить его execute () , который содержит логику запланированного задания. В вашем случае это метод обновления файла XML. Вы должны сделать так, чтобы этот метод не имел никаких зависимостей от JSF, так что его можно вызывать вне JSF.

public class MyScheduledJob implements Job {

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

Инициализация и запуск кварца

Quartz предоставляет ServletContextListener с именем QuartzInitializerListener , который позволяет инициализировать и запускать Quartz при запуске сервера приложений.

Добавьте этот слушатель к вашему web.xml

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

По умолчанию он ищет файл с именем quartz.properties в пути к классам для инициализации Quartz. Вы можете обратиться this для получения дополнительной информации о настраиваемых параметрах, доступных в quartz.properties

Определите, какое задание будет выполняться в какое время

Вы можете определить его в XML-файле (определение его схемы можно найти здесь ) и настроить XMLSchedulingDataProcessorPlugin в quartz.properties для загрузки этого XML при инициализации Quartz.

Например, в 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

Затем в 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>

Все вышеизложенное относится к Quartz 'последней версии 2.1. Вы можете проверить примеры кодов и учебники от Quartz для получения дополнительной информации.

0 голосов
/ 28 октября 2011

Если вы действительно хотите вызвать действие JSF из запланированного задания, метод execute () задания должен будет включать код, который отправляет HTTP-запрос к действию JSF. Вы, вероятно, захотите использовать библиотеку кода, такую ​​как Apache HttpClient или HTTP Unit, если класс Java URLConnection не совсем соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...