Description
Spring boot version: 2.0.3.RELEASE
In this version of spring boot the following dependencies with versions are defined:
javax.jms:javax.jms-api:2.0.1
org.apache.activemq:activemq-pool:5.15.4
org.apache.activemq:activemq-jms-pool:5.15.4
However, this version of activemq-jms-pool is not fully compatible with the javax.jms-api version.
For example the activemq-jms-pool class org.apache.activemq.jms.pool.PooledProducer does not implement all methods from the stated version of the javax.jms-api interface javax.jms.MessageProducer
So when you create a spring boot project with dependencies:
org.springframework.boot:spring-boot-starter-activemq
org.apache.activemq:activemq-pool
and then you create a JmsTemplate with the deliveryDelay field, it will give the following exception upon sending a message to the queue:
Caused by: java.lang.AbstractMethodError: org.apache.activemq.jms.pool.PooledProducer.setDeliveryDelay(J)V
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:628) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:608) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.jms.core.JmsTemplate.lambda$send$3(JmsTemplate.java:586) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:504) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661) ~[spring-jms-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService.sendAsyncRequestEvent(AsyncRequestService.java:94) ~[classes/:?]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService.lambda$resetFailedAsyncRequests$0(AsyncRequestService.java:49) ~[classes/:?]
at io.vavr.collection.List.map(List.java:1017) ~[vavr-0.9.2.jar:?]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService.lambda$resetFailedAsyncRequests$df2ed96b$1(AsyncRequestService.java:47) ~[classes/:?]
at io.vavr.control.Try.of(Try.java:75) ~[vavr-0.9.2.jar:?]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService.lambda$resetFailedAsyncRequests$1(AsyncRequestService.java:46) ~[classes/:?]
at io.vavr.control.Try.flatMapTry(Try.java:472) ~[vavr-0.9.2.jar:?]
at io.vavr.control.Try.flatMap(Try.java:454) ~[vavr-0.9.2.jar:?]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService.resetFailedAsyncRequests(AsyncRequestService.java:46) ~[classes/:?]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService$$FastClassBySpringCGLIB$$2ed1da93.invoke(<generated>) ~[classes/:?]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684) ~[spring-aop-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at be.fgov.caamihziv.memberdata.application.async.AsyncRequestService$$EnhancerBySpringCGLIB$$19205d65.resetFailedAsyncRequests(<generated>) ~[classes/:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:261) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
... 13 more
I can give more information if it's required