KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jmanage > webui > ServerMonitor


1 /**
2  * Copyright 2004-2005 jManage.org
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
23 import java.net.InetAddress JavaDoc;
24 import java.net.Socket JavaDoc;
25 import java.io.LineNumberReader JavaDoc;
26 import java.io.InputStreamReader JavaDoc;
27
28 import java.util.logging.Logger JavaDoc;
29
30 /**
31  * @author Shashank Bellary
32  * Date: Nov 29, 2005
33  */

34 public class ServerMonitor extends Thread JavaDoc{
35     private int _port = Integer.getInteger("STOP.PORT", 9999).intValue();
36     private String JavaDoc _key = System.getProperty("STOP.KEY", "jManageKey");
37     private ServerSocket JavaDoc _socket;
38     private final String JavaDoc STOP_CMD = "stop";
39     private final Logger JavaDoc logger = Loggers.getLogger(ServerMonitor.class);
40
41     /**
42      * Default Constructor, initializing basic shutdown parameters.
43      */

44     ServerMonitor(){
45         try{
46             if(_port < 0)
47                 return;
48             setDaemon(true);
49             _socket = new ServerSocket JavaDoc(_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 JavaDoc 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     /**
67      * Deamon's main method.
68      */

69     public void run(){
70         while(true){
71             Socket JavaDoc socket = null;
72             try{
73                 socket = _socket.accept();
74                 LineNumberReader JavaDoc lin =
75                         new LineNumberReader JavaDoc(new InputStreamReader JavaDoc(socket.getInputStream()));
76                 String JavaDoc key = lin.readLine();
77                 if(!_key.equals(key))
78                     continue;
79
80                 String JavaDoc 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 JavaDoc e){
88                         e.printStackTrace();
89                     }
90                     try{
91                         _socket.close();
92                     }catch(Exception JavaDoc e){
93                         e.printStackTrace();
94                     }
95                     System.exit(0);
96                 }
97             }catch(Exception JavaDoc e){
98                 System.out.println(e.toString());
99             }finally{
100                 if(socket != null){
101                     try{
102                         socket.close();
103                     }catch(Exception JavaDoc e){}
104                 }
105                 socket = null;
106             }
107         }
108     }
109
110     /**
111      * Start a Monitor.
112      * This static method starts a monitor that listens for admin requests.
113      */

114     public static void monitor(){
115         new ServerMonitor();
116     }
117 }
Popular Tags