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;
|
}
|
}
|