spring-projects / spring-boot

Spring Boot
https://spring.io/projects/spring-boot
Apache License 2.0
74.81k stars 40.6k forks source link

GraalVM Native Image fails createing the AMQP 1.0 JMS Connection Factory #35099

Closed luidoc closed 1 year ago

luidoc commented 1 year ago

On a plain api rest Spring Boot (3.0.5) application, i add @EnableJms and inject a JmsTemplate bean, then I get an error if I run the application in native mode (graalvm):


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)

2023-04-20T14:37:53.675+02:00  INFO 1726009 --- [           main] org.examples.App                         : Starting AOT-processed App using Java 19.0.2 with PID 1726009 (/root/desarrollo/test-amqp-10-jms/target/test-amqp-10-jms started by root in /root/desarrollo/test-amqp-10-jms)
2023-04-20T14:37:53.676+02:00  INFO 1726009 --- [           main] org.examples.App                         : No active profile set, falling back to 1 default profile: "default"
2023-04-20T14:37:53.699+02:00  INFO 1726009 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8084 (http)
2023-04-20T14:37:53.699+02:00  INFO 1726009 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-04-20T14:37:53.700+02:00  INFO 1726009 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.7]
2023-04-20T14:37:53.710+02:00  INFO 1726009 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-04-20T14:37:53.710+02:00  INFO 1726009 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 34 ms
2023-04-20T14:37:53.720+02:00 ERROR 1726009 --- [           main] .b.j.a.AMQP10JMSConnectionFactoryFactory : Exception while createing the AMQP 1.0 JMS Connection Factory.

java.lang.NoSuchMethodException: org.apache.qpid.jms.JmsConnectionFactory.<init>()
        at java.base@19.0.2/java.lang.Class.getConstructor0(DynamicHub.java:3641) ~[test-amqp-10-jms:na]
        at java.base@19.0.2/java.lang.Class.getConstructor(DynamicHub.java:2324) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryFactory.createConnectionFactory(AMQP10JMSConnectionFactoryFactory.java:64) ~[na:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration.createQpidJMSConnectionFactory(AMQP10JMSConnectionFactoryConfiguration.java:94) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration$SimpleConnectionFactoryConfiguration.cachingJmsConnectionFactory(AMQP10JMSConnectionFactoryConfiguration.java:56) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration__BeanDefinitions$SimpleConnectionFactoryConfiguration__BeanDefinitions.lambda$getJmsConnectionFactoryInstanceSupplier$0(AMQP10JMSConnectionFactoryConfiguration__BeanDefinitions.java:45) ~[na:na]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.lambda$get$2(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.invokeBeanSupplier(BeanInstanceSupplier.java:216) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:327) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:267) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:202) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.AutowiredFieldValueResolver.resolveValue(AutowiredFieldValueResolver.java:189) ~[na:na]
        at org.springframework.beans.factory.aot.AutowiredFieldValueResolver.resolveAndSet(AutowiredFieldValueResolver.java:167) ~[na:na]
        at org.examples.ExampleController__Autowiring.apply(ExampleController__Autowiring.java:14) ~[na:na]
        at org.springframework.beans.factory.support.InstanceSupplier$1.get(InstanceSupplier.java:83) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[test-amqp-10-jms:3.0.5]
        at org.examples.App.main(App.java:11) ~[test-amqp-10-jms:na]

2023-04-20T14:37:53.722+02:00  WARN 1726009 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'exampleController': Unsatisfied dependency expressed through field 'jmsTemplate': Error creating bean with name 'jmsTemplate': Unsatisfied dependency expressed through method 'jmsTemplate' parameter 0: Error creating bean with name 'jmsConnectionFactory': Instantiation of supplied bean failed
2023-04-20T14:37:53.722+02:00  INFO 1726009 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-04-20T14:37:53.723+02:00 ERROR 1726009 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'exampleController': Unsatisfied dependency expressed through field 'jmsTemplate': Error creating bean with name 'jmsTemplate': Unsatisfied dependency expressed through method 'jmsTemplate' parameter 0: Error creating bean with name 'jmsConnectionFactory': Instantiation of supplied bean failed
        at org.springframework.beans.factory.aot.AutowiredFieldValueResolver.resolveValue(AutowiredFieldValueResolver.java:195) ~[na:na]
        at org.springframework.beans.factory.aot.AutowiredFieldValueResolver.resolveAndSet(AutowiredFieldValueResolver.java:167) ~[na:na]
        at org.examples.ExampleController__Autowiring.apply(ExampleController__Autowiring.java:14) ~[na:na]
        at org.springframework.beans.factory.support.InstanceSupplier$1.get(InstanceSupplier.java:83) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[test-amqp-10-jms:3.0.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[test-amqp-10-jms:3.0.5]
        at org.examples.App.main(App.java:11) ~[test-amqp-10-jms:na]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jmsTemplate': Unsatisfied dependency expressed through method 'jmsTemplate' parameter 0: Error creating bean with name 'jmsConnectionFactory': Instantiation of supplied bean failed
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:343) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:267) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:202) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.AutowiredFieldValueResolver.resolveValue(AutowiredFieldValueResolver.java:189) ~[na:na]
        ... 22 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory': Instantiation of supplied bean failed
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1220) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:327) ~[na:na]
        ... 37 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to create the AMQP 1.0 JMS ConnectionFactory, make sure the client Jar is on the Classpath.
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryFactory.createConnectionFactory(AMQP10JMSConnectionFactoryFactory.java:93) ~[na:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration.createQpidJMSConnectionFactory(AMQP10JMSConnectionFactoryConfiguration.java:94) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration$SimpleConnectionFactoryConfiguration.cachingJmsConnectionFactory(AMQP10JMSConnectionFactoryConfiguration.java:56) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryConfiguration__BeanDefinitions$SimpleConnectionFactoryConfiguration__BeanDefinitions.lambda$getJmsConnectionFactoryInstanceSupplier$0(AMQP10JMSConnectionFactoryConfiguration__BeanDefinitions.java:45) ~[na:na]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.lambda$get$2(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.invokeBeanSupplier(BeanInstanceSupplier.java:216) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[test-amqp-10-jms:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[test-amqp-10-jms:6.0.7]
        ... 48 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.apache.qpid.jms.JmsConnectionFactory.<init>()
        at java.base@19.0.2/java.lang.Class.getConstructor0(DynamicHub.java:3641) ~[test-amqp-10-jms:na]
        at java.base@19.0.2/java.lang.Class.getConstructor(DynamicHub.java:2324) ~[test-amqp-10-jms:na]
        at org.amqphub.spring.boot.jms.autoconfigure.AMQP10JMSConnectionFactoryFactory.createConnectionFactory(AMQP10JMSConnectionFactoryFactory.java:64) ~[na:na]
        ... 60 common frames omitted

If I directly run the jar, I don't get the error:

java -jar target/test-amqp-10-jms-1.0-SNAPSHOT.jar


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)

2023-04-20T15:02:06.105+02:00  INFO 1729557 --- [           main] org.examples.App                         : Starting App v1.0-SNAPSHOT using Java 19.0.2 with PID 1729557 (/root/desarrollo/test-amqp-10-jms/target/test-amqp-10-jms-1.0-SNAPSHOT.jar started by root in /root/desarrollo/test-amqp-10-jms)
2023-04-20T15:02:06.108+02:00  INFO 1729557 --- [           main] org.examples.App                         : No active profile set, falling back to 1 default profile: "default"
2023-04-20T15:02:07.274+02:00  INFO 1729557 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8084 (http)
2023-04-20T15:02:07.287+02:00  INFO 1729557 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-04-20T15:02:07.288+02:00  INFO 1729557 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.7]
2023-04-20T15:02:07.423+02:00  INFO 1729557 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-04-20T15:02:07.426+02:00  INFO 1729557 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1254 ms
2023-04-20T15:02:07.966+02:00  INFO 1729557 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8084 (http) with context path ''
2023-04-20T15:02:07.985+02:00  INFO 1729557 --- [           main] org.examples.App                         : Started App in 2.343 seconds (process running for 2.833)

The application is a very basic test, I can't see what is the reason for the failure

You can see the source code of the application at https://github.com/luidoc/test-amqp-10-jms.git

luidoc commented 1 year ago

Version info: 'GraalVM 22.3.1 Java 19 CE' Java version info: '19.0.2+7-jvmci-22.3-b12' C compiler: gcc (redhat, x86_64, 11.3.1) Garbage collector: Serial GC 1 user-specific feature(s)

wilkinsona commented 1 year ago

The problem is occurring because AMQP10JMSConnectionFactoryFactory is using reflection to create a connection factory. This is third-party code and is out of our control. Ideally, the problem would be addressed by the library providing Graal metadata that enables the necessary reflection. Failing that, it could be addressed through a contribution to the reachability metadata repository. In the meantime, you could work around the problem by providing your own runtime hints that enables the necessary reflection.