Frage

Ich habe eine Methode, die eine Liste von Elementen genannt findItemByPIdEndDate () und seine kehrt innerhalb MngtImpl.java Klasse gefunden. Jetzt würde ich in einer Weile hin und wieder diese Methode ausführen möchte, kann stündlich so sagen hier ist das, was ich getan habe, so weit:

Dies ist CronSchedule.java

import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.JobDetail;

public class CronSchedule {
  public CronSchedule ()throws Exception {
    SchedulerFactory sf=new StdSchedulerFactory();
    Scheduler sched=sf.getScheduler();
    JobDetail jd=new JobDetail("job1","group1",CronJob.class);
    CronTrigger ct=new CronTrigger("cronTrigger","group2","0 * * * * ?");
    sched.scheduleJob(jd,ct);
    sched.start();
  }
  public static void main(String args[]){
    try{    
        new CronSchedule();          //Class where cron is created
    }catch(Exception e){}
  }                                 
}

Jetzt mit diesem ich Probleme habe. Diese Klasse ist von der Klasse aufgerufen oben auf Zeitdruck basiert (* in Klammern) und es führt Methode der MngtImpl Klasse.

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

import com.rosa.MngtImpl;

public class CronJob implements Job  {
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
          try {
                  MngtImpl pers = new MngtImpl();
                  pers.findItemByPIdEndDate();
        } catch (Exception e) {

                e.printStackTrace();
        }
  }
}

Hier ist die Methode, die ich versuchen, aus der obigen Klasse aufzurufen. Diese Methode wird innerhalb der Klasse gefunden namens MngtImpl.java

 public List<Long> findItemByPIdEndDate() throws Exception {

                List<Long> list = null;

                try{
                        Session session = sessionFactory.getCurrentSession();   
                        Query query = session.getNamedQuery("endDateChecker");
                        list = query.list();

                }catch (HibernateException e){
                        throw new DataAccessException(e.getMessage());
                }

                return list;
        }

Hier ist, was ich tun möchte. Ich brauche diese dieses obige Verfahren auf gewisse Zeit basiert auszuführen (was ich jederzeit angeben kann). Ich brauche eine Bohne innerhalb BeanFactory XML-Datei, die tatsächlich Instanzen dieser Scheduler zu machen und diese Methode aufruft, und ich versuchte, dies durch CronJob.java von CronScheldule.java Aufruf der Methode von einer anderen Klasse aufruft und ich machte eine Bohne, die vielleicht funktioniert oder nicht

<bean id="cronSchedule" class="com.mypackage.CronSchedule">
        </bean>

Aber es funktioniert nicht wie ich erwartet hatte, und es ist ziemlich kompliziert, kann ich etwas Hilfe mit Code setzen Sie sich bitte? Danke

Ich begegne die folgende Ausnahme:

java.lang.NullPointerException 11:10:46,410 ERROR [STDERR]
   at com.packftc.RulesManager.exception(RulesManager.java:25) 11:10:46,410 ERROR [STDERR]
   at org.drools.agent.RuleAgent$2.run(RuleAgent.java:442) 11:10:46,410 ERROR [STDERR]
   at java.util.TimerThread.mainLoop(Unknown Source) 11:10:46,410 ERROR [STDERR]
   at java.util.TimerThread.run(Unknown Source)

Das ist natürlich falsch, dies zu tun ich wie zilion Dinge ausprobiert habe, so weit: Hier ist, was ich in einfachen Worten zu tun, ich versuche, ich will findItemByPIdEndDate () -Methode von MngtImpl Klasse auszuführen jeder lässt Minute sagen. Verfahren ordnungsgemäß funktioniert ich einen Test geschrieben und es gibt sie. Also, was soll ich jetzt tun? Danke

War es hilfreich?

Lösung

Nur ein Zeiger, da ich nicht viel von dem Stack-Trace machen könnte, aber es scheint, das Problem in pers.findItemByPIdEndDate(); ist, da der Code funktioniert gut, wenn ich die Hibernate Sachen mit einer einfachen Java-Klasse ersetzen.

Auch geliefert ich das CronTrigger Muster als 0/5 * * * * ? so dass es pro 5 Sekunden zu laufen. Ihre aktuellen Muster den Job überhaupt nicht ausgelöst.

Sehen Sie, wenn diese keine Hilfe ist.

Andere Tipps

Wenn in regelmäßigen Abständen eine Aufgabe ausführt ist das Problem hier (ich bin nicht ganz sicher) Ich schlage vor, mit ScheduledExecutorService, dem Teil von JDK 1.5 und höher:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SchedulerExample {

private ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

public void activateHourlyDataRetrieval() {

        Runnable dataRetriever = new Runnable() {

           MngtImpl pers = new MngtImpl();

           public void run() {

               pers.findItemByPIdEndDate();

            }
         };

        scheduler.scheduleAtFixedRate(dataRetriever, 0, 1, TimeUnit.HOURS);
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top