1

我正在使用 JBoss6 并希望动态创建 Quartz-Jobs。在作业处理期间,将定义下一个开始时间(例如 1、5 或 10 小时)。

我没有找到任何解决方案,甚至很难访问org.quartz.Scheduler(参见QuartzScheduler injection in JBoss AS 6)。

下一个问题是创建新的 Jobs,我按照教程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。如果我手动添加石英依赖在启动时出错(类加载问题)。定义了这个工件(没有明确使用 Quartz):

<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>
4

2 回答 2

1

看来您正在关注 Quartz 2.0.x 教程。你试过Quartz 1.x 教程吗?

JBoss 6 提供的版本是 Quartz 1.8.3,并且在 Quartz 2.x 中有重大的API 更改。

于 2012-03-14T14:55:40.220 回答
1

在 JBoss 6 中,您可以使用 Quartz 库中提供的工厂类访问 Quartz 调度程序。这应该是您所需要的:

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

我们在启动时在上下文侦听器中使用它来动态调度作业。HTH。

于 2011-06-21T22:53:40.900 回答