mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-15 16:15:27 +00:00
ref[autoconfig]: move graalvm package
This commit is contained in:
1 parent
e70289b1e9
commit
407ca920d0
7 files changed
+153
-115
No files matched your search
@@ -12,37 +12,27 @@
|
|||||||
|
|
||||||
package com.zfoo.boot;
|
package com.zfoo.boot;
|
||||||
|
|
||||||
|
import com.zfoo.boot.graalvm.GraalvmOrmHints;
|
||||||
import com.zfoo.orm.OrmContext;
|
import com.zfoo.orm.OrmContext;
|
||||||
import com.zfoo.orm.accessor.MongodbAccessor;
|
import com.zfoo.orm.accessor.MongodbAccessor;
|
||||||
import com.zfoo.orm.anno.GraalvmNativeEntityCache;
|
|
||||||
import com.zfoo.orm.config.OrmConfig;
|
import com.zfoo.orm.config.OrmConfig;
|
||||||
import com.zfoo.orm.manager.OrmManager;
|
import com.zfoo.orm.manager.OrmManager;
|
||||||
import com.zfoo.orm.query.MongodbQuery;
|
import com.zfoo.orm.query.MongodbQuery;
|
||||||
import com.zfoo.protocol.util.ClassUtils;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
|
|
||||||
import org.springframework.aot.hint.RuntimeHints;
|
|
||||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.ImportRuntimeHints;
|
import org.springframework.context.annotation.ImportRuntimeHints;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author godotg
|
* @author godotg
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
*/
|
*/
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnBean(OrmConfig.class)
|
@ConditionalOnBean(OrmConfig.class)
|
||||||
@ImportRuntimeHints(OrmAutoConfiguration.GraalvmOrmHints.class)
|
@ImportRuntimeHints(GraalvmOrmHints.class)
|
||||||
public class OrmAutoConfiguration {
|
public class OrmAutoConfiguration {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(OrmAutoConfiguration.class);
|
|
||||||
|
|
||||||
// OrmConfig in the specific business
|
// OrmConfig in the specific business
|
||||||
// If the OrmConfig bean is not configured in the business, then the Orm automatic assembly here will not take effect.
|
// If the OrmConfig bean is not configured in the business, then the Orm automatic assembly here will not take effect.
|
||||||
@Bean
|
@Bean
|
||||||
@@ -72,43 +62,4 @@ public class OrmAutoConfiguration {
|
|||||||
return new OrmContext();
|
return new OrmContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Register runtime hints for the token library
|
|
||||||
public static class GraalvmOrmHints implements RuntimeHintsRegistrar {
|
|
||||||
|
|
||||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
|
||||||
logger.info("orm graalvm aot runtime hints register");
|
|
||||||
|
|
||||||
var classes = new HashSet<Class<?>>();
|
|
||||||
classes.add(OrmConfig.class);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// SSLMSA
|
|
||||||
classes.add(Class.forName("com.github.benmanes.caffeine.cache.SSLMSA"));
|
|
||||||
classes.add(Class.forName("com.github.benmanes.caffeine.cache.PSAMS"));
|
|
||||||
|
|
||||||
for (var className : ClassUtils.getAllClasses("")) {
|
|
||||||
try {
|
|
||||||
var clazz = Class.forName(className);
|
|
||||||
if (!clazz.isAnnotationPresent(GraalvmNativeEntityCache.class)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
classes.add(clazz);
|
|
||||||
classes.addAll(ClassUtils.relevantClass(clazz));
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var clazz : classes) {
|
|
||||||
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
|
||||||
logger.info("orm graalvm aot hints register serialization [{}]", clazz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -12,38 +12,25 @@
|
|||||||
|
|
||||||
package com.zfoo.boot;
|
package com.zfoo.boot;
|
||||||
|
|
||||||
import com.zfoo.protocol.util.ClassUtils;
|
import com.zfoo.boot.graalvm.GraalvmStorageHints;
|
||||||
import com.zfoo.protocol.util.StringUtils;
|
|
||||||
import com.zfoo.storage.StorageContext;
|
import com.zfoo.storage.StorageContext;
|
||||||
import com.zfoo.storage.anno.GraalvmNativeStorage;
|
|
||||||
import com.zfoo.storage.config.StorageConfig;
|
import com.zfoo.storage.config.StorageConfig;
|
||||||
import com.zfoo.storage.interpreter.data.StorageData;
|
|
||||||
import com.zfoo.storage.interpreter.data.StorageEnum;
|
|
||||||
import com.zfoo.storage.manager.StorageManager;
|
import com.zfoo.storage.manager.StorageManager;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
|
|
||||||
import org.springframework.aot.hint.RuntimeHints;
|
|
||||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.ImportRuntimeHints;
|
import org.springframework.context.annotation.ImportRuntimeHints;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author godotg
|
* @author godotg
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
*/
|
*/
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnBean(StorageConfig.class)
|
@ConditionalOnBean(StorageConfig.class)
|
||||||
@ImportRuntimeHints(StorageAutoConfiguration.GraalvmStorageHints.class)
|
@ImportRuntimeHints(GraalvmStorageHints.class)
|
||||||
public class StorageAutoConfiguration {
|
public class StorageAutoConfiguration {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(StorageAutoConfiguration.class);
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
@ConditionalOnBean(StorageConfig.class)
|
@ConditionalOnBean(StorageConfig.class)
|
||||||
@@ -59,47 +46,4 @@ public class StorageAutoConfiguration {
|
|||||||
return new StorageContext();
|
return new StorageContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Register runtime hints for the token library
|
|
||||||
public static class GraalvmStorageHints implements RuntimeHintsRegistrar {
|
|
||||||
|
|
||||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
|
||||||
logger.info("storage graalvm aot runtime hints register");
|
|
||||||
|
|
||||||
var classes = new HashSet<Class<?>>();
|
|
||||||
classes.add(StorageData.class);
|
|
||||||
classes.add(StorageConfig.class);
|
|
||||||
|
|
||||||
try {
|
|
||||||
for (var className : ClassUtils.getAllClasses("")) {
|
|
||||||
try {
|
|
||||||
var clazz = Class.forName(className);
|
|
||||||
if (!clazz.isAnnotationPresent(GraalvmNativeStorage.class)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
classes.add(clazz);
|
|
||||||
classes.addAll(ClassUtils.relevantClass(clazz));
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var clazz : classes) {
|
|
||||||
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
|
||||||
logger.info("storage graalvm aot hints register serialization [{}]", clazz);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var resource : StorageEnum.values()) {
|
|
||||||
var include = StringUtils.format("*.{}", resource.getType());
|
|
||||||
hints.resources().registerPattern(include);
|
|
||||||
logger.info("storage graalvm aot hints register resources [{}]", include);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 The zfoo Authors
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zfoo.boot.graalvm;
|
||||||
|
|
||||||
|
import com.zfoo.orm.anno.GraalvmNativeEntityCache;
|
||||||
|
import com.zfoo.orm.config.OrmConfig;
|
||||||
|
import com.zfoo.protocol.util.ClassUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
|
||||||
|
import org.springframework.aot.hint.RuntimeHints;
|
||||||
|
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register runtime hints for the token library
|
||||||
|
*
|
||||||
|
* @author godotg
|
||||||
|
*/
|
||||||
|
public class GraalvmOrmHints implements RuntimeHintsRegistrar {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(GraalvmOrmHints.class);
|
||||||
|
|
||||||
|
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||||
|
logger.info("orm graalvm aot runtime hints register");
|
||||||
|
|
||||||
|
var classes = new HashSet<Class<?>>();
|
||||||
|
classes.add(OrmConfig.class);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// SSLMSA
|
||||||
|
classes.add(Class.forName("com.github.benmanes.caffeine.cache.SSLMSA"));
|
||||||
|
classes.add(Class.forName("com.github.benmanes.caffeine.cache.PSAMS"));
|
||||||
|
|
||||||
|
for (var className : ClassUtils.getAllClasses("")) {
|
||||||
|
try {
|
||||||
|
var clazz = Class.forName(className);
|
||||||
|
if (!clazz.isAnnotationPresent(GraalvmNativeEntityCache.class)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
classes.add(clazz);
|
||||||
|
classes.addAll(ClassUtils.relevantClass(clazz));
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var clazz : classes) {
|
||||||
|
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
||||||
|
logger.info("orm graalvm aot hints register serialization [{}]", clazz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 The zfoo Authors
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zfoo.boot.graalvm;
|
||||||
|
|
||||||
|
import com.zfoo.protocol.util.ClassUtils;
|
||||||
|
import com.zfoo.protocol.util.StringUtils;
|
||||||
|
import com.zfoo.storage.anno.GraalvmNativeStorage;
|
||||||
|
import com.zfoo.storage.config.StorageConfig;
|
||||||
|
import com.zfoo.storage.interpreter.data.StorageData;
|
||||||
|
import com.zfoo.storage.interpreter.data.StorageEnum;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
|
||||||
|
import org.springframework.aot.hint.RuntimeHints;
|
||||||
|
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register runtime hints for the token library
|
||||||
|
*
|
||||||
|
* @author godotg
|
||||||
|
*/
|
||||||
|
public class GraalvmStorageHints implements RuntimeHintsRegistrar {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(GraalvmStorageHints.class);
|
||||||
|
|
||||||
|
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||||
|
logger.info("storage graalvm aot runtime hints register");
|
||||||
|
|
||||||
|
var classes = new HashSet<Class<?>>();
|
||||||
|
classes.add(StorageData.class);
|
||||||
|
classes.add(StorageConfig.class);
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var className : ClassUtils.getAllClasses("")) {
|
||||||
|
try {
|
||||||
|
var clazz = Class.forName(className);
|
||||||
|
if (!clazz.isAnnotationPresent(GraalvmNativeStorage.class)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
classes.add(clazz);
|
||||||
|
classes.addAll(ClassUtils.relevantClass(clazz));
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var clazz : classes) {
|
||||||
|
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
||||||
|
logger.info("storage graalvm aot hints register serialization [{}]", clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var resource : StorageEnum.values()) {
|
||||||
|
var include = StringUtils.format("*.{}", resource.getType());
|
||||||
|
hints.resources().registerPattern(include);
|
||||||
|
logger.info("storage graalvm aot hints register resources [{}]", include);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ import com.zfoo.protocol.exception.RunException;
|
|||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 类型固定的map,key为long,value为IPacket
|
* 类型固定的map,key为long,value为Object
|
||||||
* 其中long必须大于等于0,value可以为null
|
* 其中long必须大于等于0,value可以为null
|
||||||
*
|
*
|
||||||
* @author godotg
|
* @author godotg
|
||||||
|
|||||||
@@ -34,10 +34,7 @@ import com.zfoo.protocol.serializer.protobuf.GenerateProtobufUtils;
|
|||||||
import com.zfoo.protocol.serializer.python.GeneratePyUtils;
|
import com.zfoo.protocol.serializer.python.GeneratePyUtils;
|
||||||
import com.zfoo.protocol.serializer.reflect.*;
|
import com.zfoo.protocol.serializer.reflect.*;
|
||||||
import com.zfoo.protocol.serializer.typescript.GenerateTsUtils;
|
import com.zfoo.protocol.serializer.typescript.GenerateTsUtils;
|
||||||
import com.zfoo.protocol.util.AssertionUtils;
|
import com.zfoo.protocol.util.*;
|
||||||
import com.zfoo.protocol.util.ClassUtils;
|
|
||||||
import com.zfoo.protocol.util.ReflectionUtils;
|
|
||||||
import com.zfoo.protocol.util.StringUtils;
|
|
||||||
import com.zfoo.protocol.xml.XmlProtocols;
|
import com.zfoo.protocol.xml.XmlProtocols;
|
||||||
import javassist.CannotCompileException;
|
import javassist.CannotCompileException;
|
||||||
import javassist.NotFoundException;
|
import javassist.NotFoundException;
|
||||||
@@ -250,6 +247,9 @@ public class ProtocolAnalysis {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void enhanceProtocolRegistration(List<IProtocolRegistration> enhanceList) throws NoSuchMethodException, IllegalAccessException, InstantiationException, CannotCompileException, NotFoundException, InvocationTargetException, NoSuchFieldException {
|
private static void enhanceProtocolRegistration(List<IProtocolRegistration> enhanceList) throws NoSuchMethodException, IllegalAccessException, InstantiationException, CannotCompileException, NotFoundException, InvocationTargetException, NoSuchFieldException {
|
||||||
|
if (GraalVmUtils.isGraalVM()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 字节码增强
|
// 字节码增强
|
||||||
for (var registration : enhanceList) {
|
for (var registration : enhanceList) {
|
||||||
protocols[registration.protocolId()] = EnhanceUtils.createProtocolRegistration((ProtocolRegistration) registration);
|
protocols[registration.protocolId()] = EnhanceUtils.createProtocolRegistration((ProtocolRegistration) registration);
|
||||||
|
|||||||
-1
@@ -31,7 +31,6 @@ public class ObjectProtocolSerializer implements ISerializer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param buffer ByteBuf
|
* @param buffer ByteBuf
|
||||||
* @param object 必须继承IPacket接口
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void writeObject(ByteBuf buffer, Object object, IFieldRegistration fieldRegistration) {
|
public void writeObject(ByteBuf buffer, Object object, IFieldRegistration fieldRegistration) {
|
||||||
|
|||||||
Reference in new issue
Block a user