Răsfoiți Sursa

在CTL里添加restartApp的命令,重启单个应用(.war)

o2lee 5 ani în urmă
părinte
comite
c5434ad8e8

+ 15 - 0
o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java

@@ -38,6 +38,7 @@ public class ActionControl extends ActionBase {
 	private static final String CMD_CLH2 = "clh2";
 	private static final String CMD_UF = "uf";
 	private static final String CMD_DDL = "ddl";
+	private static final String CMD_RST = "rst";
 
 	private static final int REPEAT_MAX = 100;
 	private static final int REPEAT_MIN = 1;
@@ -72,6 +73,8 @@ public class ActionControl extends ActionBase {
 				uf(cmd);
 			} else if (cmd.hasOption(CMD_DDL)) {
 				ddl(cmd);
+			} else if (cmd.hasOption(CMD_RST)) {
+				rst(cmd);
 			} else {
 				HelpFormatter formatter = new HelpFormatter();
 				formatter.printHelp("control command", options);
@@ -95,6 +98,7 @@ public class ActionControl extends ActionBase {
 		options.addOption(clh2Option());
 		options.addOption(ufOption());
 		options.addOption(ddlOption());
+		options.addOption(rstOption());
 		return options;
 	}
 
@@ -161,6 +165,11 @@ public class ActionControl extends ActionBase {
 				.desc("导出数据定义语句:建表语句:build,数据库创建:createDB,数据库删除dropDB.").build();
 	}
 
+	private static Option rstOption() {
+		return Option.builder("rst").longOpt("restartApp").argName("name").hasArg()
+				.desc("重启指定应用: 应用名称:name, 不带.war").build();
+	}
+
 	private void ec(CommandLine cmd) throws Exception {
 		if (BooleanUtils.isNotTrue(Config.currentNode().getEraseContentEnable())) {
 			logger.print("erase content is disabled.");
@@ -253,6 +262,12 @@ public class ActionControl extends ActionBase {
 		ddl.execute(type);
 	}
 
+	private void rst(CommandLine cmd) throws Exception {
+		String name = Objects.toString( cmd.getOptionValue(CMD_RST), "");
+		RestatWar rst = new RestatWar();
+		rst.execute(name);
+	}
+
 	private Integer getArgInteger(CommandLine cmd, String opt, Integer defaultValue) {
 		Integer repeat = defaultValue;
 		String r = cmd.getOptionValue(opt);

+ 63 - 0
o2server/x_console/src/main/java/com/x/server/console/action/RestatWar.java

@@ -0,0 +1,63 @@
+package com.x.server.console.action;
+
+import com.x.base.core.container.factory.PersistenceXmlHelper;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.DateTools;
+import com.x.base.core.project.tools.ListTools;
+import com.x.server.console.server.Servers;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.meta.MappingTool;
+import org.apache.openjpa.lib.util.Options;
+import org.apache.openjpa.persistence.EntityManagerImpl;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.eclipse.jetty.deploy.App;
+import org.eclipse.jetty.deploy.DeploymentManager;
+import org.eclipse.jetty.quickstart.QuickStartWebApp;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.handler.HandlerList;
+import org.eclipse.jetty.server.handler.gzip.GzipHandler;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class RestatWar {
+
+	private static Logger logger = LoggerFactory.getLogger(RestatWar.class);
+
+	/* 初始化完成 */
+	public boolean execute( String simpleName ) throws Exception {
+		if (Servers.applicationServerIsRunning()) {
+			try {
+				GzipHandler gzipHandler = (GzipHandler) Servers.applicationServer.getHandler();
+				HandlerList hanlderList = (HandlerList) gzipHandler.getHandler();
+				Boolean appExists = false;
+				for (Handler handler : hanlderList.getHandlers()) {
+					if ( QuickStartWebApp.class.isAssignableFrom(handler.getClass())) {
+						QuickStartWebApp app = (QuickStartWebApp) handler;
+						if (StringUtils.equals("/" + simpleName, app.getContextPath())) {
+							appExists = true;
+							app.stop();
+							app.start();
+						}
+					}
+				}
+				if( !appExists ){
+					logger.print("application {} not exists or not start.", simpleName );
+				}
+				return true;
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}else{
+			logger.print("application server not start." );
+		}
+		logger.print("restart application command excute completed." );
+		return true;
+	}
+}