2013-08-20 52 views
1

我使用http://www.eclipse.org/jetty/documentation/current/shutdown-handler.html作爲試圖關閉我的碼頭服務器的指南,但當connection.getResponseCode();被調用時我得到java.net.SocketException: Unexpected end of file from server,我不知道爲什麼。我使用xml配置的服務器,所以ShutdownHandler添加到Handler鏈的方式有點不同,但它應該沒問題。我知道ShutdownHandler已正確連接到處理程序鏈,因爲我使用dumpAfterStartup來檢查它是否已啓動。使用ShutdownHandler關閉碼頭

我最不確定的事情是行:URL url = new URL("http://localhost:" + port + "/shutdown?token=" + shutdownCookie);。我不知道我應該把什麼放在shutdownCookie字段中;在ShutdownHandler中指定的密碼或STOP鍵,或什麼。我已經嘗試了密碼和STOP鍵,但沒有運氣。我使用POST作爲我的請求方法,但我也嘗試了PUT,它也不起作用。

請根據需要要求更多信息。

回答

0

不幸的是,ShutdownHandler方法並不適合我,但我查看了源代碼並找到了這個代碼片段。

Socket s = new Socket(InetAddress.getByName("localhost"), STOP_PORT); 
try { 
    OutputStream out = s.getOutputStream(); 
    out.write((STOP_KEY + "\r\nstop\r\n").getBytes()); 
    out.flush(); 
} finally { 
    s.close(); 
} 
1

shutdownCookie應該是你如果處理程序鏈是否正確,這將工作配置配置了

關機處理程序的祕密......

public void start() throws Exception 
    { 
     Server server = new Server(10100); 
     DebugHandler dh = new DebugHandler(); 
     dh.setHandler(new ShutdownHandler(server,"foo")); 
     server.setHandler(dh); 
     server.start(); 
    } 

    public static void attemptShutdown(int port, String shutdownCookie) 
    { 
     try 
     { 
      URL url = new URL("http://localhost:" + port + "/shutdown?token=" + shutdownCookie); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.getResponseCode(); 
     } 
     catch (Exception e) 
     { 
      throw new RuntimeException(e); 
     } 
    } 


    public static void main(String[] args) 
    { 
     try 
     { 
      Shutdown s = new Shutdown(); 
      s.start();  
      Shutdown.attemptShutdown(10100,"foobar");   
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

我們得到以下日誌:

Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.Server doStart 
INFO: jetty-8.1.11.v20130520 
Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.AbstractConnector doStart 
INFO: Started [email protected]:10100 
Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.handler.ShutdownHandler handle 
WARNING: Unauthorized shutdown attempt from 127.0.0.1 

將shutdownCookie從'foobar'更改爲'foo'產生:

2013-08-22 10:13:00.829:INFO:oejsh.ShutdownHandler:Shutting down by request from 127.0.0.1 

您可以使用上述代碼並從另一個JVM調用靜態方法,並且第一臺服務器將按預期停止。