You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2011/03/26 19:44:04 UTC

svn commit: r1085781 - /ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java

Author: adrianc
Date: Sat Mar 26 18:44:04 2011
New Revision: 1085781

URL: http://svn.apache.org/viewvc?rev=1085781&view=rev
Log:
Unraveling Start.java spaghetti code: Moved "admin port" code to a separate class.

Modified:
    ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java

Modified: ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java?rev=1085781&r1=1085780&r2=1085781&view=diff
==============================================================================
--- ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java (original)
+++ ofbiz/trunk/framework/start/src/org/ofbiz/base/start/Start.java Sat Mar 26 18:44:04 2011
@@ -35,7 +35,7 @@ import java.util.List;
  * Start - OFBiz Container(s) Startup Class
  *
  */
-public class Start implements Runnable {
+public class Start {
 
     private static final String SHUTDOWN_COMMAND = "SHUTDOWN";
     private static final String STATUS_COMMAND = "STATUS";
@@ -97,11 +97,9 @@ public class Start implements Runnable {
     private Config config = null;
     private String[] loaderArgs = null;
     private List<StartupLoader> loaders = new ArrayList<StartupLoader>();
-    private boolean serverRunning = true;
-    private ServerSocket serverSocket = null;
     private boolean serverStarted = false;
     private boolean serverStopping = false;
-    private Thread serverThread = null;
+    private Thread adminPortThread = null;
 
     public void init(String[] args) throws IOException {
         init(args, true);
@@ -200,18 +198,15 @@ public class Start implements Runnable {
 
     private void initListenerThread() throws IOException {
         if (config.adminPort > 0) {
-            this.serverSocket = new ServerSocket(config.adminPort, 1, config.adminAddress);
-            this.serverThread = new Thread(this, this.toString());
-            this.serverThread.setDaemon(false);
-            System.out.println("Admin socket configured on - " + config.adminAddress + ":" + config.adminPort);
-            this.serverThread.start();
+            this.adminPortThread = new AdminPortThread();
+            this.adminPortThread.start();
         } else {
             System.out.println("Admin socket not configured; set to port 0");
         }
     }
 
     private void initLogDirectory() {
-        // stat the log directory
+        // Create the log directory
         boolean createdDir = false;
         File logDir = new File(config.logDir);
         if (!logDir.exists()) {
@@ -260,60 +255,6 @@ public class Start implements Runnable {
         }
     }
 
-    private void processClientRequest(Socket client) throws IOException {
-        BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
-        String request = reader.readLine();
-
-        PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
-        writer.println(processRequest(request, client));
-        writer.flush();
-
-        writer.close();
-        reader.close();
-    }
-
-    private String processRequest(String request, Socket client) {
-        if (request != null) {
-            String key = request.substring(0, request.indexOf(':'));
-            String command = request.substring(request.indexOf(':') + 1);
-            if (!key.equals(config.adminKey)) {
-                return "FAIL";
-            } else {
-                if (command.equals(Start.SHUTDOWN_COMMAND)) {
-                    if (serverStopping) return "IN-PROGRESS";
-                    Thread t = new Thread() {
-                        @Override
-                        public void run() {
-                            shutdownServer();
-                        }
-                    };
-                    t.start();
-                    return "OK";
-                } else if (command.equals(Start.STATUS_COMMAND)) {
-                    return serverStopping ? "Stopping" : serverStarted ? "Running" : "Starting";
-                }
-                return "FAIL";
-            }
-        } else {
-            return "FAIL";
-        }
-    }
-
-    public void run() {
-        while (serverRunning) {
-            try {
-                Socket clientSocket = serverSocket.accept();
-                System.out.println("Received connection from - " + clientSocket.getInetAddress() + " : " + clientSocket.getPort());
-                processClientRequest(clientSocket);
-                clientSocket.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        shutdownServer();
-        System.exit(0);
-    }
-
     private String sendSocketCommand(String command) throws IOException, ConnectException {
         Socket socket = new Socket(config.adminAddress, config.adminPort);
 
@@ -377,7 +318,9 @@ public class Start implements Runnable {
                 }
             }
         }
-        serverRunning = false;
+        if (this.adminPortThread != null && this.adminPortThread.isAlive()) {
+            this.adminPortThread.interrupt();
+        }
     }
 
     public void start() {
@@ -431,7 +374,71 @@ public class Start implements Runnable {
         return status;
     }
 
-    public void stop() {
+    public void stopServer() {
         shutdownServer();
+        System.exit(0);
+    }
+
+    private class AdminPortThread extends Thread {
+        private ServerSocket serverSocket = null;
+
+        AdminPortThread() throws IOException {
+            super("AdminPortThread");
+            this.serverSocket = new ServerSocket(config.adminPort, 1, config.adminAddress);
+            setDaemon(false);
+        }
+
+        private void processClientRequest(Socket client) throws IOException {
+            BufferedReader reader = null;
+            PrintWriter writer = null;
+            try {
+                reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
+                String request = reader.readLine();
+                if (request != null) {
+                    writer = new PrintWriter(client.getOutputStream(), true);
+                    String key = request.substring(0, request.indexOf(':'));
+                    String command = request.substring(request.indexOf(':') + 1);
+                    if (key.equals(config.adminKey)) {
+                        if (command.equals(Start.SHUTDOWN_COMMAND)) {
+                            if (serverStopping) {
+                                writer.println("IN-PROGRESS");
+                            } else {
+                                writer.println("OK");
+                                writer.flush();
+                                stopServer();
+                            }
+                            return;
+                        } else if (command.equals(Start.STATUS_COMMAND)) {
+                            writer.println(serverStopping ? "Stopping" : serverStarted ? "Running" : "Starting");
+                            return;
+                        }
+                    }
+                }
+                writer.println("FAIL");
+            } finally {
+                if (reader != null) {
+                    reader.close();
+                }
+                if (writer != null) {
+                    writer.flush();
+                    writer.close();
+                }
+            }
+        }
+
+        @Override
+        public void run() {
+            System.out.println("Admin socket configured on - " + config.adminAddress + ":" + config.adminPort);
+            while (!Thread.interrupted()) {
+                try {
+                    Socket clientSocket = serverSocket.accept();
+                    System.out.println("Received connection from - " + clientSocket.getInetAddress() + " : " + clientSocket.getPort());
+                    processClientRequest(clientSocket);
+                    clientSocket.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
     }
 }