activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Davies <rajdav...@gmail.com>
Subject Re: [ActiveMQ] Trying to decipher confusing exception message
Date Fri, 25 Apr 2008 17:40:02 GMT

On 25 Apr 2008, at 16:42, Alex Karasulu wrote:

> On Fri, Apr 25, 2008 at 2:48 AM, Rob Davies <rajdavies@gmail.com>  
> wrote:
>
>>
>> On 25 Apr 2008, at 04:46, Alex Karasulu wrote:
>>
>> Hi all,
>>>
>>> I just started using ActiveMQ 5.1.0 and it's just wonderful.  I  
>>> just wish
>>> I
>>> had a better understanding of it.  Trying to get up to speed  
>>> reading the
>>> code, the bundled test cases and playing with some of my own as  
>>> well.
>>>
>>> Unfortunately I hit a brick wall today when trying to tinker with
>>> temporary
>>> queues.  I got the following exception:
>>>
>>> javax.jms.InvalidDestinationException: Cannot use a Temporary
>>> destination from another Connection
>>>       at
>>> org 
>>> .apache 
>>> .activemq 
>>> .ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:160)
>>>       at
>>> org 
>>> .apache 
>>> .activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1004)
>>>       at
>>> org 
>>> .apache 
>>> .activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:948)
>>>       at
>>> org 
>>> .apache 
>>> .activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:861)
>>>       at
>>> org 
>>> .apache 
>>> .activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:834)
>>>
>>>
>>> Here's my environment in case that may factor in:
>>>  Linux 2.6.22-14-generic SMP AMD x86_64
>>>  Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode)
>>>  Maven version: 2.0.8
>>>
>>> This is coming from the following code snippet from a test.  The  
>>> code
>>> producing the exception is below but please excuse the use of actual
>>> ActiveMQXxxxx objects instead of the JMS equivalents - I've been  
>>> doing
>>> this
>>> just to investigate, and learn about the internals.
>>>
>>>      if ( create )
>>>      {
>>>          factory = new ActiveMQConnectionFactory(
>>> "vm://localhost?create=true&broker.persistent=false" );
>>>      }
>>>      else
>>>      {
>>>          factory = new ActiveMQConnectionFactory(
>>> "vm://localhost?broker.persistent=false" );
>>>      }
>>>      factory.setObjectMessageSerializationDefered( true );
>>>      factory.setCopyMessageOnSend( false );
>>>      factory.setUseAsyncSend( true );
>>>      factory.setStatsEnabled( true );
>>>
>>>      ...
>>>
>>>      String destination = "testQueue";
>>>      connection = ( ActiveMQConnection ) factory.createConnection();
>>>      connection.start();
>>>      session = ( ActiveMQSession ) connection.createSession( false,
>>> Session.AUTO_ACKNOWLEDGE );
>>>      queue = ( ActiveMQTempQueue )
>>> ActiveMQDestination.createDestination( destination,
>>> ActiveMQDestination.TEMP_QUEUE_TYPE );
>>> ====>>>        consumer = ( ActiveMQMessageConsumer )
>>> session.createConsumer( queue );
>>>      consumer.setMessageListener( this );
>>>      consumer.start();
>>>      producer = ( ActiveMQMessageProducer )  
>>> session.createProducer( queue
>>> );
>>>
>>>
>>>
>>> The marked line above (see ====>>>>) where the consumer is created
 
>>> throws
>>> this exception.  The interesting thing is when it does this, I'm  
>>> using the
>>> same connection as well as the the same session.  Why would the  
>>> exception
>>> above say "Cannot use a Temporary destination from another  
>>> Connection" if
>>> I'm using the same connection?
>>>
>>> I tracked it down to a constructor of ActiveMQMessageConsumer on  
>>> line 160
>>> here:
>>>
>>>          String connectionID =
>>> session.connection.getConnectionInfo().getConnectionId().getValue();
>>>
>>>          if (physicalName.indexOf(connectionID) < 0) {
>>>              throw new InvalidDestinationException(
>>>                                                    "Cannot use a
>>> Temporary destination from another Connection");
>>>          }
>>>
>>> The value for my queue's physicalName is showing "testQueue" and  
>>> the value
>>> of the connectionID is showing "ID:newton-58167-1209094847149-2:0".
>>> Obviously the connectionID will not be found in "testQueue".  I'm
>>> wondering
>>> why these values are the way they are and this check is failing?
>>>
>>> These are probably some dumb questions and I must be doing  
>>> something dumb
>>> here.  Looking for enlightenment :).
>>>
>>> Thanks much,
>>> Alex
>>>
>>
>> Hi Alex,
>>
>> use session.createTemporaryQueue() - to create your Queue
>>
>
> Thanks Rob for your response. I only have one problem with this and  
> that is
> not being able to give this method a destination.  Is there some  
> what to
> specify a destination to create the temporary queue?
>
> Thanks,
> Alex

Unfortunately at the moment you can't do that - but if you add an  
enhancement request to our jiras this is something we certainly would  
consider. However temporary destinations are only meant  to be tied to  
a particular connection, and only live as long as that connection.




cheers,

Rob

http://open.iona.com/ -Enterprise Open Integration
http://rajdavies.blogspot.com/




Mime
View raw message