From 407ca920d04cd0b7d61393a6a360ff3af07ced2c Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 3 Sep 2023 19:08:38 +0800 Subject: [PATCH] ref[autoconfig]: move graalvm package --- .../com/zfoo/boot/OrmAutoConfiguration.java | 53 +------------ .../zfoo/boot/StorageAutoConfiguration.java | 60 +-------------- .../zfoo/boot/graalvm/GraalvmOrmHints.java | 69 +++++++++++++++++ .../boot/graalvm/GraalvmStorageHints.java | 75 +++++++++++++++++++ .../zfoo/protocol/collection/lpmap/LpMap.java | 2 +- .../registration/ProtocolAnalysis.java | 8 +- .../reflect/ObjectProtocolSerializer.java | 1 - 7 files changed, 153 insertions(+), 115 deletions(-) create mode 100644 boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java create mode 100644 boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java diff --git a/boot/src/main/java/com/zfoo/boot/OrmAutoConfiguration.java b/boot/src/main/java/com/zfoo/boot/OrmAutoConfiguration.java index 5a71907f..06653c79 100644 --- a/boot/src/main/java/com/zfoo/boot/OrmAutoConfiguration.java +++ b/boot/src/main/java/com/zfoo/boot/OrmAutoConfiguration.java @@ -12,37 +12,27 @@ package com.zfoo.boot; +import com.zfoo.boot.graalvm.GraalvmOrmHints; import com.zfoo.orm.OrmContext; import com.zfoo.orm.accessor.MongodbAccessor; -import com.zfoo.orm.anno.GraalvmNativeEntityCache; import com.zfoo.orm.config.OrmConfig; import com.zfoo.orm.manager.OrmManager; 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.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportRuntimeHints; -import java.util.HashSet; - /** * @author godotg * @version 3.0 */ @Configuration(proxyBeanMethods = false) @ConditionalOnBean(OrmConfig.class) -@ImportRuntimeHints(OrmAutoConfiguration.GraalvmOrmHints.class) +@ImportRuntimeHints(GraalvmOrmHints.class) public class OrmAutoConfiguration { - private static final Logger logger = LoggerFactory.getLogger(OrmAutoConfiguration.class); - // 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. @Bean @@ -72,43 +62,4 @@ public class OrmAutoConfiguration { 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>(); - 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); - } - } - } } diff --git a/boot/src/main/java/com/zfoo/boot/StorageAutoConfiguration.java b/boot/src/main/java/com/zfoo/boot/StorageAutoConfiguration.java index bb7baba5..e5d59896 100644 --- a/boot/src/main/java/com/zfoo/boot/StorageAutoConfiguration.java +++ b/boot/src/main/java/com/zfoo/boot/StorageAutoConfiguration.java @@ -12,38 +12,25 @@ package com.zfoo.boot; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.boot.graalvm.GraalvmStorageHints; import com.zfoo.storage.StorageContext; -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 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.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportRuntimeHints; -import java.util.HashSet; - /** * @author godotg * @version 3.0 */ @Configuration(proxyBeanMethods = false) @ConditionalOnBean(StorageConfig.class) -@ImportRuntimeHints(StorageAutoConfiguration.GraalvmStorageHints.class) +@ImportRuntimeHints(GraalvmStorageHints.class) public class StorageAutoConfiguration { - private static final Logger logger = LoggerFactory.getLogger(StorageAutoConfiguration.class); - @Bean @ConditionalOnMissingBean @ConditionalOnBean(StorageConfig.class) @@ -59,47 +46,4 @@ public class StorageAutoConfiguration { 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>(); - 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); - } - } - } - } diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java new file mode 100644 index 00000000..3789f932 --- /dev/null +++ b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java @@ -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>(); + 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); + } + } +} \ No newline at end of file diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java new file mode 100644 index 00000000..fc1fe4d6 --- /dev/null +++ b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java @@ -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>(); + 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); + } + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/lpmap/LpMap.java b/protocol/src/main/java/com/zfoo/protocol/collection/lpmap/LpMap.java index 8195b3b2..18ec43e8 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/lpmap/LpMap.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/lpmap/LpMap.java @@ -17,7 +17,7 @@ import com.zfoo.protocol.exception.RunException; import java.util.function.BiConsumer; /** - * 类型固定的map,key为long,value为IPacket + * 类型固定的map,key为long,value为Object * 其中long必须大于等于0,value可以为null * * @author godotg diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java index a3392e7c..de1be67f 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java @@ -34,10 +34,7 @@ import com.zfoo.protocol.serializer.protobuf.GenerateProtobufUtils; import com.zfoo.protocol.serializer.python.GeneratePyUtils; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.serializer.typescript.GenerateTsUtils; -import com.zfoo.protocol.util.AssertionUtils; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.ReflectionUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import com.zfoo.protocol.xml.XmlProtocols; import javassist.CannotCompileException; import javassist.NotFoundException; @@ -250,6 +247,9 @@ public class ProtocolAnalysis { } private static void enhanceProtocolRegistration(List enhanceList) throws NoSuchMethodException, IllegalAccessException, InstantiationException, CannotCompileException, NotFoundException, InvocationTargetException, NoSuchFieldException { + if (GraalVmUtils.isGraalVM()) { + return; + } // 字节码增强 for (var registration : enhanceList) { protocols[registration.protocolId()] = EnhanceUtils.createProtocolRegistration((ProtocolRegistration) registration); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ObjectProtocolSerializer.java index 505e46e2..54aaf372 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ObjectProtocolSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ObjectProtocolSerializer.java @@ -31,7 +31,6 @@ public class ObjectProtocolSerializer implements ISerializer { /** * @param buffer ByteBuf - * @param object 必须继承IPacket接口 */ @Override public void writeObject(ByteBuf buffer, Object object, IFieldRegistration fieldRegistration) {