Hello, I'm working on an application where we are migrating activemq to artemis activemq.
I'm running into an issue when trying to use the artemis server and jms client all together on the same classpath. I'm using version 2.19.1 of the artemis activemq server since it's the last version that's compatible with java 8. According to the docs I should use this version and it should be able to connect fine to a remote activemq broker running java 11. That seems to work correctly however when running the integration test suite I'm replacing the old activemq embedded broker with the one from artemis activemq and am running into an issue of incompatibility. Our integration test suite uses the embedded broker so the artemis server is added to the test classpath. When running the tests the embedded broker seems to start fine: [2023-05-10T14:21:58,942|INFO |main|org.apache.activemq.artemis.core.server] AMQ221007: Server is now live [2023-05-10T14:21:58,943|INFO |main|org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.19.1 [localhost, nodeID=42455503-ef2d-11ed-8947-00090faa0001] However when connecting to it I get an error: [2023-05-10T14:22:13,517|WARN |Thread-5 (ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@417a98b5)|org.apache.activemq.artemis.core.server<mailto:ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@417a98b5)|org.apache.activemq.artemis.core.server>] AMQ222225: Sending unexpected exception to the client java.lang.NoClassDefFoundError: Could not initialize class org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType at org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.<init>(BindingsImpl.java:68) at org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.createBindings(PostOfficeImpl.java:1989) at org.apache.activemq.artemis.core.postoffice.impl.SimpleAddressManager.addMappingInternal(SimpleAddressManager.java:260) at org.apache.activemq.artemis.core.postoffice.impl.SimpleAddressManager.addBinding(SimpleAddressManager.java:99) at org.apache.activemq.artemis.core.postoffice.impl.WildcardAddressManager.addBinding(WildcardAddressManager.java:95) at org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.addBinding(PostOfficeImpl.java:878) at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createQueue(ActiveMQServerImpl.java:3833) at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createQueue(ActiveMQServerImpl.java:3765) at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.createQueue(ServerSessionImpl.java:740) at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.slowPacketHandler(ServerSessionPacketHandler.java:377) at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onMessagePacket(ServerSessionPacketHandler.java:298) at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:33) at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65) at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) There seems to be an incompatibility in the shaded class org.apache.activemq.artemis.utils.uri.BeanSupport from commons bean utils. I find two classes of org.apache.activemq.artemis.utils.uri.BeanSupport in two different jars: * artemis-commons 2.19.1 * artemis-jms-client-all In the class Beansupport in the artemis-jms-client-all 2.191 jar I see the following import: import org.apache.activemq.artemis.shaded.org.apache.commons.beanutils.BeanUtilsBean; import org.apache.activemq.artemis.shaded.org.apache.commons.beanutils.Converter; In the class Beansupport in the artemis-commons 2.19.1 jar I see the following import: import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.beanutils.Converter; So what happens when running the tests is that the BeanSupport from jms all client is loaded and not from the artemis-server. This results in the initialization error in the class MessageLoadBalancingType. I didn't find any mention in the documentation that the activemq jms client all is incompatible with the artemis server. This looks like a bug to me. For me if the artemis client and server are using a shaded import of BeanSupport it would make sense to also use the shaded import for the Converter and BeanUtilsBean. Can you confirm this? Is there any chance for a bugfix? I believe the only option I have to make this work is by not using the jms all client jar which is inconvenient to say the least. There is no BOM (Bill of Materials) and the documentation of the 2.191 doesn't list the dependencies to import unlike the latest doc which mentions all the dependencies to add for the client classpath. I'm not sure if this issue exists on the latest version of the artemis activemq but it's not an option for me to use that version due to incompatibility with java 8. Any feedback and or suggestions would be welcome. Regards, Filip