Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transactional annotation breaks AOT for native image #32555

Closed
nnl-1 opened this issue Mar 30, 2024 · 2 comments
Closed

Transactional annotation breaks AOT for native image #32555

nnl-1 opened this issue Mar 30, 2024 · 2 comments
Labels
for: external-project Needs a fix in external project

Comments

@nnl-1
Copy link

nnl-1 commented Mar 30, 2024

Latest Spring Boot (3.2.4) and Spring (6.1.5) AOT doesn't work for native image.
Config:

  1. Spring Boot 3.2.4
  2. Spring 6.1.5
  3. GraalVM CE 21.0.2
  4. native-maven-plugin 0.10.1

If I uncomment Transactional annotation in CheckRolesLdapAuthenticationProvider (see reproducer) I got the following:

Caused by: java.lang.UnsupportedOperationException: CGLIB runtime enhancement not supported on native image. Make sure to include a pre-generated class on the classpath instead: io.imi.aot_test.auth.CheckRolesLdapAuthenticationProvider$$SpringCGLIB$$1
        at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363) ~[aot_test:6.1.5]
        at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:575) ~[na:na]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.lambda$new$1(AbstractClassGenerator.java:107) ~[na:na]
        at org.springframework.cglib.core.internal.LoadingCache.lambda$createEntry$1(LoadingCache.java:52) ~[na:na]
        at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[aot_test:na]
        at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:57) ~[na:na]
        at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[na:na]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:130) ~[na:na]
        at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:317) ~[aot_test:6.1.5]
        at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:562) ~[na:na]
        at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:407) ~[na:na]
        at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:62) ~[na:na]
        at org.springframework.aop.framework.CglibAopProxy.buildProxy(CglibAopProxy.java:218) ~[aot_test:6.1.5]
        ... 79 common frames omitted

Full log: aot-error.log

There are 2 classes generated CheckRolesLdapAuthenticationProvider$$SpringCGLIB$$0 and CheckRolesLdapAuthenticationProvider$$SpringCGLIB$$1 which we could find in both reflection-config.json/predefined-classes-config.json which I suppose is wrong.

There is no error without Transactional. It could be a dup of this one #30939 but it's marked as closed so I'm confused.

Reproducer: https://github.com/nnl-1/SpringBoot3AotTransactionalReproducer

Thank you!

@nnl-1 nnl-1 changed the title Transaction annotation breaks AOT for native image Transactional annotation breaks AOT for native image Mar 30, 2024
@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged or decided on label Mar 30, 2024
@snicoll
Copy link
Member

snicoll commented Apr 1, 2024

Thanks for the report and the sample, but please report this against the Spring Security project as org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor is the component that's triggering the creation of a CGLIB proxy. When you do, please ping me or add a link to the issue here so that I can follow along.

@snicoll snicoll closed this as not planned Won't fix, can't repro, duplicate, stale Apr 1, 2024
@snicoll snicoll added for: external-project Needs a fix in external project and removed status: waiting-for-triage An issue we've not yet triaged or decided on labels Apr 1, 2024
@nnl-1
Copy link
Author

nnl-1 commented Apr 1, 2024

@snicoll jfyi spring-projects/spring-security#14825

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
for: external-project Needs a fix in external project
Projects
None yet
Development

No branches or pull requests

3 participants