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








Reply via email to