Просмотр исходного кода

自建表编译优化,支持集群同时编译

o2sword 5 лет назад
Родитель
Сommit
41f54a5824

+ 0 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCover.java

@@ -165,8 +165,6 @@ class ActionCover extends BaseAction {
 		if(!wi.getTableList().isEmpty()){
 			CacheManager.notify(Table.class);
 			CacheManager.notify(Statement.class);
-
-			business.buildAllTable();
 		}else if(!wi.getStatementList().isEmpty()){
 			CacheManager.notify(Statement.class);
 		}

+ 0 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCreate.java

@@ -112,8 +112,6 @@ class ActionCreate extends BaseAction {
 		if(!wi.getTableList().isEmpty()){
 			CacheManager.notify(Table.class);
 			CacheManager.notify(Statement.class);
-
-			business.buildAllTable();
 		}else if(!wi.getStatementList().isEmpty()){
 			CacheManager.notify(Statement.class);
 		}

+ 38 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuild.java

@@ -0,0 +1,38 @@
+package com.x.query.assemble.designer.jaxrs.table;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.exception.ExceptionAccessDenied;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WrapBoolean;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.query.assemble.designer.Business;
+
+class ActionBuild extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionBuild.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Wo wo = new Wo();
+			Business business = new Business(emc);
+			if (!business.controllable(effectivePerson)) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+
+			wo.setValue(business.buildAllTable());
+			logger.print("build table complete!");
+			result.setData(wo);
+
+			return result;
+		}
+	}
+
+	public static class Wo extends WrapBoolean {
+
+	}
+
+}

+ 21 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuildAll.java

@@ -2,13 +2,21 @@ package com.x.query.assemble.designer.jaxrs.table;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.Application;
+import com.x.base.core.project.connection.CipherConnectionAction;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.x_query_assemble_designer;
 import com.x.query.assemble.designer.Business;
+import com.x.query.assemble.designer.ThisApplication;
+
+import java.util.Date;
+import java.util.List;
 
 class ActionBuildAll extends BaseAction {
 
@@ -22,8 +30,19 @@ class ActionBuildAll extends BaseAction {
 			if (!business.controllable(effectivePerson)) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-
-			wo.setValue(business.buildAllTable());
+			List<Application> apps = ThisApplication.context().applications().get(x_query_assemble_designer.class);
+			if (ListTools.isNotEmpty(apps)) {
+				apps.stream().forEach(o -> {
+					String url = o.getUrlJaxrsRoot() + "table/build?tt="+new Date().getTime();
+					logger.print("{} do dispatch build table request to : {}", effectivePerson.getDistinguishedName(), url);
+					try {
+						CipherConnectionAction.get(effectivePerson.getDebugger(), url);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				});
+			}
+			wo.setValue(true);
 
 			result.setData(wo);
 

+ 19 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/TableAction.java

@@ -53,12 +53,12 @@ public class TableAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动.", action = ActionBuildAll.class)
+	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动,支持集群环境.", action = ActionBuildAll.class)
 	@GET
 	@Path("build/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void buildAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+	public synchronized void buildAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<ActionBuildAll.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
@@ -70,6 +70,23 @@ public class TableAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动,仅对当前服务器.", action = ActionBuild.class)
+	@GET
+	@Path("build")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void build(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+		ActionResult<ActionBuild.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionBuild().execute(effectivePerson);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "根据标识获取表.", action = ActionGet.class)
 	@GET
 	@Path("{flag}")