From fe859ab5c46aba671940d8f7a29340127aea8d00 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 13 Jun 2023 22:40:27 +0200 Subject: [PATCH] spring native hints --- pom.xml | 7 ++++ .../operator/SpringNativeConfiguration.java | 37 +++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1cbbdfa..3d39a82 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,13 @@ <!-- <groupId>org.apache.logging.log4j</groupId>--> <!-- <artifactId>log4j-core</artifactId>--> <!-- </dependency>--> +<!-- https://mvnrepository.com/artifact/org.reflections/reflections --> +<dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + <version>0.10.2</version> +</dependency> + diff --git a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java index a2e3fa3..16987e8 100644 --- a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java +++ b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java @@ -1,22 +1,53 @@ package de.ozgcloud.operator; +import java.util.HashSet; +import java.util.Objects; + +import org.reflections.Reflections; +import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportRuntimeHints; -import io.fabric8.kubernetes.client.impl.KubernetesClientImpl; +import io.fabric8.kubernetes.api.model.KubernetesResource; +import io.fabric8.kubernetes.api.model.NamedCluster; +import lombok.extern.slf4j.Slf4j; @Configuration @ImportRuntimeHints(SpringNativeConfiguration.KuberenetesCLientImplHints.class) +@Slf4j public class SpringNativeConfiguration { static class KuberenetesCLientImplHints implements RuntimeHintsRegistrar { + private final Class<?> clazz = NamedCluster.class; + private final Reflections reflections = new Reflections(clazz.getPackageName(), clazz); + @Override public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - hints.reflection() - .registerType(KubernetesClientImpl.class); + // https://github.com/kubernetes-native-java/fabric8-spring-native/ + var subtypesOfKubernetesResource = reflections.getSubTypesOf(KubernetesResource.class); + + var combined = new HashSet<Class<?>>(); + combined.addAll(subtypesOfKubernetesResource); + combined.add(io.fabric8.kubernetes.internal.KubernetesDeserializer.class); + combined.add(io.fabric8.kubernetes.client.impl.KubernetesClientImpl.class); + + combined + .stream() + .filter(Objects::nonNull) + .forEach(c -> { + if (log.isDebugEnabled()) { + log.debug("trying to register " + c.getName() + " for reflection"); + } + hints.reflection().registerType(c, MemberCategory.values()); + +// registry.reflection().forType(c).withAccess(TypeAccess.values()).build(); + }); +// hints.reflection().registerType(clazz, null) +// .registerType(KubernetesClientImpl.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); + } } } -- GitLab