On Fri, Apr 25, 2008 at 2:48 AM, Rob Davies <[EMAIL PROTECTED]> 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