Как динамически добавить Quartz Job в JBoss6

1

Я использую JBoss6 и хочу динамически создавать Quartz-Jobs. Во время обработки задания будет определено следующее время начала (например, через 1, 5 или 10 часов).

Я не нашел для этого никаких решений, даже получить доступ к org.quartz.Scheduler (см. инъекция QuartzScheduler в JBoss AS 6).

Следующая проблема заключается в создании новых рабочих заданий, я следовал учебнику http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson02.html:

import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;

// define the job and tie it to our HelloJob class
  JobDetail job = newJob(HelloJob.class)
      .withIdentity("myJob", "group1") // name "myJob", group "group1"
      .build();

  // Trigger the job to run now, and then every 40 seconds
  Trigger trigger = newTrigger()
      .withIdentity("myTrigger", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
          .withIntervalInSeconds(40)
          .repeatForever())            
      .build();

  // Tell quartz to schedule the job using our trigger
  sched.scheduleJob(job, trigger);

Но похоже, что org.quartz.JobBuilder недоступен для JBoss6. Если у меня вручную добавить зависимость от кварца, у вас есть ошибки при запуске (проблемы с загрузкой классов). Эти артефакты определены (без явного использования кварца):

<dependency>
    <groupId>org.jboss.jbossas</groupId>
    <artifactId>jboss-as-client</artifactId>
    <version>6.0.0.Final</version>
    <type>pom</type>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.jboss.security</groupId>
            <artifactId>jbosssx-client</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.security</groupId>
            <artifactId>jbosssx</artifactId>
        </exclusion> 
    </exclusions>
</dependency>
    <dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-6.0</artifactId>
    <version>1.0.0.Final</version>
    <type>pom</type>
    <scope>provided</scope>
</dependency>
Теги:
quartz-scheduler
jboss
jboss6.x

2 ответа

1

Кажется, вы следуете руководству Quartz 2.0.x. Вы пробовали Quartz 1.x tutorial?

Версия, представленная JBoss 6, - Quartz 1.8.3, и есть значительные изменения API Quartz 2.x.

1

В JBoss 6 вы можете попасть в планировщик кварца, используя класс factory, предоставленный в библиотеке кварца. Это должно быть все, что вам нужно:

import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
Scheduler scheduler = new StdSchedulerFactory().getScheduler();

Мы используем его в контекстном прослушивателе при запуске для динамического планирования заданий. НТН.

  • 0
    Также обратите внимание, что JBoss 6 инициализирует планировщик Quartz при загрузке экземпляра сервера; однако затем он оставляет планировщик в режиме ожидания. Следовательно, планировщик должен быть явно запущен до того, как сработает любой из ваших запланированных триггеров.
  • 0
    Спасибо за ваш отзыв. Кварц запускается в моей среде автоматически (я полагаю, что определен @ResourceAdapter("quartz-ra.rar") ). Моя проблема в том, что я не знаю, как создавать новые рабочие места, потому что org.quartz.JobBuilder недоступен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню