2016-10-17 4 views
0

weblogic 10.3.4.0 (ejb 3.0)에서 응용 프로그램을 중지하면 EJB Stateless에서 predestroy fase에 대한 타이머를 정리할 수 있습니다.응용 프로그램을 중단 할 때 타이머 취소

하지만 웹 로직 인상이 메시지

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. 

내 preDestroy 방법은 콩이 NOT "널 (null)"상태에있을 때

@Resource 
private TimerService timerService; 

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

가 PreDestroy 전에 뭔가를 존재인가?

응용 프로그램을 중지 할 때 타이머를 취소 할 수 있습니까?

+0

이 글은 시작에 그들을 취소하는 것이 더 쉽습니다'PostConstruct' 방법 –

+0

그러나 고객 @ 응용 프로그램이 중지되면 취소하려고합니다. – Kaltresian

답변

0

다음과 같은 일을해야 추가 :

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

    @EJB 
    private YourEjbWithTimers ejbWithTimers; 

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

} 

과에 stopMyTimers 방법을 변경 :

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