diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java index 3789f932..df1339f5 100644 --- a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java +++ b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmOrmHints.java @@ -15,13 +15,16 @@ package com.zfoo.boot.graalvm; import com.zfoo.orm.anno.GraalvmNativeEntityCache; import com.zfoo.orm.config.OrmConfig; import com.zfoo.protocol.util.ClassUtils; +import com.zfoo.storage.anno.GraalvmNativeStorage; 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.ArrayList; import java.util.HashSet; +import java.util.List; /** * Register runtime hints for the token library @@ -38,28 +41,14 @@ public class GraalvmOrmHints implements RuntimeHintsRegistrar { public void registerHints(RuntimeHints hints, ClassLoader classLoader) { logger.info("orm graalvm aot runtime hints register"); - var classes = new HashSet>(); + var classes = new ArrayList>(); classes.add(OrmConfig.class); + // SSLMSA + classes.add(ClassUtils.forName("com.github.benmanes.caffeine.cache.SSLMSA")); + classes.add(ClassUtils.forName("com.github.benmanes.caffeine.cache.PSAMS")); - 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); - } + var filterClasses = HintUtils.filterAllClass(clazz -> clazz.isAnnotationPresent(GraalvmNativeEntityCache.class)); + classes.addAll(filterClasses); for (var clazz : classes) { this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz); diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java index 28cac56f..cfbcd022 100644 --- a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java +++ b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmStorageHints.java @@ -12,7 +12,6 @@ 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; @@ -25,7 +24,6 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import java.util.HashSet; -import java.util.function.Predicate; /** * Register runtime hints for the token library @@ -49,7 +47,7 @@ public class GraalvmStorageHints implements RuntimeHintsRegistrar { var filterClasses = HintUtils.filterAllClass(clazz -> clazz.isAnnotationPresent(GraalvmNativeStorage.class)); classes.addAll(filterClasses); - HintUtils.registerRelevantClass(hints, classes); + HintUtils.registerRelevantClasses(hints, classes); for (var resource : StorageEnum.values()) { var include = StringUtils.format("*.{}", resource.getType()); diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/HintUtils.java b/boot/src/main/java/com/zfoo/boot/graalvm/HintUtils.java index b04e3ef4..bd0ebee2 100644 --- a/boot/src/main/java/com/zfoo/boot/graalvm/HintUtils.java +++ b/boot/src/main/java/com/zfoo/boot/graalvm/HintUtils.java @@ -19,9 +19,9 @@ import org.springframework.aot.hint.RuntimeHints; import java.io.IOException; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.function.Predicate; -import java.util.stream.Collectors; import static org.springframework.aot.hint.MemberCategory.*; @@ -60,14 +60,18 @@ public abstract class HintUtils { } } - public static void registerRelevantClass(RuntimeHints hints, Set> classes) { + public static void registerRelevantClasses(RuntimeHints hints, Set> classes) { var relevantClasses = classes.stream() .map(it -> ClassUtils.relevantClass(it)) .flatMap(it -> it.stream()) .distinct() .toList(); - for (var clazz : relevantClasses) { + registerClasses(hints, relevantClasses); + } + + public static void registerClasses(RuntimeHints hints, List> classes) { + for (var clazz : classes) { hints.reflection().registerType(clazz, DECLARED_FIELDS, INVOKE_PUBLIC_CONSTRUCTORS, INVOKE_PUBLIC_METHODS); logger.info("zfoo for graalvm aot hints register [{}]", clazz); }