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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Quartz Job Scheduling Framework 
V
    Опции темы
Zamuta
Дата 5.1.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет....

Вопрос для тех кто работал с Quartz Job Scheduling Framework.

Долго не решался спросить об этом. Вроде всё кажется просто, создаём планировщик, запускаем поток и т.д....Но не получается....

1.Какие основные методы необходимо реализовывать у quartz для работы с jsf? и для работы вообще?
2. Где находится спусковой механизм? В методе run или exucute ?
3. Что должен знать человек впервые взявшийся за quartz? Подводные камни, скажем так.

Пытаюсь использовать quartz в качестве бина + jsf.

java.util.timer не предлагать....



Это сообщение отредактировал(а) Zamuta - 5.1.2007, 17:00


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


software saboteur
****


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

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



Цитата(Zamuta @  5.1.2007,  16:52 Найти цитируемый пост)

1.Какие основные методы необходимо реализовывать у quartz для работы с jsf? и для работы вообще?
....
3. Что должен знать человек впервые взявшийся за quartz? Подводные камни, скажем так.


у них в дистрибе идет много демок, посмотри их. И туториал тоже есть. Но лучше все таки демки посмотреть.

Цитата(Zamuta @  5.1.2007,  16:52 Найти цитируемый пост)
2. Где находится спусковой механизм? В методе run или exucute ?


Что за "спусковой механизм"? Чтобы реализовать задачу (Job) нежно имплементривать интерфейс org.quartz.Job который в свою очередь содержит метод execute(JobExecutionContext context) - его реализация будет выполнена. А время и период выполнения задается с помощью триггера.



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

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


Опытный
**


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

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



Как можно проверить работу кварца? Я делаю так. Ошибок нигде нет, но и результата тоже.  smile 


Код


import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;


public class MyJob implements Job {
      
    public void execute(JobExecutionContext context)   throws JobExecutionException {
       int x;
       for(x=0; x<10; x++)
       System.out.println(x);
    }
}


Код


import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;


public class MyTrigger {
    
    
    public void run() throws Exception{
        
        SchedulerFactory sf = new StdSchedulerFactory();
        
        Scheduler sched = sf.getScheduler();       
        
        JobDetail job = new JobDetail("job1", "group1", MyJob.class);
        
        Trigger trigger = TriggerUtils.makeSecondlyTrigger(); 
        
        trigger.setStartTime(TriggerUtils.getEvenSecondDate(new Date()));  
        
        trigger.setName("myTrigger");
        
        
        sched.scheduleJob(job, trigger);
        
        sched.start();
        
       }
    public static void main(String[] args) throws Exception {
        
        MyTrigger trig = new MyTrigger();
        trig.run();
        
    }
}





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


software saboteur
****


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

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



У меня вой код выполнился.  smile  Тут видимо есть такая особенность, что класс  реализующий Job должен быть в отдельном файле. Видимо у них так загрузчик классов работает  smile  И еще, чтобы бесконечно работа не выполнялась, не забывай делать вызов в конце: sched.shutdown(true);


Это сообщение отредактировал(а) powerOn - 6.1.2007, 14:26


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

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


Опытный
**


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

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



Странно. У меня в консоли пусто.....

Решил вывести на страницу вот так:

Код

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {
        
    private String text = "";
    public String getText() {return text;}
    
    public void execute(JobExecutionContext context)   throws JobExecutionException {
        int x;
        for(x=0; x<10; x++)
            System.err.println(x);
        if (x != 0){
        text = "x != 0";
        }else{
          text = "x = 0" ;
        }
       
    }
}



Ну а на странице само собой делаю  у outputtext value=#{MyJob.text} , всё равно никакого результата.

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


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


software saboteur
****


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

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



Цитата(Zamuta @  6.1.2007,  15:42 Найти цитируемый пост)
powerOn, скажи пожалуста, никаких доп. конфигурационных файлов ты не использовал? т.е. просто попробовал выполнить мой код и в консоли получил результат? 

Да все как у тебя, только класс MyJob и класс MyTrigger лежат в разных не пустых пакетах, типа:
aaa.MyJob
bbb.MyTrigger

Никаких конфигурационных файлов я не добавлял. К проекту были подключены следующие библиотеки: 
quartz-all-1.6.0.jar
commons-logging.jar
jta.jar
commons-collections-3.1.jar

эти либы я взял из quartz дистриба. Находятся они в папках quartz/lib/core/ и quartz/lib/build


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

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


Опытный
**


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

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



powerOn,  если я создаю простое J2SE application (не jsf), то у меня всё работает, даже если оба файла лежат в одном пакете, а если создаю jsf и пытаюсь получить в outputtext компоненте значение вот так:

Код

public class MyJob implements Job {
        
    private String text = "";
    public String getText() {return text;}
    
    public void execute(JobExecutionContext context)   throws JobExecutionException {
        int x;
        for(x=0; x<10; x++)
            System.err.println(x);
        if (x != 0){
        text = "x != 0";
        }else{
          text = "x = 0" ;
        }
       
    }
}



тогда получаю пустую страницу и в консоли тоже пусто.... smile  Мне кварц нужен именно для работы совместно с jsf....
Не мог бы ты посмотреть как такое будет работать у тебя?




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


software saboteur
****


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

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



Да, все работает и в связке с JSF. Я, в принципе, вижу только одну причину по которой этого могло не случиться: конфликт библиотек.
Запускал на Tomcat 5.5.17. Библиотеки к проекту добавлял те что указал выше + JSF.
Прикрепляю папки src и web своего проекта.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Archive.tar.gz 2,47 Kb


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

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


Опытный
**


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

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



Сделал как у тебя, клал всё в один пакет и в разные, с разными библиотеками, томкат тоже 5.5.17, и в любом случае получаю:
Код

Start...
07.01.2007 20:14:37 org.quartz.simpl.SimpleThreadPool initialize
INFO: Job execution threads will use class loader of thread: http-8084-Processor25
07.01.2007 20:14:37 org.quartz.core.QuartzScheduler <init>
INFO: Quartz Scheduler v.1.6.0 created.
07.01.2007 20:14:37 org.quartz.simpl.RAMJobStore initialize
INFO: RAMJobStore initialized.
07.01.2007 20:14:37 org.quartz.impl.StdSchedulerFactory instantiate
INFO: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
07.01.2007 20:14:37 org.quartz.impl.StdSchedulerFactory instantiate
INFO: Quartz scheduler version: 1.6.0
07.01.2007 20:14:37 org.quartz.core.QuartzScheduler start
INFO: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
07.01.2007 20:14:38 org.quartz.core.ErrorLogger schedulerError
SEVERE: An error occured instantiating job to be executed. job= 'group1.job1'
org.quartz.SchedulerException: Problem instantiating class 'job.MyJob' [See nested exception: java.lang.IllegalAccessException: Class org.quartz.simpl.SimpleJobFactory can not access a member of class job.MyJob with modifiers ""]
        at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:57)
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:132)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:358)
Caused by: java.lang.IllegalAccessException: Class org.quartz.simpl.SimpleJobFactory can not access a member of class job.MyJob with modifiers ""
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
        at java.lang.Class.newInstance0(Class.java:344)
        at java.lang.Class.newInstance(Class.java:303)
        at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:55)
        ... 2 more
07.01.2007 20:14:38 org.quartz.simpl.RAMJobStore triggeredJobComplete
INFO: All triggers of Job group1.job1 set to ERROR state.
07.01.2007 20:14:42 org.quartz.core.QuartzScheduler shutdown
INFO: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
07.01.2007 20:14:42 org.quartz.core.QuartzScheduler standby
INFO: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
07.01.2007 20:14:42 org.quartz.core.QuartzScheduler shutdown
INFO: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.



О каком модификаторе он говорит? в managed-beans.xml всё прописано как надо....


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


software saboteur
****


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

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



У тебя класс MyJob в отдельном .java файле? Модификатор public и конструктор без параметров имеется?

Код падает у тебя на создании объекта через reflection. Вот что в методе newJob происходит:
Код

public Job newJob(TriggerFiredBundle bundle) throws SchedulerException {
        JobDetail jobDetail = bundle.getJobDetail();
        Class jobClass = jobDetail.getJobClass();
        try {
            if(log.isDebugEnabled()) {
                log.debug(
                    "Producing instance of Job '" + jobDetail.getFullName() + 
                    "', class=" + jobClass.getName());
            }
            
            return (Job) jobClass.newInstance();
        } catch (Exception e) {
            SchedulerException se = new SchedulerException(
                    "Problem instantiating class '"
                            + jobDetail.getJobClass().getName() + "'", e);
            throw se;
        }
    }


Вот эту строку, к примеру,  можно выполнить только при наличии конструктора без параметров:
Код

 jobClass.newInstance();






Это сообщение отредактировал(а) powerOn - 7.1.2007, 18:44


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

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


Опытный
**


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

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



Ну чтож, powerOn, могу лишь сказать спасибо, но хочется немного разъяснений. Когда я убрал пустые конструкторы в обеих классах, которые находятся в разных файлах, всё заработало... (public MyJob() {}, public TestBean() {}). Но в литературе пишут, что если нет необходимости создавать конструкторы с некоторыми параметрами, то можно их вообще не создавать, компилятор создаст их сам, но в твоих файлах они были и я решил их оставить. Но если конструкторы и так без параметров, то почему же заработало только при их полном отсутствии, а просто с пустыми конструкторами не работает?


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


software saboteur
****


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

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



Цитата(Zamuta @  7.1.2007,  19:01 Найти цитируемый пост)
Но если конструкторы и так без параметров, то почему же заработало только при их полном отсутствии, а просто с пустыми конструкторами не работает? 

Мистика какая-то... у меня работает с моими пустыми конструкторами... Кстати,  без них тоже.  smile 



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

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


Опытный
**


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

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



Пытаюсь проверить выполняются ли булевские значения внутри execute(){}, а именно, по нажатию кнопки запускаю MyTrigger а в классе MyJob  проверяю булевское значение и если оно верно, то на странице вывожу текст, но в outtext компоненте пусто, в чём может быть дело?

Код

public class MyJob implements Job {
    
    public boolean flag;
    private HtmlForm testForm = new HtmlForm();
    public HtmlForm getTestForm()      {return testForm;}
    public void setTestForm(HtmlForm value)    {testForm = value;}
    
    private String name = "";
    public String getName() {return name;}    
        
    public void execute(JobExecutionContext context)   throws JobExecutionException {
        boolean flag = true;
        String name = "vnutri execute";
          }
     public boolean a(){
        if (flag = true){
            name = "sdelat";
        } return flag;
    }
    
}


В моём приложении quartz должен работать именно так (переключать булевское значение в true и по нему запускать остальной код).


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


software saboteur
****


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

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



Цитата(Zamuta @  8.1.2007,  18:59 Найти цитируемый пост)
проверяю булевское значение и если оно верно, то на странице вывожу текст, но в outtext компоненте пусто, в чём может быть дело?


На первый взгляд, непонятно, каким образом данные должны попасть в компонент? Где эта связь?
Я вот вижу методы:
Цитата(Zamuta @  8.1.2007,  18:59 Найти цитируемый пост)
    private HtmlForm testForm = new HtmlForm();
    public HtmlForm getTestForm()      {return testForm;}
    public void setTestForm(HtmlForm value)    {testForm = value;}

А кто их вызывает? 



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

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


Опытный
**


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

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



powerOn, из jsp страницы у outputtext я ссылаюсь на #{MyJob.name} 

Код

<h:outputText binding="#{Page1.outputText1}" id="outputText1"  style="color: black; height: 24px; left: 216px; top: 264px; position: absolute; width: 168px" value="#{MyJob.name}"/>


Обычно так всегда делаю.... smile 


--------------------
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.1253 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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