ok, all I have to do is this

javax.jms.Session.createTopic("ID:/mytopic");

and activeMQ creates a temp topic,

how is that non JMS API?

Filip

Rob Davies wrote:
How does that violate the spec - when you are using non JMS API's to get that info ?

On 24 Jun 2008, at 16:34, Filip Hanik - Dev Lists wrote:

The fix to
http://issues.apache.org/activemq/browse/AMQ-1142

in revision:
http://svn.apache.org/viewvc?view=rev&revision=546476

causes the queue or topic creation to use the name to determine if it is supposed to be temporary or not, ignoring the call the client is making.

This simple test case

String connectionId = connection.getConnectionInfo().getConnectionId().toString();
topic = session.createTopic(connectionId);

returns a temporary topic, even though the API call was explicit it didn't want a temp topic.

I would say that this must violate the spec, that a temp queue is created when using an explicit API call to to create a regular one.

A quick fix would be to simply allow a system property to control the behavior (as seen below), but I will take a deeper look into 1142, and see if I can understand why this behavior was put into the session

Filip


Index: activemq-core/src/main/java/org/apache/activemq/ActiveMQSession.java
===================================================================
--- activemq-core/src/main/java/org/apache/activemq/ActiveMQSession.java (revision 669337) +++ activemq-core/src/main/java/org/apache/activemq/ActiveMQSession.java (working copy)
@@ -141,6 +141,9 @@
       */
      public static final int INDIVIDUAL_ACKNOWLEDGE=4;

+    public static final boolean STRICT_DESTINATION_CREATION =
+ Boolean.getBoolean(System.getProperty("org.apache.activemq.STRICT_DESTINATION_CREATION", "false"));
+
   public static interface DeliveryListener {
       void beforeDelivery(ActiveMQSession session, Message msg);

@@ -1040,7 +1043,7 @@
    */
   public Queue createQueue(String queueName) throws JMSException {
       checkClosed();
- if (queueName.startsWith(ActiveMQDestination.TEMP_DESTINATION_NAME_PREFIX)) { + if (queueName.startsWith(ActiveMQDestination.TEMP_DESTINATION_NAME_PREFIX) && (!STRICT_DESTINATION_CREATION)) {

           return new ActiveMQTempQueue(queueName);
       }
       return new ActiveMQQueue(queueName);
@@ -1066,9 +1069,11 @@
    *                 internal error.
    * @since 1.1
    */
+
+
   public Topic createTopic(String topicName) throws JMSException {
       checkClosed();
- if (topicName.startsWith(ActiveMQDestination.TEMP_DESTINATION_NAME_PREFIX)) { + if (topicName.startsWith(ActiveMQDestination.TEMP_DESTINATION_NAME_PREFIX) && (!STRICT_DESTINATION_CREATION)) {

           return new ActiveMQTempTopic(topicName);
       }
       return new ActiveMQTopic(topicName);





Reply via email to