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

Reply via email to