Skip to content

Commit 305a86a

Browse files
committed
HHH-18974 - Implement runtime intialization for the UuidVersion6/7Strategy.Holder classes
Signed-off-by: Jan Schatteman <[email protected]>
1 parent a35327f commit 305a86a

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

hibernate-core/src/main/java/org/hibernate/id/uuid/UuidVersion6Strategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
public class UuidVersion6Strategy implements UUIDGenerationStrategy, UuidValueGenerator {
3535
public static final UuidVersion6Strategy INSTANCE = new UuidVersion6Strategy();
3636

37-
private static class Holder {
37+
public static class Holder {
3838
static final SecureRandom numberGenerator = new SecureRandom();
3939
static final long EPOCH_1582_SECONDS = LocalDate.of( 1582, 10, 15 )
4040
.atStartOfDay( ZoneId.of( "UTC" ) )

hibernate-core/src/main/java/org/hibernate/id/uuid/UuidVersion7Strategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class UuidVersion7Strategy implements UUIDGenerationStrategy, UuidValueGe
3939

4040
public static final UuidVersion7Strategy INSTANCE = new UuidVersion7Strategy();
4141

42-
private static class Holder {
42+
public static class Holder {
4343
private static final SecureRandom numberGenerator = new SecureRandom();
4444

4545
}

hibernate-graalvm/src/main/java/org/hibernate/graalvm/internal/GraalVMStaticFeature.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.lang.reflect.Executable;
99
import java.util.ArrayList;
1010

11+
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
1112
import org.hibernate.internal.util.ReflectHelper;
1213

1314
import org.graalvm.nativeimage.hosted.Feature;
@@ -36,6 +37,7 @@ public class GraalVMStaticFeature implements Feature {
3637
public void beforeAnalysis(Feature.BeforeAnalysisAccess before) {
3738
final Class<?>[] needsHavingSimpleConstructors = StaticClassLists.typesNeedingDefaultConstructorAccessible();
3839
final Class<?>[] needingAllConstructorsAccessible = StaticClassLists.typesNeedingAllConstructorsAccessible();
40+
final Class<?>[] typesNeedingRuntimeInitialization = StaticClassLists.typesNeedingRuntimeInitialization();
3941
//Size formula is just a reasonable guess:
4042
ArrayList<Executable> executables = new ArrayList<>( needsHavingSimpleConstructors.length + needingAllConstructorsAccessible.length * 3 );
4143
for ( Class<?> c : needsHavingSimpleConstructors ) {
@@ -50,6 +52,8 @@ public void beforeAnalysis(Feature.BeforeAnalysisAccess before) {
5052
RuntimeReflection.register( needingAllConstructorsAccessible );
5153
RuntimeReflection.register( StaticClassLists.typesNeedingArrayCopy() );
5254
RuntimeReflection.register( executables.toArray(new Executable[0]) );
55+
56+
RuntimeClassInitialization.initializeAtRunTime( typesNeedingRuntimeInitialization );
5357
}
5458

5559
@Override

hibernate-graalvm/src/main/java/org/hibernate/graalvm/internal/StaticClassLists.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,10 @@ public static Class[] typesNeedingArrayCopy() {
7676
};
7777
}
7878

79+
public static Class<?>[] typesNeedingRuntimeInitialization() {
80+
return new Class[] {
81+
org.hibernate.id.uuid.UuidVersion6Strategy.Holder.class,
82+
org.hibernate.id.uuid.UuidVersion7Strategy.Holder.class,
83+
};
84+
}
7985
}

0 commit comments

Comments
 (0)