package foundation.server; import javax.servlet.ServletContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.route.RouteTable; import foundation.server.config.Configer; import foundation.server.config.ConfigerLoader; import foundation.server.config.ServerAssembleLoader; import foundation.server.config.ServerStatus; public class ServerInstance { private static Logger logger; private static ServerInstance instance; private ServletContext servletContext; private String version; static { logger = LogManager.getLogger(ServerInstance.class); } public ServerInstance(ServletContext servletContext) { this.servletContext = servletContext; version = "2.0"; } public static void startService(ServletContext servletContext) { try { instance = new ServerInstance(servletContext); instance.start(); } catch (Exception e) { logger.error(e); e.printStackTrace(); } } public static void stopService() { try { if(instance != null) { instance.stop(); } } catch (Exception e) { logger.error(e); e.printStackTrace(); } } public void start() throws Exception { try { logger.info("server is startting..."); logger.debug("server root path is " + Configer.getPath_Application()); ServerStatus.setStarting(true); //1. String contextPath = servletContext.getContextPath(); RouteTable.createInstance(contextPath); //2. load parameter and assemble configure file ConfigerLoader.staticLoad(); ServerAssembleLoader.staticLoad(); //3. run initializers InitializerContainer initializerContainer = InitializerContainer.getInstance(); for (Initializer initializer : initializerContainer) { initializer.onServerStart(); } } catch (Exception e) { e.printStackTrace(); } finally { ServerStatus.init(); ServerStatus.setStarting(false); printStartUpMessage(); } } public void stop() { logger.info("internal server is stopping..."); InitializerContainer initializerContainer = InitializerContainer.getInstance(); for (Initializer initializer : initializerContainer) { initializer.onServerStop(); } logger.info("internal server has been stopped"); } public void restart() throws Exception { stop(); start(); } private static String echoString(String word, int count) { StringBuilder result = new StringBuilder(); for (int i = 1; i <= count; i++) { result.append(word); } return result.toString(); } private void printStartUpMessage() { int length_total = 40; long total = Math.round((Runtime.getRuntime().totalMemory()) / (1024.0 * 1024)); long max = Math.round((Runtime.getRuntime().maxMemory()) / (1024.0 * 1024)); String envirenment = Configer.getString("EnvironmentName"); System.out.println("--->>> " + envirenment + " --->>>"); System.out.println(echoString("*", length_total + 2)); printMessage("Total Memory:" + total + "M", length_total); printMessage("Max Memory:" + max + "M", length_total); printMessage(version, length_total); System.out.println(echoString("*", length_total + 2)); } private void printMessage(String message, int totalLength) { MessagePos messagePos = new MessagePos(totalLength, message); System.out.println("*" + echoString(" ", messagePos.length_begin) + message + echoString(" ", messagePos.length_end) + "*"); } private class MessagePos { private int length_begin; private int length_end; private int length_message; public MessagePos(int totalLength, String message) { length_message = message.length(); length_begin = (totalLength - length_message) / 2; length_end = totalLength - length_begin - length_message; } } public static ServerInstance getInstance() { return instance; } }