سؤال

ولدي أسلوب بإرجاع قائمة من البنود دعا 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;
        }

والآن هنا هو ما أود القيام به. ولست بحاجة لتشغيل هذا هذا الأسلوب أعلاه استنادا إلى بعض مقدار الوقت (التي يمكن أن تحدد في أي وقت). ولست بحاجة لجعل الفول داخل ملف xml مصنع الفول في الواقع أن حالات هذا جدولة ويدعو هذه الطريقة، وحاولت ذلك من خلال الدعوة CronJob.java من CronScheldule.java الذي يدعو طريقة من فئة أخرى، وأنا قدمت الفول التي ربما تعمل أم لا

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

ولكن لا يعمل كما كنت أتوقع، ولها معقد جدا، هل لي أن أحصل على بعض المساعدة مع رمز من فضلك؟ شكرا لك

وأنا تواجه الاستثناء التالي:

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)

ومن الواضح أن هذا الطريق الخاطئ للقيام بذلك حاولت أن الأمور zilion حتى الآن: هنا هو ما أحاول القيام به في كلمات بسيطة، أريد أن تنفيذ findItemByPIdEndDate طريقة () من الدرجة MngtImpl كل يتيح القول دقيقة. طريقة يعمل بشكل صحيح كتبت الاختبار ومروره عليه. فماذا أفعل الآن ؟ شكرا لك

هل كانت مفيدة؟

المحلول

ومجرد مؤشر لأنني لا يمكن أن تجعل كثيرا من تتبع المكدس، ولكن يبدو أن المشكلة هي في pers.findItemByPIdEndDate(); منذ رمز يعمل بشكل جيد عندما كنت محل الاشياء السبات مع فئة جافا عادي.

وأنا أيضا زودت نمط CronTrigger كما 0/5 * * * * ? ذلك لتشغيله في 5 ثوان. النمط الحالي لا يتم إطلاق هذا المنصب على الإطلاق.

ونرى ما اذا كان هذا هو من أي مساعدة.

نصائح أخرى

إذا تنفيذ مهمة بشكل دوري هي المشكلة هنا (لست متأكدا تماما) أقترح استخدام 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);
}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top