正在从Java中的另一个类执行方法。。。还有更多

正在从Java中的另一个类执行方法。。。还有更多,java,spring,quartz-scheduler,Java,Spring,Quartz Scheduler,我有一个方法,它返回一个名为findItemByPIdEndDate()的项目列表,以及在MngtImpl.java类中找到的项目列表。现在我想每隔一段时间执行一次这个方法,让我们这样说,这是我到目前为止所做的: 这是CronSchedule.java import org.quartz.CronTrigger; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdS

我有一个方法,它返回一个名为findItemByPIdEndDate()的项目列表,以及在MngtImpl.java类中找到的项目列表。现在我想每隔一段时间执行一次这个方法,让我们这样说,这是我到目前为止所做的:

这是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){}
  }                                 
}
现在这个我有问题了。基于时间约束(*括号内)从上面的类调用该类,并执行MngtImpl类的方法

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();
        }
  }
}
下面是我试图从上面的类调用的方法。此方法可在名为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;
        }

这显然是错误的做法,到目前为止,我像zilion一样尝试过:简单地说,我想从MngtImpl类执行findItemByPIdEndDate()方法。方法运行正常。我写了一个测试,它通过了。那我现在该怎么办?谢谢

如果定期执行任务是这里的问题(我不太确定),我建议使用ScheduledExecutorService,它是JDK 1.5及更高版本的一部分:

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);
}
}

仅仅是一个指针,因为我无法通过堆栈跟踪获得太多信息,但问题似乎出在
pers.findItemByPIdEndDate()中因为当我用普通java类替换Hibernate时,代码运行良好

我还提供了CronTrigger模式作为
0/5****?
,以便每5秒运行一次。您当前的模式根本不会解雇该工作


看看这是否有帮助。

你问题的措辞有点复杂,难以理解:-(你似乎有基本的想法。我建议你问一个更精确的问题,到底是什么不起作用。
但它没有像我预期的那样起作用
抱歉,但这没有帮助。它在做什么?如果你使用Spring,我想它有一些很好的石英包装,你试过了吗?我想它有一些很好的石英包装z、 你试过了吗?我不知道是哪一种…“但它没有像我预期的那样起作用”我应该得到一个列表。但是我得到的是一个异常,空指针。如果你得到了一个异常,那么为了上帝的缘故,发布堆栈跟踪-这将准确地显示你的问题所在,也可能是空的。如果没有这些信息,将很难帮助你。下一个问题-com.pac中发生了什么kftc.RulesManager?这是您的代码还是库代码?在任何情况下,您的规则库似乎有问题-RuleAgent任务正在将此异常移交给侦听器,由于NPE,侦听器无法对其执行任何操作。您是否记录了此实际异常的位置,因为这是根本原因?我收到了一份compile错误“无法解析TimeUnit.HOURS”我是否需要在appcontext中创建任何bean?您是否记得导入
java.util.concurrent.TimeUnit
?您是否使用JDK 1.5或更高版本?我将时间更改为秒..仍然没有什么Marco-问题是NPE,正如OP在对其问题的评论中所暗示的,但仍然没有显示(提示,提示)的堆栈跟踪。
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)
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);
}
}