diff --git a/CHANGELOG.md b/CHANGELOG.md index 71cae8b0f61..6c384783a58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Always send memory stats for transactions ([#2936](https://github.com/getsentry/sentry-java/pull/2936)) - This makes it possible to query transactions by the `device.class` tag on Sentry +- Add `sentry.enable-aot-compatibility` property to SpringBoot Jakarta `SentryAutoConfiguration` to enable building for GraalVM ([#2915](https://github.com/getsentry/sentry-java/pull/2915)) ### Dependencies diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/resources/application.properties b/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/resources/application.properties index 8151eacc6cf..37c9f988fe5 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/resources/application.properties +++ b/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/resources/application.properties @@ -13,6 +13,11 @@ sentry.enable-tracing=true sentry.debug=true in-app-includes="io.sentry.samples" +# Uncomment and set to true to enable aot compatibility +# This flag disables all AOP related features (i.e. @SentryTransaction, @SentrySpan) +# to successfully compile to GraalVM +# sentry.enable-aot-compatibility=false + # Database configuration spring.datasource.url=jdbc:p6spy:hsqldb:mem:testdb spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver diff --git a/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api b/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api index 49141a82bb9..8611bbf0a2d 100644 --- a/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api +++ b/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api @@ -24,7 +24,9 @@ public class io/sentry/spring/boot/jakarta/SentryProperties : io/sentry/SentryOp public fun getLogging ()Lio/sentry/spring/boot/jakarta/SentryProperties$Logging; public fun getReactive ()Lio/sentry/spring/boot/jakarta/SentryProperties$Reactive; public fun getUserFilterOrder ()Ljava/lang/Integer; + public fun isEnableAotCompatibility ()Z public fun isUseGitCommitIdAsRelease ()Z + public fun setEnableAotCompatibility (Z)V public fun setExceptionResolverOrder (I)V public fun setLogging (Lio/sentry/spring/boot/jakarta/SentryProperties$Logging;)V public fun setReactive (Lio/sentry/spring/boot/jakarta/SentryProperties$Reactive;)V diff --git a/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryAutoConfiguration.java b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryAutoConfiguration.java index 3ca17f75b4e..d3b071c1e8a 100644 --- a/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryAutoConfiguration.java +++ b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryAutoConfiguration.java @@ -273,6 +273,10 @@ public FilterRegistrationBean sentryTracingFilter( } @Configuration(proxyBeanMethods = false) + @ConditionalOnProperty( + value = "sentry.enable-aot-compatibility", + havingValue = "false", + matchIfMissing = true) @Conditional(SentryTracingCondition.class) @ConditionalOnClass(ProceedingJoinPoint.class) @Import(SentryAdviceConfiguration.class) diff --git a/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryProperties.java b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryProperties.java index 6b263a3303f..f5c485b402b 100644 --- a/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryProperties.java +++ b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentryProperties.java @@ -33,6 +33,13 @@ public class SentryProperties extends SentryOptions { /** Reactive framework (e.g. WebFlux) integration properties */ private @NotNull Reactive reactive = new Reactive(); + /** + * If set to true, this flag disables all AOP related features (e.g. {@link + * io.sentry.spring.jakarta.tracing.SentryTransaction}, {@link + * io.sentry.spring.jakarta.tracing.SentrySpan}) to successfully compile to GraalVM + */ + private boolean enableAotCompatibility = false; + public boolean isUseGitCommitIdAsRelease() { return useGitCommitIdAsRelease; } @@ -85,6 +92,14 @@ public void setReactive(@NotNull Reactive reactive) { this.reactive = reactive; } + public boolean isEnableAotCompatibility() { + return enableAotCompatibility; + } + + public void setEnableAotCompatibility(boolean enableAotCompatibility) { + this.enableAotCompatibility = enableAotCompatibility; + } + @Open public static class Logging { /** Enable/Disable logging auto-configuration. */