2013-02-13 26 views
7

Bu oldukça düz bir şekilde ileri doğru olmalı, ancak hiçbir iş yürütülmediğini görüyorum. Görevin execute() yönteminde bir kesme noktası var, hiçbir iş parçacığı hiç gelmiyor. Neyin yanlış anlamadım.Quartz basit tetiklemiyor

Meslek

class Printer implements Job{ 
    public Printer(){ 
     System.out.println("created printer"); 
    } 

    @Override 
    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
     System.out.println("hi" + context.getFireTime()); 
    } 

} 

class MyClass { 
     public static void main(String[] args) throws Throwable { 
      Scheduler s = StdSchedulerFactory.getDefaultScheduler(); 
      JobDetail job = newJob(Printer.class).build(); 
      CronTrigger trigger = 
        newTrigger() 
        .withIdentity("a", "t") 
        .withSchedule(cronSchedule("0/5 * * * * ?").inTimeZone(TimeZone.getDefault())) 
        .forJob(job).build(); 
      s.scheduleJob(job, trigger); 

// This prints the right date! 

      System.out.println(trigger.getNextFireTime()); 
      s.start(); 
     } 
} 

DÜZENLEME ana sınıfı: Ben quartz.property dosyası yoktu keşfetti, bu yüzden kuvars için threadpool oldu imkanı yoktu hiç yaratılmadı.

DirectSchedulerFactory.getInstance().createVolatileScheduler(10); 
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler(); 

ne Tahmin: documentation okunduğunda nedenle, ben aşağıdaki StdSchedulerFactory kullanarak kodu değiştirilir? Hala şans yok. Aynı özdeş etki. Uygulama tetiklemeye değil, hayatta kalmaya devam ediyor.

+1

Programınız sonlandırılmıyor mu? – Dariusz

+0

Hayır, çünkü zamanlayıcıyı kapatmam (amaç). – sscarduzio

+0

Uygulamanızın sadece s.start() 'dan hemen sonra bitmediğini doğruladınız mı? – Dariusz

cevap

9

Çözümü buldum: işi (Yazıcı) tanımlayan sınıfın görünürlüğünü genel değiştirerek Quartz'in ona erişmesini ve çalıştırmasını sağlayabilirsiniz. o zamanlayıcı bir <? extends Job>.class geçmek mümkündür olduğundan, anlaşılabilir

public class Printer implements Job{ // just add 'public'! 
    public Printer(){ 
     System.out.println("created printer"); 
    } 

    @Override 
    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
     System.out.println("hi" + context.getFireTime()); 
    } 

} 

(kanlı cehennem, neden ??) ve değil - anonim nesneler - örneğin.

Bunu söyledikten sonra, Gerçekten çok üzülüyorum ki Kuvars sessizce tek bir hata mesajı olmadan işten atıyor.

+3

Yüklenicinin parametreler gerektirmesi veya herkese açık olmaması durumunda başka bir sorun da olabilir. Sorunumu senin sayesinde buldum. –

+2

Aynı sorunu yaşadım. Ayrıca hiç hata mesajı verilmediğini çok garip/sinir bozucu buluyorum. –