activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From titou10 <titou10.tito...@gmail.com>
Subject Artemis 2.0: JMS seems to create an address/queue on jmsSession.createProducer() calls
Date Fri, 31 Mar 2017 10:53:28 GMT
With Artemis 2.0, with this JMS code...

          Queue jmsQ = sessionJMS.createQueue("nonExistingQueue");
          TextMessage m = sessionJMS.createTextMessage();
          m.setText("whatever");
          try (MessageProducer p = sessionJMS.createProducer(jmsQ);) {
             p.send(m);
          }

...an address/queue (with routingType= ANYCAST) is created on the server but AFAIK, based
on the JMS specs, none of the methods 
called (createQueue(), createProducer(),send()) should do this !

The address/queue is "visible" when calling getAddress() on ResourceName.BROKER via the management
API, even after the server is restart

Not sure what method exactly creates the address/queue but from the JMS specs, for the Session:createQueue()
method it is said:

    "...Note that this method simply creates an object that encapsulates the name of a queue.
It does not create the physical queue 
in the JMS provider"

In fact, it seems that this the createProducer() method that creates the address/queue...

Also with this definition in broker.xml (From the documentation, chapter "Address  Model"):
    <address name="address.foo">
       <anycast>
         <queue name="q1"/>
       </anycast>
    </address>

The following code

          Queue jmsQ = sessionJMS.createQueue("q1");
          TextMessage m = sessionJMS.createTextMessage();
          m.setText("whatever");
          try (MessageProducer p = sessionJMS.createProducer(jmsQ);) {
             p.send(m);
          }

fails on the createProducer() method with this exception:

ActiveMQQueueExistsException[errorType=QUEUE_EXISTS message=AMQ119019: Queue already exists
q1]
     at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:412)
     at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:322)
     at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.createQueue(ActiveMQSessionContext.java:635)
     at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.internalCreateQueue(ClientSessionImpl.java:1836)
     at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.createQueue(ClientSessionImpl.java:389)
     at org.apache.activemq.artemis.jms.client.ActiveMQSession.createBrowser(ActiveMQSession.java:820)
     at org.apache.activemq.artemis.jms.client.ActiveMQSession.createBrowser(ActiveMQSession.java:782)

This may be related to the "auto-create-jms-queues" and "auto-create-jms-topics" settings,
mut IMHO this seems to break JMS specs 
and in the second case it should not try to create tyhe address/queue it it already exists..



Mime
View raw message