I finally managed to understand why I got the problems described earlier.
The "producer" uses "artemis-jms" while the deployed MDB uses "artemis-ra".
Both components uses
org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.createQueue(…).
However, "artemis-ra" tries to create the queue (although it already exists)
because it calls
org.apache.activemq.artemis.utils.AutoCreateUtil.autoCreateQueue(…) with
"destAddress" set as "jms.queue.TEST.QUEUE.A" (with the 1.x prefix). In
autoCreateQueue(…), the "response.getQueueNames().contains(queueName)" check
fails since the list only contains "TEST.QUEUE.A" (without the 1.x prefix).
I thought it would be enough to add "anycastPrefix=jms.queue." (to the acceptor
in "broker.xml" on the Artemis server) but apparently I also needed to set
"enable-amq1-prefix=" to false on my "remote-artemis" pooled-connection-factory
(in "standalone-full.xml" on the Wildfly server).
I noticed it wasn't possible to set "enable-amq1-prefix" on a
pooled-connection-factory when it was placed within "<server>". I removed
"<server>" from my "messaging-activemq" subsystem and kept a minimum of
configuration:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:15.0">
<in-vm-connector name="in-vm" server-id="0">
<param name="buffer-pooling" value="false"/>
</in-vm-connector>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA
java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
<remote-connector name="remote-artemis" socket-binding="remote-artemis"/>
<pooled-connection-factory name="remote-artemis" entries="java:/RemoteJMS"
connectors="remote-artemis" ha="false" user="myUser" password="myPassword"
min-pool-size="15" max-pool-size="30" statistics-enabled="true"
enable-amq1-prefix="false">
<inbound-config rebalance-connections="true" setup-attempts="-1"
setup-interval="5000"/>
</pooled-connection-factory>
</subsystem>
(Not sure why I needed to keep the "in-vm-connector" and the "activemq-ra"
pooled-connection-factory but I wasn't able to deploy the MDB without them.)
What is the difference between configuring a pooled-connection-factory within
or outside "<server>"? Is "<server>" only needed if I wan't to run a local
Artemis on my Wildfly?
Regards,
Calle