2012-07-14 16 views
16

chciałbym spróbować użyć @Schedule adnotacji w następujący sposób:@Schedule adnotacja kursują co kilka minut (lub sekund)

public class MyTestServlet extends HttpServlet { 
    private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class); 

    @EJB CronService cronService; 

    public void service(HttpServletRequest req, HttpServletResponse resp) throws .... { 
    .... 
    cronService.iLive(); 
} 
--- 
    @Local // because the ejb is in a servlet (there is no other jvm) 
public interface CronService { 

    public void iLive(); 
    public void runsEveryMinute(); 
} 
--- 
@Singleton 
public class CronServiceBean implements CronService { 
    private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class); 

    @Schedule(minute="*") 
    public void runsEveryMinute() { 
     LOG.info(" runs EveryMinute "); 
    } 

    public void iLive() { 
     LOG.info("iLive"); 

    } 
--- 
LOG 
... 
CronServiceBean:34 ] iLive 

podstawie dziennika The CronService żywo i dobrze, ale zaplanowane zadanie "runsEveryMinute" nie działa.

Jak to działa, używając zaplanowanego zadania EJB?

Odpowiedz

51

Jak na Javadoc dla @Schedule adnotacji, wartości domyślne:

  • * dla wszystkich pól z wyjątkiem godziny, minuty i sekundy; i
  • 0 domyślnie dla godziny, minuty i sekundy.

Określając minute="*" godzinę i pozostawiając na jej niewypłacalności 0, że wnosi o przebiegu czasowego każdą minutę po północy przez jedną godzinę (to znaczy, 00:00, 00:01, 00:02, ..., 00:59), a następnie nie ponownie, aż do następnego dnia. Zamiast tego należy użyć:

@Schedule(hour="*", minute="*") 

Aby uruchomić co kilka sekund (np 10 sekund), można użyć cron -jak składnia:

@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false) 

Domyślnie scheduler utrzymuje wydarzenia. Ustawienie persistent = false uniemożliwi im ich rozbudowę w miarę upływu czasu.

Powiązane problemy