2009-10-15 9 views
9

Wdrażam EJB, który powinien ustawić timer i być uruchamiany przez to co 24 godziny. Ale gdzie powinienem ustawić timer? @PostConstruct nie pomaga - jest to komponent bean sesji, więc metoda post-construct będzie wywoływana podczas tworzenia rzeczywistej instancji (nigdy nie stanie się tak, ponieważ jedynym celem tego komponentu jest śledzenie licznika czasu).Jak uzyskać powiadomienie o wdrożeniu EJB (aby skonfigurować licznik czasu)?

Czy istnieje inny sposób otrzymywania powiadomień o wdrożeniu komponentu bean (nie tworzenie instancji) w celu skonfigurowania timera?

Dzięki

Odpowiedz

1

Rozwiązanie znalazłem jest brzydki, ale po prostu brzydka jak każdego innego rozwiązania prawnego tego problemu (na przykład rozwiązanie z @fvu). Stosowanie adnotacji @WebService do komponentu bean powoduje, że JBoss tworzy instancję natychmiast po wdrożeniu (ponieważ potrzebuje sposobu na skonstruowanie WSDL komponentu bean), wówczas zostanie wywołana metoda oznaczona znacznikiem @WebService. Udało mi się ustawić zegar.

3

Myślę, że najprostszym i najbardziej przenośnym rozwiązaniem jest dodanie internetową aplikację do swojej korporacyjnej aplikacji z detektorem kontekstowego (contextInitialized event), który inicjuje EJB.

Nawiasem mówiąc, to jest mniej więcej to, co Quartz Scheduler robi tak dobrze (klasa QuartzInitializerListener)

5

EJB 3.1 wprowadza Singleton bean. Zostanie utworzony w depierze EJB.

@Singleton 
@Startup 
public class TimerSessionBean { 

    @Resource 
    TimerService timerService; 

    @PostConstruct 
    public void startTimer() { 
     Logger.getLogger(getClass().getName()).log(Level.INFO, 
       timerService.getTimers().size() + " timers running"); 

     Logger.getLogger(getClass().getName()).log(Level.INFO, "create a timer"); 

     timerService.createTimer(10000, 10000, "a timer"); 
    } 

    @Timeout 
    void doSomething(Timer timer) { 
     System.out.println("something"); 
    } 
} 

Nowością w EJB 3.1, które mogą być wykorzystane do uruchomienia zadania okresowego jest Schedule annotation.

Powiązane problemy