2009-10-22 2 views
0

findItemByPIdEndDate()라는 항목 목록을 반환하고 MngtImpl.java 클래스에서 해당 메서드를 찾을 수있는 메서드가 있습니다. 지금은 시간당 그래서 여기에 말할 수, 매번 동안이 방법을 실행하고 싶은 것은 내가 지금까지했던 것입니다 :Java의 다른 클래스에서 메서드 실행 중 ... more 및

이 나는 ​​문제가 이것으로 이제

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

CronSchedule.java

입니다 . 이 클래스는 위의 클래스에서 시간 제약 조건 (* 괄호)에 따라 호출되며 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; 
     } 

이제 제가하고 싶은 것이 있습니다. 이 방법은 위의 방법을 약간의 시간 (언제든지 지정할 수 있음)에 따라 실행해야합니다. 나는 bean factory xml 파일 안에 실제로이 인스턴스를 스케쥴러로 호출하고이 메소드를 호출해야한다. 나는 CronScheldule.java에서 CronJob.java를 호출하여 이것을 시도했다. 다른 클래스의 메소드를 호출하고 나는 작동하는지 아닌지 bean을 만들었다.

<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 것들처럼 해봤이 일을 잘못된 방법입니다 : 여기 간단한 단어에서 할 노력하고있어 것입니다, 매주 수 분마다 MngtImpl 클래스에서 findItemByPIdEndDate() 메서드를 실행하려고합니다. 메서드가 올바르게 작동합니다. 테스트를 작성하고 테스트를 통과합니다. 이제 어떻게해야합니까? 주셔서 감사합니다

+0

질문의 표현은 약간 이해하기 쉽습니다 .- 기본 아이디어가있는 것 같습니다. 정확하게 작동하지 않는 것에 대해 좀 더 정확한 질문을하는 것이 좋습니다. – KLE

+1

'하지만 예상대로 작동하지 않습니다 .' 미안하지만이 도움이되지 않습니다. 무엇을하고 있습니까? 또한 스프링을 사용하는 경우 - Quartz 용 멋진 래퍼가 있다고 생각했습니다. 시도해 보셨습니까? –

+0

Quartz 용 멋진 래퍼가 있다고 생각했는데 시도해 보셨습니까? 그들? 어떤 사람, 나는 몰랐다. "하지만 예상대로 작동하지 않는다."나는리스트를 얻어야 만했다. 대신에 예외가 생겼다. Null Pointer – ant

답변

0

그냥 포인터를 내가 할 수있는 이후 스택 추적을 많이하지는 않지만, 평범한 자바 클래스로 Hibernate를 대체 할 때 코드가 잘 작동하기 때문에 문제는 에있는 것처럼 보입니다.

또한 CronTrigger 패턴을 0/5 * * * * ?으로 입력하여 5 초마다 실행했습니다. 당신의 현재 패턴은 일을 전혀 해고하지 않습니다.

이것이 도움이되는지 확인하십시오.

0

주기적으로 작업을 실행하는 것은 여기에 문제가 (내가 아주 확실하지 않다) 나중에 JDK 1.5의 일부입니다 ScheduledExecutorService를, 사용하는 것이 좋습니다 경우 :

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

"TimeUnit.HOURS를 해결할 수 없습니다"라는 컴파일 오류가 발생합니다. appcontext 내에 bean을 작성해야합니까? – ant

+0

java.util.concurrent.TimeUnit을 가져 왔습니까? JDK 1.5 이상을 사용하고 있습니까? – MarkoU

+0

나는 시간을 초로 바꿨다. 아직 아무것도 안된다. – ant

관련 문제