原生编译:修复首页报表数据一直为空

This commit is contained in:
songyinyin
2023-10-22 23:42:15 +08:00
parent 3bbc9a1193
commit d06af96102
3 changed files with 17 additions and 92 deletions
@@ -1,12 +1,8 @@
package org.dromara.neutrinoproxy.server.base;
import org.apache.ibatis.io.DefaultVFS;
import org.apache.ibatis.io.JBoss6VFS;
import org.apache.ibatis.solon.MybatisAdapter;
import org.apache.ibatis.solon.integration.MybatisAdapterDefault;
import org.apache.ibatis.solon.integration.MybatisAdapterManager;
import org.dromara.neutrinoproxy.server.base.proxy.ProxyConfig;
import org.dromara.neutrinoproxy.server.base.rest.ResponseBody;
import org.dromara.neutrinoproxy.server.controller.res.report.HomeDataView;
import org.dromara.neutrinoproxy.server.dal.ClientConnectRecordMapper;
import org.dromara.neutrinoproxy.server.dal.FlowReportDayMapper;
import org.dromara.neutrinoproxy.server.dal.FlowReportHourMapper;
@@ -30,22 +26,11 @@ import org.dromara.neutrinoproxy.server.service.ReportService;
import org.dromara.neutrinoproxy.server.service.UserLoginRecordService;
import org.dromara.neutrinoproxy.server.service.UserService;
import org.dromara.solonplugins.job.JobBean;
import org.noear.solon.Solon;
import org.noear.solon.Utils;
import org.noear.solon.annotation.Component;
import org.noear.solon.aot.RuntimeNativeMetadata;
import org.noear.solon.aot.RuntimeNativeRegistrar;
import org.noear.solon.aot.hint.MemberCategory;
import org.noear.solon.core.AppContext;
import org.noear.solon.core.util.GenericUtil;
import org.noear.solon.core.util.ResourceUtil;
import org.noear.solon.core.wrap.MethodWrap;
import org.noear.solon.core.wrap.ParamWrap;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Map;
/**
* native 打包
@@ -84,30 +69,14 @@ public class NeutrinoServerRuntimeNativeRegistrar implements RuntimeNativeRegist
metadata.registerLambdaSerialization(UserMapper.class);
metadata.registerLambdaSerialization(UserTokenMapper.class);
// mybatis
metadata.registerReflection(JBoss6VFS.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
metadata.registerReflection(DefaultVFS.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
Collection<Class<?>> classes = ResourceUtil.scanClasses("org.dromara.neutrinoproxy.server.dal.entity.*");
for (Class<?> clazz : classes) {
metadata.registerReflection(clazz, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
metadata.registerDefaultConstructor(clazz);
}
for (String name : MybatisAdapterManager.getAll().keySet()) {
//用 name 找,避免出现重复的(默认的name=null)
if (Utils.isNotEmpty(name)) {
MybatisAdapter adapter = MybatisAdapterManager.getOnly(name);
if (adapter instanceof MybatisAdapterDefault) {
registerMybatisAdapter(context, metadata, (MybatisAdapterDefault) adapter);
}
}
}
Solon.context().methodForeach(method -> {
processMethod(metadata, method);
});
metadata.registerReflection(HomeDataView.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.Last7dFlow.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.License.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.PortMapping.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.Series.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.SingleDayFlow.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.TodayFlow.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(HomeDataView.TotalFlow.class, MemberCategory.DECLARED_FIELDS);
metadata.registerReflection(ResponseBody.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS);
metadata.registerSerialization(ResponseBody.class);
@@ -122,52 +91,4 @@ public class NeutrinoServerRuntimeNativeRegistrar implements RuntimeNativeRegist
}
/**
* 注册 mybatis 的 mapper 用到的 DO
*/
protected void registerMybatisAdapter(AppContext context, RuntimeNativeMetadata metadata, MybatisAdapterDefault bean) {
//注册 mapper 代理
for (Class<?> clz : bean.getConfiguration().getMapperRegistry().getMappers()) {
metadata.registerJdkProxy(clz);
metadata.registerReflection(clz, MemberCategory.INTROSPECT_PUBLIC_METHODS);
Method[] declaredMethods = clz.getDeclaredMethods();
for (Method method : declaredMethods) {
MethodWrap methodWrap = new MethodWrap(context, method);
processMethod(metadata, methodWrap);
}
}
}
/**
* 注册方法,包括参数的类型、泛型和返回值类型、泛型
*/
private void processMethod(RuntimeNativeMetadata metadata, MethodWrap method) {
ParamWrap[] paramWraps = method.getParamWraps();
for (ParamWrap paramWrap : paramWraps) {
Class<?> paramType = paramWrap.getType();
if (!paramType.getName().startsWith("java.")) {
metadata.registerReflection(paramType, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS);
}
Type genericType = paramWrap.getGenericType();
processGenericType(metadata, genericType);
}
Class<?> returnType = method.getReturnType();
if (!returnType.getName().startsWith("java.")) {
metadata.registerReflection(returnType, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS);
}
Type genericReturnType = method.getGenericReturnType();
processGenericType(metadata, genericReturnType);
}
private void processGenericType(RuntimeNativeMetadata metadata, Type genericType) {
Map<String, Type> genericInfo = GenericUtil.getGenericInfo(genericType);
for (Map.Entry<String, Type> entry : genericInfo.entrySet()) {
if (!entry.getValue().getTypeName().startsWith("java.")) {
metadata.registerReflection(entry.getValue().getTypeName(), MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS);
}
}
}
}
@@ -18,6 +18,7 @@ import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Inject;
import org.noear.solon.core.event.AppLoadEndEvent;
import org.noear.solon.core.event.EventListener;
import org.noear.solon.core.runtime.NativeDetector;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
@@ -42,8 +43,11 @@ public class ProxyTunnelServer implements EventListener<AppLoadEndEvent> {
private NioEventLoopGroup serverWorkerGroup;
@Override
public void onEvent(AppLoadEndEvent appLoadEndEvent) throws Throwable {
startProxyServer();
startProxyServerForSSL();
// aot 阶段,不启动代理服务
if (NativeDetector.isNotAotRuntime()) {
startProxyServer();
startProxyServerForSSL();
}
}
/**
* 启动代理服务
+2 -2
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>2.5.10</version>
<version>2.5.11-SNAPSHOT</version>
<relativePath />
</parent>
@@ -28,7 +28,7 @@
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<revision>1.1-SNAPSHOT</revision>
<native.version>0.9.27</native.version>
<native.version>0.9.28</native.version>
<java.version>17</java.version>
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>