2016-10-17 1 views
0

Auf Weblogic 10.3.4.0 (ejb 3.0) wenn ich die Anwendung stoppe Ich möchte die Timer auf der Predestroy-Phase auf EJB Stateless reinigen.Timer abbrechen wenn Anwendung stoppen EJB 3.0

aber weblogic raise Diese Nachricht

java.lang.IllegalStateException: [EJB:010193]Illegal call to EJBContext method. The bean is in "null" state. It cannot perform 'getting the Timer Service' action(s). Refer to the EJB specification for more details. 

Meine preDestroy Methode ist

@Resource 
private TimerService timerService; 

@PreDestroy 
public void stopMyTimers() { 
    if(timerService!=null){ 
     for(Timer timer : timerService.getTimers()) { 
      if(timer!=null) timer.cancel(); 
     } 
    } 
}  

etwas vor PreDestroy liegt vor, wenn die Bohne NICHT in "null" Zustand ist?

Wie kann ich die Timer abbrechen, wenn ich die Anwendung stoppe?

+0

Es ist einfacher, sie in einem beim Start abzubrechen '@ PostConstruct' Methode –

+0

Aber der Kunden möchte abbrechen, wenn die Anwendung beendet wird. – Kaltresian

Antwort

0

Hinzufügen von so etwas wie die folgenden funktionieren soll:

@javax.ejb.Singleton 
// you might need @javax.ejb.Startup as well 
public class ShutdownController { 

    @EJB 
    private YourEjbWithTimers ejbWithTimers; 

    @PreDestroy 
    void shutdown() { 
     ejbWithTimers.stopMyTimers(); 
    } 

} 

und Ihre stopMyTimers Methode ändern:

 // no annotation 
     public void stopMyTimers() { 
      // null tests not needed 
      // - if something is null then it's broken 
      for(Timer timer : timerService.getTimers()) { 
       timer.cancel(); 
      } 
     }