1 16 package org.jmanage.webui; 17 18 import org.mortbay.jetty.Server; 19 import org.jmanage.core.alert.AlertEngine; 20 import org.jmanage.core.util.Loggers; 21 22 import java.net.ServerSocket ; 23 import java.net.InetAddress ; 24 import java.net.Socket ; 25 import java.io.LineNumberReader ; 26 import java.io.InputStreamReader ; 27 28 import java.util.logging.Logger ; 29 30 34 public class ServerMonitor extends Thread { 35 private int _port = Integer.getInteger("STOP.PORT", 9999).intValue(); 36 private String _key = System.getProperty("STOP.KEY", "jManageKey"); 37 private ServerSocket _socket; 38 private final String STOP_CMD = "stop"; 39 private final Logger logger = Loggers.getLogger(ServerMonitor.class); 40 41 44 ServerMonitor(){ 45 try{ 46 if(_port < 0) 47 return; 48 setDaemon(true); 49 _socket = new ServerSocket (_port, 1, InetAddress.getLocalHost()); 50 if(_port == 0){ 51 _port = _socket.getLocalPort(); 52 System.out.println(_port); 53 } 54 if("jManageKey".equals(_key)){ 55 System.out.println(_key); 56 } 57 }catch(Exception e){ 58 System.err.println(e.toString()); 59 } 60 if(_socket != null) 61 this.start(); 62 else 63 System.out.println("WARN: Not listening on monitor port: "+_port); 64 } 65 66 69 public void run(){ 70 while(true){ 71 Socket socket = null; 72 try{ 73 socket = _socket.accept(); 74 LineNumberReader lin = 75 new LineNumberReader (new InputStreamReader (socket.getInputStream())); 76 String key = lin.readLine(); 77 if(!_key.equals(key)) 78 continue; 79 80 String cmd = lin.readLine(); 81 if(STOP_CMD.equals(cmd)){ 82 AlertEngine.getInstance().stop(); 83 logger.info("Shutting down the server."); 84 85 try{ 86 socket.close(); 87 }catch(Exception e){ 88 e.printStackTrace(); 89 } 90 try{ 91 _socket.close(); 92 }catch(Exception e){ 93 e.printStackTrace(); 94 } 95 System.exit(0); 96 } 97 }catch(Exception e){ 98 System.out.println(e.toString()); 99 }finally{ 100 if(socket != null){ 101 try{ 102 socket.close(); 103 }catch(Exception e){} 104 } 105 socket = null; 106 } 107 } 108 } 109 110 114 public static void monitor(){ 115 new ServerMonitor(); 116 } 117 } | Popular Tags |