2011-05-28 49 views
1

我正在使用JBoss6並想動態創建Quartz-Jobs。在處理作業期間,將定義下一個開始時間(例如,在1,5或10個小時內)。如何在JBoss6中動態添加Quartz Job

我沒有找到任何解決方案,甚至很難獲得org.quartz.Scheduler(請參閱QuartzScheduler injection in 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。如果我手動添加石英依賴項在啓動時出現錯誤(類加載問題)。該文物的定義(沒有明確使用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> 

回答

1

在JBoss中6,你可以在使用Quartz庫中提供了一個工廠類的Quartz調度得到。這應該是你需要的全部:

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

我們在啓動時使用這個上下文監聽器來動態調度作業。 HTH。

+0

另請注意,JBoss 6將在引導服務器實例時初始化Quartz調度程序;但是,它會使調度程序處於待機模式。因此,調度程序必須在觸發任何計劃的觸發器之前明確啓動。 – BigRedHurt 2011-06-23 16:12:05

+0

感謝您的反饋。 Quartz是在我的環境中自動啓動的(我假設有一個'@ResourceAdapter(「quartz-ra.rar」)'defined)。我的問題是,我不知道如何創建新的作業,因爲'org.quartz.JobBuilder'不可用。 – Thor 2011-07-20 08:12:13