1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.mortbay.jetty.plugin.util;
18
19 import java.io.IOException;
20 import java.io.InputStreamReader;
21 import java.io.LineNumberReader;
22 import java.net.InetAddress;
23 import java.net.ServerSocket;
24 import java.net.Socket;
25 import java.net.UnknownHostException;
26
27 import org.mortbay.jetty.Server;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class Monitor extends Thread
43 {
44 private String _key;
45 private Server[] _servers;
46
47 ServerSocket _serverSocket;
48 boolean _kill;
49
50 public Monitor(int port, String key, Server[] servers, boolean kill)
51 throws UnknownHostException, IOException
52 {
53 if (port <= 0)
54 throw new IllegalStateException ("Bad stop port");
55 if (key==null)
56 throw new IllegalStateException("Bad stop key");
57
58 _key = key;
59 _servers = servers;
60 _kill = kill;
61 setDaemon(true);
62 setName("StopJettyPluginMonitor");
63 _serverSocket=new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));
64 _serverSocket.setReuseAddress(true);
65 }
66
67 public void run()
68 {
69 while (_serverSocket != null)
70 {
71 Socket socket = null;
72 try
73 {
74 socket = _serverSocket.accept();
75 socket.setSoLinger(false, 0);
76 LineNumberReader lin = new LineNumberReader(new InputStreamReader(socket.getInputStream()));
77
78 String key = lin.readLine();
79 if (!_key.equals(key)) continue;
80 String cmd = lin.readLine();
81 if ("stop".equals(cmd))
82 {
83 try{socket.close();}catch (Exception e){PluginLog.getLog().debug(e);}
84 try{socket.close();}catch (Exception e){PluginLog.getLog().debug(e);}
85 try{_serverSocket.close();}catch (Exception e){PluginLog.getLog().debug(e);}
86
87 _serverSocket = null;
88
89 if (_kill)
90 {
91 PluginLog.getLog().info("Killing Jetty");
92 System.exit(0);
93 }
94 else
95 {
96 for (int i=0; _servers != null && i < _servers.length; i++)
97 {
98 try
99 {
100 PluginLog.getLog().info("Stopping server "+i);
101 _servers[i].stop();
102 }
103 catch (Exception e)
104 {
105 PluginLog.getLog().error(e);
106 }
107 }
108 }
109 }
110 else
111 PluginLog.getLog().info("Unsupported monitor operation");
112 }
113 catch (Exception e)
114 {
115 PluginLog.getLog().error(e);
116 }
117 finally
118 {
119 if (socket != null)
120 {
121 try
122 {
123 socket.close();
124 }
125 catch (Exception e)
126 {
127 PluginLog.getLog().debug(e);
128 }
129 }
130 socket = null;
131 }
132 }
133 }
134 }