Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Quartz, Запуск тригера при старте приложения 
:(
    Опции темы
cosmonaft
Дата 28.2.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Привет. Только начал разбираться с quartz.
Есть такая задача: при старте приложения, достать различные настройки тригера из БД (время запуска, количество запусков, дни и т.д.), создать этот тригер, который в нужное время запустит job. И второе, есть веб-интерфейс, в котором эти настройки тригера можно менять. Подскажите пожалуйста, примерно, как это реализовать. Долго думал, пока ничего путного не придумал. 
PM MAIL   Вверх
powerOn
Дата 28.2.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



А в чем собственно проблема? В каком моменте у возникли сложности? Весь порядок действий вы описали, остаётся только реализовать...


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
cosmonaft
Дата 28.2.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Есть несколько вопросов, которые хотелось бы прояснить.
Т.е. в web.xml прописать сервлет, который стартует вместе с приложением? А там в методе init() и создавать тригер? А что потом будет с этим сервелтом, отработал и висит себе дальше в памяти? 
А нормально ли, если действия по созданию тригера перенести в уже существующий сервлет quartz'a QuartzInitializerServlet?
PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft

Цитата

Т.е. в web.xml прописать сервлет, который стартует вместе с приложением? А там в методе init() и создавать тригер? А что потом будет с этим сервелтом, отработал и висит себе дальше в памяти? 

Не надо в методе init создавать триггер, триггер(ы) создаёшь в отдельном классе, в бд только хранятся настройки. При запуске приложения настройки будут извлекаться из бд (время след. запуска, результат пред. выполнения и т.д.) и выполняться, при остановке выгружаться.
Код

<servlet>
        <description>QuartzInitializerServlet</description>
        <servlet-name>QuartzInitializerServlet</servlet-name>
        <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
        <init-param>
            <param-name>config-file</param-name>
            <param-value>/quartz/quartz.properties</param-value>
        </init-param>
        <init-param>
            <param-name>shutdown-on-unload</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>start-scheduler-on-load</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>


Цитата

А нормально ли, если действия по созданию тригера перенести в уже существующий сервлет quartz'a QuartzInitializerServlet?

Странный у вас способ написния кода. Короче, он не для того писался. 

Сообщай о результатах.





--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
cosmonaft
Дата 29.2.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Zamuta, я все-таки не понял. Код, что ты привел у меня прописан. Он, как я понимаю, для запуска самого планировщика. 
Цитата

Не надо в методе init создавать триггер, триггер(ы) создаёшь в отдельном классе

Так я сделал такой класс. И где тогда при запуске приложения обратиться к объекту этого класса?
Цитата

При запуске приложения настройки будут извлекаться из бд (время след. запуска, результат пред. выполнения и т.д.) и выполняться, при остановке выгружаться

Опять же, я как раз и хочу узнать, где мне извлевкать эти настройки

PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft, например
Код

public class MainCronTrigger {

    public MainCronTrigger() {        
    }

    public void run() throws Exception {       
  
        SchedulerFactory sf = new StdSchedulerFactory("/quartz/quartz.properties");
        Scheduler sched = sf.getScheduler();       
        JobDetail job = new JobDetail("job_name", "group_name", Job_name.class);
        CronTrigger trigger = new CronTrigger("trigger_name", "group_name", "job_name", "group_name", "1 * * * * ?");
        sched.addJob(job, true);
        Date ft = sched.scheduleJob(trigger);

        sched.start();
    }

    public void stopTrigger() {
        try {
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler sched = sf.getScheduler();
            sched.shutdown();
        } catch (SchedulerException ex) {
            ex.printStackTrace();
        }
    }
}


Метод run() сохранит настройки в бд и запустит триггер. В след. раз нет необходимости запускать метод run(), т.к. настройки уже будут лежать в бд.

Цитата

Опять же, я как раз и хочу узнать, где мне извлевкать эти настройки


В коде это объекты JobDetail и CronTrigger. Для того чтобы кварц мог хранить настройки в бд сначала необходимо создать для этого таблицы, с которыми он будет работать и описать параметры соединения с бд в quartz.properties. Структуру таблиц для вашей бд можно найти в самом пакете quartz. quartz-1.6.0.zip\docs\dbTables .
Это моё решение, применимо для моей ситуации. Вы можете сделать по другому исходя из ваших запросов, например почитав  Quartz Job Scheduling Framework: Building Open Source Enterprise Applications


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
cosmonaft
Дата 29.2.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Zamuta,  проблема в том, что нету специальных таблиц для кварца и нету JobStores. Есть таблицы, которые уже давно существуют и менять их, наверное, не будут.
PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft, а как ты тогда собираешься хранить настройки в бд, если у тебя нет к ней доступа? Значит храни в файле или в памяти. Можешь посмотреть в примерах, которые идут в пакете с кварцем.


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
cosmonaft
Дата 29.2.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Да не том смысле, что совсем нету доступа к базе  smile Доступ есть, но там уже есть свои специфические таблицы с настройками для тригеров, а ты имелл ввиду таблицы, которые создаются специально для работы с кварц.
PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft, т.е. таблицы для триггеров есть, а для кварца нет? Это как?


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
cosmonaft
Дата 29.2.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Таблицы не для самих тригеров, а настройки различные по количеству запусков, дням запуска и т.д. Просто раньше предполагалось делать приложение без использования квраца, поэтому и остались поля в таблице для этого дела.
 
Zamuta, я дико извиняюсь за свою непонятливость, но как класс MainCronTrigger, что ты привел создаст свой экземпляр и запустит метод run() при старте эппликейшена.
PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft, никак. Метод, run() ты можешь запустить вручную, но после этого твои настройки сохранятся в бд и при следующих запусках кварц будет смотреть в бд и решать что выполнять и когда. Твоя задача только указать инициализировать все триггеры со всеми настройками.


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
cosmonaft
Дата 29.2.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.1.2008

Репутация: нет
Всего: нет



Ага, стало несколько прояснятся. 
Т.е. если я сразу в бд запихну все необходимые данные, то надобность в запуске того метода run() из MainCronTrigger отпадает вовсе (да и необходимость самого класса)? Я правильно понял?
Тогда, похоже, все же придется настраивать JobStore и коннект с базой...


PM MAIL   Вверх
Zamuta
Дата 29.2.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



cosmonaft, да всё правильно.


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0999 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.