activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Karasulu" <akaras...@apache.org>
Subject Re: [ActiveMQ] Trying to decipher confusing exception message
Date Fri, 25 Apr 2008 17:49:31 GMT
Ahh OK thanks a bunch Rob.   This furthered my understanding a lot.

Alex

On Fri, Apr 25, 2008 at 1:40 PM, Rob Davies <rajdavies@gmail.com> wrote:

>
> 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message