Commit cde79a85 by s_guodong

初始化的问题

parent 5ba7c945
......@@ -31,19 +31,22 @@ build/
### VS Code ###
.vscode/
/gjjs-business/src/main/java/com/ceb/gjjs/mda/bo/
/gjjs-business/src/main/java/com/ceb/gjjs/mda/dao/
/gjjs-business/src/main/java/com/ceb/gjjs/mda/emitter/
/gjjs-business/src/main/java/com/ceb/gjjs/mda/global/
/gjjs-business/src/main/java/com/ceb/gjjs/mda/manager/
/gjjs-business/src/main/resources/codeTable
/gjjs-business/src/main/resources/defaultRule
/gjjs-business/src/main/resources/i18n
/gjjs-business/src/main/resources/META-INF
/gjjs-business/src/main/resources/moduleInfo
/gjjs-business/src/test/java/com/ceb/gjjs/mda/junitTest/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/bo/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/dao/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/manager/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/manager/module/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/resource/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/service/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/service/impl/
/gjjs-bd-business/src/main/java/com/ceb/gjjs/mda/vo/
/gjjs-bd-business/src/main/resources/codeTable
/gjjs-bd-business/src/main/resources/defaultRule
/gjjs-bd-business/src/main/resources/i18n
/gjjs-bd-business/src/main/resources/META-INF
/gjjs-bd-business/src/main/resources/moduleInfo
/gjjs-bd-business/src/test/java/com/ceb/gjjs/mda/junitTest/
log/
logs/
......
package com.ceb.gjjs.mda.resource.base;
import com.brilliance.mda.runtime.mda.driver.compile.processor.ModuleAnnotationProcess;
import com.brilliance.mda.runtime.request.BaseVO;
import com.brilliance.mda.runtime.response.ResponseSet;
import com.brilliance.mda.support.service.ICommonService;
......@@ -8,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import java.util.Set;
/**
* @author wangguangchao
......@@ -20,6 +22,7 @@ public abstract class AbstractCommonResource<V extends BaseVO> {
@Path("/init")
@POST
public ResponseSet<V> init(@RequestBody V req) {
req.setNeedInit(true);
return getCommonService().init(req);
}
......@@ -52,6 +55,7 @@ public abstract class AbstractCommonResource<V extends BaseVO> {
@POST
public ResponseSet<V> executeCheck(@PathParam("rule") String rule, @RequestBody V req) {
String[] ruleArr = rule.split(",");
setInitFlag(req, ModuleAnnotationProcess.needInitCheck, ruleArr);
return getCommonService().executeCheck(req, ruleArr);
}
......@@ -59,6 +63,7 @@ public abstract class AbstractCommonResource<V extends BaseVO> {
@POST
public ResponseSet<V> executeRule(@PathParam("rule") String rule, @RequestBody V req) {
String[] ruleArr = rule.split(",");
setInitFlag(req, ModuleAnnotationProcess.needInitRule, ruleArr);
ResponseSet<V> res = getCommonService().executeRule(req, ruleArr);
return res;
}
......@@ -87,4 +92,18 @@ public abstract class AbstractCommonResource<V extends BaseVO> {
public ResponseSet<V> executeDocpanDetail(@RequestBody V req) {
return getCommonService().executeDocpanDetail(req);
}
private void setInitFlag(V req, Set<String> needInitSet, String[] ruleArr) {
Class<? extends AbstractCommonResource> aClass = this.getClass();
Path annotation = aClass.getAnnotation(Path.class);
String path = annotation.value();
for (String rule : ruleArr) {
if (needInitSet.contains(path + "@" + rule)) {
req.setNeedInit(true);
return;
}
}
}
}
package com.brilliance.mda.runtime.annotation;
import java.lang.annotation.*;
/**
* 是否需要执行初始化方法
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NeedInit {
boolean value() default true;
}
package com.brilliance.mda.runtime.mda.driver;
import com.brilliance.mda.runtime.annotation.Check;
import com.brilliance.mda.runtime.annotation.NeedInit;
import com.brilliance.mda.runtime.annotation.Rule;
import com.brilliance.mda.runtime.mda.driver.compile.processor.ModuleAnnotationProcess;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
......@@ -18,6 +23,7 @@ import org.springframework.stereotype.Component;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
......@@ -93,15 +99,41 @@ public class MdaScanner implements ResourceLoaderAware, BeanDefinitionRegistryPo
for (Class<? extends Annotation> annotationClass : annotationClasses) {
if (clazz.isAnnotationPresent(annotationClass)) {
Set<Class<?>> set = map.computeIfAbsent(annotationClass, k -> new LinkedHashSet<>());
set.add(Class.forName(className));
set.add(clazz);
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
if (method.isAnnotationPresent(NeedInit.class)) {
NeedInit needInit = method.getAnnotation(NeedInit.class);
boolean need = needInit.value();
if (need) {
if (method.isAnnotationPresent(Rule.class)) {
Rule rule = method.getAnnotation(Rule.class);
path = rule.target();
if (!StringUtils.isBlank(path)) {
Set<String> needInitRule = ModuleAnnotationProcess.needInitRule;
needInitRule.add(clazz.getSimpleName().toLowerCase() + "@" + path);
}
} else if (method.isAnnotationPresent(Check.class)) {
Check check = method.getAnnotation(Check.class);
path = check.target();
if (!StringUtils.isBlank(path)) {
Set<String> needInitCheck = ModuleAnnotationProcess.needInitCheck;
needInitCheck.add(clazz.getSimpleName().toLowerCase() + "@" + path);
}
}
}
}
}
}
}
}
return map;
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws
BeansException {
}
}
......@@ -28,7 +28,7 @@ public class EmitterFactory implements InitializingBean {
@Autowired
private MdaScanner scanner;
public void buildEmitter(String... transPack){
public void buildEmitter(String... transPack) {
try {
log.debug("prepare to walk transaction");
Map<Class<?>, Set<Class<?>>> map = new HashMap<>();
......@@ -46,13 +46,15 @@ public class EmitterFactory implements InitializingBean {
});
Set<Class<?>> transSet = map.get(Transaction.class);
transSet.forEach(item->new TransAnnotationProcessor().buildTransEmitter(item,scanner.getBeanDefinitionRegistry()));
transSet.forEach(item -> new TransAnnotationProcessor().buildTransEmitter(item, scanner.getBeanDefinitionRegistry()));
ModuleAnnotationProcess.reduceCache();
TransAnnotationProcessor.getProcessQueue().clear();
log.debug("walk transaction finished");
//log.info("注册TableMeta {}个", TableMetaManager.getTableMetaCount());
log.info("注册ModuleInfo {}个", ModuleInfoManager.getModuleInfoCount());
log.info("注册Transaction {}个", transSet.size());
log.info("需要初始化的check方法有:{}", ModuleAnnotationProcess.needInitCheck.toString());
log.info("需要初始化的rule方法有:{}", ModuleAnnotationProcess.needInitRule.toString());
} catch (Exception e) {
log.error("动态Emitter扫描包发生错误", e);
}
......
package com.brilliance.mda.runtime.mda.driver.compile.processor;
import com.brilliance.mda.runtime.annotation.Check;
import com.brilliance.mda.runtime.annotation.Default;
import com.brilliance.mda.runtime.annotation.Init;
import com.brilliance.mda.runtime.annotation.Rule;
import com.brilliance.mda.runtime.annotation.*;
import com.brilliance.mda.runtime.mda.FieldHolder;
import com.brilliance.mda.runtime.mda.IModule;
import com.brilliance.mda.runtime.mda.IModuleList;
......@@ -26,6 +23,9 @@ public class ModuleAnnotationProcess {
public static Map<String, ModuleRuleContext> cache = new HashMap<>();
public static Set<String> needInitRule = new HashSet<>();
public static Set<String> needInitCheck = new HashSet<>();
private ModuleRuleContext moduleRuleContext;
private Class<? extends IModule> moduleClass;
private IModule instatnce;
......
......@@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
public class BaseVO {
protected boolean needInit;
protected String pageId;
protected Map<String, Object> params;
......@@ -52,4 +53,12 @@ public class BaseVO {
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public boolean isNeedInit() {
return needInit;
}
public void setNeedInit(boolean needInit) {
this.needInit = needInit;
}
}
......@@ -185,8 +185,8 @@ public abstract class AbstractRouteService<V extends BaseVO> {
}
public boolean isStdErrorNo(String errorNo) {
//if (errorNo != null && errorNo.matches("E\\d{4}")) {
if (errorNo != null&&!errorNo.equals("")) {
//if (errorNo != null && errorNo.matches("E\\d{4}")) {
if (errorNo != null && !errorNo.equals("")) {
return true;
}
return false;
......@@ -325,6 +325,11 @@ public abstract class AbstractRouteService<V extends BaseVO> {
* 初始化步骤
*/
public void initTrans(V req) {
if (!req.isNeedInit()) {
logger.info("不需要初始化");
return;
}
logger.info("开始初始化...");
StopWatch watch = new StopWatch("initTrans");
IContext ctx = MdaEnv.getContext();
IRuleEmitter emitter = getEmitter();
......@@ -453,27 +458,11 @@ public abstract class AbstractRouteService<V extends BaseVO> {
public boolean enterTransaction(V req) {
if (req != null) {
String pageId = req.getPageId();
ICache<String, IContext> cache = MdaEnv.getBean(ICache.CTX_CACHE, ICache.class);
IContext ctx = cache.get(pageId);
if (ctx == null) {
Map<String, Object> params = req.getParams();
chain(params);
initTrans(req);
ctx = MdaEnv.getContext();
ctx.storeData(IContext.DISPLAY_KEY, req);
// String key = cache.store(ctx);
req.setPageId(cache.generateKey());
} else {
// wgc
//ctx.clearData();
ctx.resetParams(req.getParams());
ctx.setVo(req);
ctx.getFieldErrors().clear();
ctx.storeData(IContext.DISPLAY_KEY, req);
MdaEnv.setContext(ctx);
}
Map<String, Object> params = req.getParams();
chain(params);
initTrans(req);
IContext ctx = MdaEnv.getContext();
ctx.storeData(IContext.DISPLAY_KEY, req);
}
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment