Open simonhir opened 3 months ago
To solve this i already collected metadata for the above mentioned application as described here: https://github.com/oracle/graalvm-reachability-metadata/blob/master/docs/CollectingMetadata.md
Then filtered the metadata for org.springframework.session.**
which led to following raw metadata:
filtered-metadata.zip
After that i took the filtered metadata, removed all already by spring-session defined hints and migrated them to following serialization-config.json
which got the application running as intended.
There are also some hints missing for hazelcast itself see https://github.com/oracle/graalvm-reachability-metadata/issues/515.
The question for me now is whether I should simply transfer the above JSON into the spring-session aot hints? If yes i would be happy to create a mr for it if that's the correct way to fix the problem.
Hi @simonhir, thanks for the report.
Yes, a pull request would be great. However, I'd like to see a minimal, reproducible sample because I couldn't run yours. Ideally, the sample should have the Maven/Gradle Wrapper as well.
Can you provide which version of GraalVM you are using?
Describe the bug
We currently try to build and run our internal spring cloud gateway as native image which uses spring-session-hazelcast. When running the native image the serialization within ReactiveMapSessionRepository fails because some aot hints are missing.
To Reproduce
mvn clean spring-boot:build-image -Pnative -Dspring.profiles.active=local
.Example exception
``` com.oracle.svm.core.jdk.UnsupportedFeatureError: SerializationConstructorAccessor class not found for declaringClass: com.nimbusds.oauth2.sdk.util.OrderedJSONObject (targetConstructorClass: java.util.AbstractMap). Usually adding com.nimbusds.oauth2.sdk.util.OrderedJSONObject to serialization-config.json fixes the problem. 2024-07-18T07:27:46.559369900Z at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:96) 2024-07-18T07:27:46.559372700Z at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.serialize.SerializationSupport.getSerializationConstructorAccessor(SerializationSupport.java:143) 2024-07-18T07:27:46.559375200Z at java.base@17.0.11/jdk.internal.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:61) 2024-07-18T07:27:46.559377500Z at java.base@17.0.11/jdk.internal.reflect.ReflectionFactory.generateConstructor(ReflectionFactory.java:463) 2024-07-18T07:27:46.559379700Z at java.base@17.0.11/jdk.internal.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:455) 2024-07-18T07:27:46.559382300Z at java.base@17.0.11/java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1443) 2024-07-18T07:27:46.559384600Z at java.base@17.0.11/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:412) 2024-07-18T07:27:46.559386800Z at java.base@17.0.11/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:384) 2024-07-18T07:27:46.559389300Z at java.base@17.0.11/java.security.AccessController.executePrivileged(AccessController.java:173) 2024-07-18T07:27:46.559400300Z at java.base@17.0.11/java.security.AccessController.doPrivileged(AccessController.java:318) 2024-07-18T07:27:46.559402800Z at java.base@17.0.11/java.io.ObjectStreamClass.Expected behavior
Application runs as native image without any problems.
Sample
https://github.com/it-at-m/refarch/tree/main/refarch-gateway Spring and spring-session version: 3.3.1 Hazlecast-spring version: 5.4.0 Custom spring session config: https://github.com/it-at-m/refarch/blob/main/refarch-gateway/src/main/java/de.muenchen.oss.refarch.gateway/configuration/WebSessionConfiguration.java