2012-03-21 2 views
0

임베디드 Jetty 컨테이너에서 나는 긴 폴링을 통해 클라이언트에 데이터를 전송하는 서블릿을 가지고 있으며 서버에 메시지를 보내서 서버를 종료 할 때 클라이언트에게 알리고 싶습니다. 연결이 끊기기 전에 클라이언트가이 메시지를 받으면 사용자에게 경고하고 http 요청을 중지해야합니다.Jetty가 연결을 종료하기 전에 서블릿을 정상적으로 중지하는 방법

아쉽게도 Server.stop()이 호출 될 때 Jetty가 수행하는 첫 번째 작업은 모든 커넥터를 닫는 것이므로 종료 메시지가 전송되지 않습니다. 지금까지 찾은 유일한 해결책은 서버에 LifeCycle.Listener를 등록하는 것인데, 연결이 닫히기 전에 다시 호출됩니다.

더 좋은 방법이 있나요? 커넥션이 닫히기 전에 임박한 서버 종료의 콜백을 통해 서블릿에 정보가 전달 될 것으로 기대했을 것입니다.

답변

0

나는 당신이하는 것이 유일한 방법이라고 생각합니다.) (정지를 호출 부두 8.1의 코드를 보면) (

 try 
     { 
      if (_state == __STOPPING || _state == __STOPPED) 
       return; 
      setStopping(); 
      doStop(); 
      setStopped(); 
     } 
     catch (Exception e) 
     { 
      setFailed(e); 
      throw e; 
     } 
     catch (Error e) 
     { 
      setFailed(e); 
      throw e; 
     } 

setStopping를 호출

private void setStopping() 
{ 
    LOG.debug("stopping {}",this); 
    _state = __STOPPING; 
    for (Listener listener : _listeners) 
     listener.lifeCycleStopping(this); 
} 

그래서 등록 LifeCycle.Listener 정말 아무것도 전에 호출 유일한 것입니다.

관련 문제